diff --git a/.changes/unreleased/Under the Hood-20240425-020137.yaml b/.changes/unreleased/Under the Hood-20240425-020137.yaml new file mode 100644 index 0000000000..9d12957e5b --- /dev/null +++ b/.changes/unreleased/Under the Hood-20240425-020137.yaml @@ -0,0 +1,6 @@ +kind: Under the Hood +body: Create `metricflow-semantics` package. +time: 2024-04-25T02:01:37.532124-07:00 +custom: + Author: plypaul + Issue: "1150" diff --git a/.github/workflows/cd-push-to-pypi.yaml b/.github/workflows/cd-push-to-pypi.yaml index 7468e1efe1..6b32bec67e 100644 --- a/.github/workflows/cd-push-to-pypi.yaml +++ b/.github/workflows/cd-push-to-pypi.yaml @@ -21,7 +21,7 @@ jobs: with: python-version: "${{ env.PYTHON_VERSION }}" - - name: Hatch Publish + - name: Hatch Publish `metricflow` run: hatch build && hatch publish env: HATCH_INDEX_USER: __token__ diff --git a/.github/workflows/ci-metricflow-unit-tests.yaml b/.github/workflows/ci-metricflow-unit-tests.yaml index 34291067f3..9106eaf83a 100644 --- a/.github/workflows/ci-metricflow-unit-tests.yaml +++ b/.github/workflows/ci-metricflow-unit-tests.yaml @@ -16,7 +16,6 @@ jobs: matrix: python-version: ["3.8", "3.11"] steps: - - name: Check-out the repo uses: actions/checkout@v3 @@ -62,3 +61,25 @@ jobs: - name: Check success run: test ${{ needs.metricflow-unit-tests-duckdb.result }} = 'success' -a ${{ needs.metricflow-unit-tests-postgres.result }} = 'success' + + metricflow-package-tests: + name: MetricFlow Packages Tests + runs-on: ubuntu-latest + strategy: + matrix: + python-version: [ "3.8", "3.11" ] + steps: + + - name: Check-out the repo + uses: actions/checkout@v3 + + - name: Setup Python ${{ inputs.python-version }} Environment + uses: ./.github/actions/setup-python-env + with: + python-version: "${{ matrix.python-version }}" + + - name: Test `metricflow-semantics` Package + run: bash scripts/ci_tests/metricflow_semantics_package_test.sh + + - name: Test `metricflow` Package + run: bash scripts/ci_tests/metricflow_package_test.sh diff --git a/Makefile b/Makefile index aecd70458c..6d81e6bc70 100644 --- a/Makefile +++ b/Makefile @@ -9,7 +9,9 @@ ADDITIONAL_PYTEST_OPTIONS = # Pytest that can populate the persistent source schema USE_PERSISTENT_SOURCE_SCHEMA = --use-persistent-source-schema -POPULATE_PERSISTENT_SOURCE_SCHEMA = tests/source_schema_tools.py::populate_source_schema +TESTS_METRICFLOW = tests_metricflow +TESTS_METRICFLOW_SEMANTICS = tests_metricflow_semantics +POPULATE_PERSISTENT_SOURCE_SCHEMA = $(TESTS_METRICFLOW)/source_schema_tools.py::populate_source_schema # Install Hatch package / project manager .PHONY: install-hatch @@ -19,16 +21,17 @@ install-hatch: # Testing and linting .PHONY: test test: - hatch -v run dev-env:pytest -vv -n $(PARALLELISM) $(ADDITIONAL_PYTEST_OPTIONS) tests/ + cd metricflow-semantics && hatch -v run dev-env:pytest -vv -n $(PARALLELISM) $(ADDITIONAL_PYTEST_OPTIONS) $(TESTS_METRICFLOW_SEMANTICS)/ + hatch -v run dev-env:pytest -vv -n $(PARALLELISM) $(ADDITIONAL_PYTEST_OPTIONS) $(TESTS_METRICFLOW)/ .PHONY: test-postgresql test-postgresql: - hatch -v run postgres-env:pytest -vv -n $(PARALLELISM) $(ADDITIONAL_PYTEST_OPTIONS) tests/ + hatch -v run postgres-env:pytest -vv -n $(PARALLELISM) $(ADDITIONAL_PYTEST_OPTIONS) $(TESTS_METRICFLOW)/ # Engine-specific test environments. .PHONY: test-bigquery test-bigquery: - hatch -v run bigquery-env:pytest -vv -n $(PARALLELISM) $(ADDITIONAL_PYTEST_OPTIONS) tests/ + hatch -v run bigquery-env:pytest -vv -n $(PARALLELISM) $(ADDITIONAL_PYTEST_OPTIONS) $(TESTS_METRICFLOW)/ .PHONY: populate-persistent-source-schema-bigquery populate-persistent-source-schema-bigquery: @@ -36,7 +39,7 @@ populate-persistent-source-schema-bigquery: .PHONY: test-databricks test-databricks: - hatch -v run databricks-env:pytest -vv -n $(PARALLELISM) $(ADDITIONAL_PYTEST_OPTIONS) tests/ + hatch -v run databricks-env:pytest -vv -n $(PARALLELISM) $(ADDITIONAL_PYTEST_OPTIONS) $(TESTS_METRICFLOW)/ .PHONY: populate-persistent-source-schema-databricks populate-persistent-source-schema-databricks: @@ -44,7 +47,7 @@ populate-persistent-source-schema-databricks: .PHONY: test-redshift test-redshift: - hatch -v run redshift-env:pytest -vv -n $(PARALLELISM) $(ADDITIONAL_PYTEST_OPTIONS) tests/ + hatch -v run redshift-env:pytest -vv -n $(PARALLELISM) $(ADDITIONAL_PYTEST_OPTIONS) $(TESTS_METRICFLOW)/ .PHONY: populate-persistent-source-schema-redshift populate-persistent-source-schema-redshift: @@ -53,7 +56,7 @@ populate-persistent-source-schema-redshift: .PHONY: test-snowflake test-snowflake: - hatch -v run snowflake-env:pytest -vv -n $(PARALLELISM) $(ADDITIONAL_PYTEST_OPTIONS) tests/ + hatch -v run snowflake-env:pytest -vv -n $(PARALLELISM) $(ADDITIONAL_PYTEST_OPTIONS) $(TESTS_METRICFLOW)/ .PHONY: populate-persistent-source-schema-snowflake populate-persistent-source-schema-snowflake: @@ -61,7 +64,7 @@ populate-persistent-source-schema-snowflake: .PHONY: test-trino test-trino: - hatch -v run trino-env:pytest -vv -n $(PARALLELISM) $(ADDITIONAL_PYTEST_OPTIONS) tests/ + hatch -v run trino-env:pytest -vv -n $(PARALLELISM) $(ADDITIONAL_PYTEST_OPTIONS) $(TESTS_METRICFLOW)/ .PHONY: lint lint: @@ -79,12 +82,12 @@ trino: # Re-generate test snapshots using all supported SQL engines. .PHONY: regenerate-test-snapshots regenerate-test-snapshots: - hatch -v run dev-env:python tests/generate_snapshots.py + hatch -v run dev-env:python tests_metricflow/generate_snapshots.py # Populate persistent source schemas for all relevant SQL engines. .PHONY: populate-persistent-source-schemas populate-persistent-source-schemas: - hatch -v run dev-env:python tests/populate_persistent_source_schemas.py + hatch -v run dev-env:python $(TESTS_METRICFLOW)/populate_persistent_source_schemas.py # Re-generate snapshots for the default SQL engine. .PHONY: test-snap diff --git a/dbt-metricflow/dbt_metricflow/cli/cli_context.py b/dbt-metricflow/dbt_metricflow/cli/cli_context.py index 83abb96676..bdc3fd2454 100644 --- a/dbt-metricflow/dbt_metricflow/cli/cli_context.py +++ b/dbt-metricflow/dbt_metricflow/cli/cli_context.py @@ -6,11 +6,11 @@ from typing import Dict, Optional from dbt_semantic_interfaces.protocols.semantic_manifest import SemanticManifest +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup from dbt_metricflow.cli.dbt_connectors.adapter_backed_client import AdapterBackedSqlClient from dbt_metricflow.cli.dbt_connectors.dbt_config_accessor import dbtArtifacts, dbtProjectMetadata from metricflow.engine.metricflow_engine import MetricFlowEngine -from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup from metricflow.protocols.sql_client import SqlClient logger = logging.getLogger(__name__) diff --git a/dbt-metricflow/dbt_metricflow/cli/dbt_connectors/adapter_backed_client.py b/dbt-metricflow/dbt_metricflow/cli/dbt_connectors/adapter_backed_client.py index 8d112e2c4f..0ae19f3ed7 100644 --- a/dbt-metricflow/dbt_metricflow/cli/dbt_connectors/adapter_backed_client.py +++ b/dbt-metricflow/dbt_metricflow/cli/dbt_connectors/adapter_backed_client.py @@ -8,12 +8,13 @@ from dbt.adapters.base.impl import BaseAdapter from dbt.exceptions import DbtDatabaseError from dbt_semantic_interfaces.enum_extension import assert_values_exhausted +from metricflow_semantics.errors.error_classes import SqlBindParametersNotSupportedError +from metricflow_semantics.mf_logging.formatting import indent +from metricflow_semantics.mf_logging.pretty_print import mf_pformat +from metricflow_semantics.random_id import random_id +from metricflow_semantics.sql.sql_bind_parameters import SqlBindParameters -from metricflow.errors.errors import SqlBindParametersNotSupportedError -from metricflow.mf_logging.formatting import indent -from metricflow.mf_logging.pretty_print import mf_pformat from metricflow.protocols.sql_client import SqlEngine -from metricflow.random_id import random_id from metricflow.sql.render.big_query import BigQuerySqlQueryPlanRenderer from metricflow.sql.render.databricks import DatabricksSqlQueryPlanRenderer from metricflow.sql.render.duckdb_renderer import DuckDbSqlQueryPlanRenderer @@ -22,7 +23,6 @@ from metricflow.sql.render.snowflake import SnowflakeSqlQueryPlanRenderer from metricflow.sql.render.sql_plan_renderer import SqlQueryPlanRenderer from metricflow.sql.render.trino import TrinoSqlQueryPlanRenderer -from metricflow.sql.sql_bind_parameters import SqlBindParameters from metricflow.sql_request.sql_request_attributes import SqlRequestId logger = logging.getLogger(__name__) diff --git a/dbt-metricflow/dbt_metricflow/cli/dbt_connectors/dbt_config_accessor.py b/dbt-metricflow/dbt_metricflow/cli/dbt_connectors/dbt_config_accessor.py index 12eace5056..5ac5f32f7e 100644 --- a/dbt-metricflow/dbt_metricflow/cli/dbt_connectors/dbt_config_accessor.py +++ b/dbt-metricflow/dbt_metricflow/cli/dbt_connectors/dbt_config_accessor.py @@ -12,12 +12,11 @@ from dbt.config.project import Project from dbt.config.runtime import load_profile, load_project from dbt_semantic_interfaces.protocols.semantic_manifest import SemanticManifest +from metricflow_semantics.errors.error_classes import ModelCreationException +from metricflow_semantics.mf_logging.pretty_print import mf_pformat +from metricflow_semantics.model.dbt_manifest_parser import parse_manifest_from_dbt_generated_manifest from typing_extensions import Self -from metricflow.errors.errors import ModelCreationException -from metricflow.mf_logging.pretty_print import mf_pformat -from metricflow.model.dbt_manifest_parser import parse_manifest_from_dbt_generated_manifest - logger = logging.getLogger(__name__) diff --git a/dbt-metricflow/dbt_metricflow/cli/main.py b/dbt-metricflow/dbt_metricflow/cli/main.py index fa1ffe8831..f8dda90028 100644 --- a/dbt-metricflow/dbt_metricflow/cli/main.py +++ b/dbt-metricflow/dbt_metricflow/cli/main.py @@ -18,6 +18,7 @@ from dbt_semantic_interfaces.validations.semantic_manifest_validator import SemanticManifestValidator from dbt_semantic_interfaces.validations.validator_helpers import SemanticManifestValidationResults from halo import Halo +from metricflow_semantics.dag.dag_visualization import display_dag_as_svg from update_checker import UpdateChecker import dbt_metricflow.cli.custom_click_types as click_custom @@ -35,11 +36,10 @@ query_options, start_end_time_options, ) -from metricflow.dag.dag_visualization import display_dag_as_svg from metricflow.engine.metricflow_engine import MetricFlowExplainResult, MetricFlowQueryRequest, MetricFlowQueryResult -from metricflow.model.data_warehouse_model_validator import DataWarehouseModelValidator from metricflow.telemetry.models import TelemetryLevel from metricflow.telemetry.reporter import TelemetryReporter, log_call +from metricflow.validation.data_warehouse_model_validator import DataWarehouseModelValidator logger = logging.getLogger(__name__) diff --git a/metricflow-semantics/LICENSE b/metricflow-semantics/LICENSE new file mode 100644 index 0000000000..5bfefb53d1 --- /dev/null +++ b/metricflow-semantics/LICENSE @@ -0,0 +1,90 @@ +License text copyright © 2017 MariaDB Corporation Ab, All Rights Reserved. +“Business Source License” is a trademark of MariaDB Corporation Ab. + +Licensed Work: dbt MetricFlow + +Change Date: The change date for each release of the Licensed Work will +be the 3rd anniversary of the initial release date of that +release of the Licensed Work. + +Change License: Apache 2.0 https://www.apache.org/licenses/LICENSE-2.0 + +Additional Use Grant: The Licensor hereby grants you the right to use the +Licensed Work for production purposes that consist of +your internal business purposes, but not for the purpose +of providing managed services or software-as-a-service +to others. + +Terms + +The Licensor hereby grants you the right to copy, modify, create derivative +works, redistribute, and make non-production use of the Licensed Work. The +Licensor may make an Additional Use Grant, above, permitting limited production +use. + +Effective on the Change Date, or the fourth anniversary of the first publicly +available distribution of a specific version of the Licensed Work under this +License, whichever comes first, the Licensor hereby grants you rights under the +terms of the Change License, and the rights granted in the paragraph above +terminate. + +If your use of the Licensed Work does not comply with the requirements currently +in effect as described in this License, you must purchase a commercial license +from the Licensor, its affiliated entities, or authorized resellers, or you must +refrain from using the Licensed Work. + +All copies of the original and modified Licensed Work, and derivative works of +the Licensed Work, are subject to this License. This License applies separately +for each version of the Licensed Work and the Change Date may vary for each +version of the Licensed Work released by Licensor. + +You must conspicuously display this License on each original or modified copy of +the Licensed Work. If you receive the Licensed Work in original or modified form +from a third party, the terms and conditions set forth in this License apply to +your use of that work. + +Any use of the Licensed Work in violation of this License will automatically +terminate your rights under this License for the current and all other versions +of the Licensed Work. + +This License does not grant you any right in any trademark or logo of Licensor +or its affiliates (provided that you may use a trademark or logo of Licensor as +expressly required by this License).TO THE EXTENT PERMITTED BY APPLICABLE LAW, +THE LICENSED WORK IS PROVIDED ON AN “AS IS” BASIS. LICENSOR HEREBY DISCLAIMS ALL +WARRANTIES AND CONDITIONS, EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, +NON-INFRINGEMENT, AND TITLE.MariaDB hereby grants you permission to use this +License’s text to license your works, and to refer to it using the trademark +“Business Source License”, as long as you comply with the Covenants of Licensor +below. + +Covenants of Licensor + +In consideration of the right to use this License’s text and the “Business +Source License” name and trademark, Licensor covenants to MariaDB, and to all +other recipients of the licensed work to be provided by Licensor: + +To specify as the Change License the GPL Version 2.0 or any later version, or a +license that is compatible with GPL Version 2.0 or a later version, where +“compatible” means that software provided under the Change License can be +included in a program with software provided under GPL Version 2.0 or a later +version. Licensor may specify additional Change Licenses without limitation. + +To either: (a) specify an additional grant of rights to use that does not impose +any additional restriction on the right granted in this License, as the +Additional Use Grant; or (b) insert the text “None”. + +To specify a Change Date. + +Not to modify this License in any other way. + +Notice + +The Business Source License (this document, or the “License”) is not an Open +Source license. However, the Licensed Work will eventually be made available +under an Open Source License, as stated in this License. + +For more information on the use of the Business Source License for MariaDB +products, please visit the MariaDB Business Source License FAQ. For more +information on the use of the Business Source License generally, please visit +the Adopting and Developing Business Source License FAQ. diff --git a/metricflow-semantics/README.md b/metricflow-semantics/README.md new file mode 100644 index 0000000000..c9b31a010e --- /dev/null +++ b/metricflow-semantics/README.md @@ -0,0 +1,15 @@ +

+ + + + + + + +

+ +# Welcome to metricflow-semantics + +`metricflow-semantics` encapsulates the modules needed to resolve the semantics of MetricFlow queries. +## Repo use cases +- Resolving the dbt model dependencies of a (saved) query in MetricFlow for DAG dependency management. diff --git a/metricflow/collection_helpers/__init__.py b/metricflow-semantics/metricflow_semantics/__init__.py similarity index 100% rename from metricflow/collection_helpers/__init__.py rename to metricflow-semantics/metricflow_semantics/__init__.py diff --git a/metricflow/aggregation_properties.py b/metricflow-semantics/metricflow_semantics/aggregation_properties.py similarity index 100% rename from metricflow/aggregation_properties.py rename to metricflow-semantics/metricflow_semantics/aggregation_properties.py diff --git a/metricflow/assert_one_arg.py b/metricflow-semantics/metricflow_semantics/assert_one_arg.py similarity index 100% rename from metricflow/assert_one_arg.py rename to metricflow-semantics/metricflow_semantics/assert_one_arg.py diff --git a/metricflow/dag/__init__.py b/metricflow-semantics/metricflow_semantics/collection_helpers/__init__.py similarity index 100% rename from metricflow/dag/__init__.py rename to metricflow-semantics/metricflow_semantics/collection_helpers/__init__.py diff --git a/metricflow/collection_helpers/merger.py b/metricflow-semantics/metricflow_semantics/collection_helpers/merger.py similarity index 100% rename from metricflow/collection_helpers/merger.py rename to metricflow-semantics/metricflow_semantics/collection_helpers/merger.py diff --git a/metricflow/errors/__init__.py b/metricflow-semantics/metricflow_semantics/dag/__init__.py similarity index 100% rename from metricflow/errors/__init__.py rename to metricflow-semantics/metricflow_semantics/dag/__init__.py diff --git a/metricflow/dag/dag_to_text.py b/metricflow-semantics/metricflow_semantics/dag/dag_to_text.py similarity index 98% rename from metricflow/dag/dag_to_text.py rename to metricflow-semantics/metricflow_semantics/dag/dag_to_text.py index c2f218fefe..5b3ea8ad58 100644 --- a/metricflow/dag/dag_to_text.py +++ b/metricflow-semantics/metricflow_semantics/dag/dag_to_text.py @@ -12,9 +12,9 @@ import jinja2 if typing.TYPE_CHECKING: - from metricflow.dag.mf_dag import DagNode, DagNodeT, DisplayedProperty, MetricFlowDag + from metricflow_semantics.dag.mf_dag import DagNode, DagNodeT, DisplayedProperty, MetricFlowDag -from metricflow.mf_logging.pretty_print import mf_pformat +from metricflow_semantics.mf_logging.pretty_print import mf_pformat logger = logging.getLogger(__name__) diff --git a/metricflow/dag/dag_visualization.py b/metricflow-semantics/metricflow_semantics/dag/dag_visualization.py similarity index 93% rename from metricflow/dag/dag_visualization.py rename to metricflow-semantics/metricflow_semantics/dag/dag_visualization.py index 67544ad394..45260d2c13 100644 --- a/metricflow/dag/dag_visualization.py +++ b/metricflow-semantics/metricflow_semantics/dag/dag_visualization.py @@ -6,8 +6,8 @@ import graphviz -from metricflow.dag.mf_dag import DagNode, MetricFlowDag -from metricflow.random_id import random_id +from metricflow_semantics.dag.mf_dag import DagNode, MetricFlowDag +from metricflow_semantics.random_id import random_id logger = logging.getLogger(__name__) DagNodeT = TypeVar("DagNodeT", bound=DagNode) diff --git a/metricflow/dag/id_prefix.py b/metricflow-semantics/metricflow_semantics/dag/id_prefix.py similarity index 100% rename from metricflow/dag/id_prefix.py rename to metricflow-semantics/metricflow_semantics/dag/id_prefix.py diff --git a/metricflow/dag/mf_dag.py b/metricflow-semantics/metricflow_semantics/dag/mf_dag.py similarity index 96% rename from metricflow/dag/mf_dag.py rename to metricflow-semantics/metricflow_semantics/dag/mf_dag.py index 68a84dd916..b7bcb0ab20 100644 --- a/metricflow/dag/mf_dag.py +++ b/metricflow-semantics/metricflow_semantics/dag/mf_dag.py @@ -11,10 +11,10 @@ import jinja2 -from metricflow.dag.dag_to_text import MetricFlowDagTextFormatter -from metricflow.dag.id_prefix import IdPrefix -from metricflow.dag.sequential_id import SequentialIdGenerator -from metricflow.visitor import VisitorOutputT +from metricflow_semantics.dag.dag_to_text import MetricFlowDagTextFormatter +from metricflow_semantics.dag.id_prefix import IdPrefix +from metricflow_semantics.dag.sequential_id import SequentialIdGenerator +from metricflow_semantics.visitor import VisitorOutputT logger = logging.getLogger(__name__) diff --git a/metricflow/dag/sequential_id.py b/metricflow-semantics/metricflow_semantics/dag/sequential_id.py similarity index 96% rename from metricflow/dag/sequential_id.py rename to metricflow-semantics/metricflow_semantics/dag/sequential_id.py index a26f29c6f5..853109ff6d 100644 --- a/metricflow/dag/sequential_id.py +++ b/metricflow-semantics/metricflow_semantics/dag/sequential_id.py @@ -6,7 +6,7 @@ from typing_extensions import override -from metricflow.dag.id_prefix import IdPrefix +from metricflow_semantics.dag.id_prefix import IdPrefix @dataclass(frozen=True) diff --git a/metricflow/filters/__init__.py b/metricflow-semantics/metricflow_semantics/errors/__init__.py similarity index 100% rename from metricflow/filters/__init__.py rename to metricflow-semantics/metricflow_semantics/errors/__init__.py diff --git a/metricflow/errors/errors.py b/metricflow-semantics/metricflow_semantics/errors/error_classes.py similarity index 100% rename from metricflow/errors/errors.py rename to metricflow-semantics/metricflow_semantics/errors/error_classes.py diff --git a/metricflow/model/__init__.py b/metricflow-semantics/metricflow_semantics/filters/__init__.py similarity index 100% rename from metricflow/model/__init__.py rename to metricflow-semantics/metricflow_semantics/filters/__init__.py diff --git a/metricflow/filters/merge_where.py b/metricflow-semantics/metricflow_semantics/filters/merge_where.py similarity index 100% rename from metricflow/filters/merge_where.py rename to metricflow-semantics/metricflow_semantics/filters/merge_where.py diff --git a/metricflow/filters/time_constraint.py b/metricflow-semantics/metricflow_semantics/filters/time_constraint.py similarity index 98% rename from metricflow/filters/time_constraint.py rename to metricflow-semantics/metricflow_semantics/filters/time_constraint.py index b7a00ef6cb..69a8bd8d96 100644 --- a/metricflow/filters/time_constraint.py +++ b/metricflow-semantics/metricflow_semantics/filters/time_constraint.py @@ -9,7 +9,7 @@ from dbt_semantic_interfaces.dataclass_serialization import SerializableDataclass from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity -from metricflow.time.time_granularity import offset_period +from metricflow_semantics.time.time_granularity import offset_period logger = logging.getLogger(__name__) diff --git a/metricflow/instances.py b/metricflow-semantics/metricflow_semantics/instances.py similarity index 97% rename from metricflow/instances.py rename to metricflow-semantics/metricflow_semantics/instances.py index f1e8164f8c..2e6c4499c3 100644 --- a/metricflow/instances.py +++ b/metricflow-semantics/metricflow_semantics/instances.py @@ -9,9 +9,9 @@ from dbt_semantic_interfaces.dataclass_serialization import SerializableDataclass from dbt_semantic_interfaces.references import MetricModelReference, SemanticModelElementReference -from metricflow.aggregation_properties import AggregationState -from metricflow.specs.column_assoc import ColumnAssociation -from metricflow.specs.specs import ( +from metricflow_semantics.aggregation_properties import AggregationState +from metricflow_semantics.specs.column_assoc import ColumnAssociation +from metricflow_semantics.specs.spec_classes import ( DimensionSpec, EntitySpec, GroupByMetricSpec, diff --git a/metricflow/model/semantics/__init__.py b/metricflow-semantics/metricflow_semantics/mf_logging/__init__.py similarity index 100% rename from metricflow/model/semantics/__init__.py rename to metricflow-semantics/metricflow_semantics/mf_logging/__init__.py diff --git a/metricflow/mf_logging/formatting.py b/metricflow-semantics/metricflow_semantics/mf_logging/formatting.py similarity index 100% rename from metricflow/mf_logging/formatting.py rename to metricflow-semantics/metricflow_semantics/mf_logging/formatting.py diff --git a/metricflow/mf_logging/pretty_print.py b/metricflow-semantics/metricflow_semantics/mf_logging/pretty_print.py similarity index 98% rename from metricflow/mf_logging/pretty_print.py rename to metricflow-semantics/metricflow_semantics/mf_logging/pretty_print.py index 08ab8c84ac..330d9e1cca 100644 --- a/metricflow/mf_logging/pretty_print.py +++ b/metricflow-semantics/metricflow_semantics/mf_logging/pretty_print.py @@ -9,7 +9,7 @@ from pydantic import BaseModel -from metricflow.mf_logging.formatting import indent +from metricflow_semantics.mf_logging.formatting import indent logger = logging.getLogger(__name__) @@ -36,7 +36,8 @@ def __init__( @staticmethod def _is_pydantic_base_model(obj: Any): # type:ignore - return isinstance(obj, BaseModel) + # Checking the attribute as the BaseModel check fails for newer version of Pydantic. + return isinstance(obj, BaseModel) or hasattr(obj, "__config__") def _handle_sequence_obj(self, list_like_obj: Union[list, tuple], remaining_line_width: Optional[int]) -> str: """Pretty prints a sequence object i.e. list or tuple. diff --git a/metricflow/mf_logging/runtime.py b/metricflow-semantics/metricflow_semantics/mf_logging/runtime.py similarity index 100% rename from metricflow/mf_logging/runtime.py rename to metricflow-semantics/metricflow_semantics/mf_logging/runtime.py diff --git a/metricflow/model/transformations/__init__.py b/metricflow-semantics/metricflow_semantics/model/__init__.py similarity index 100% rename from metricflow/model/transformations/__init__.py rename to metricflow-semantics/metricflow_semantics/model/__init__.py diff --git a/metricflow/model/dbt_manifest_parser.py b/metricflow-semantics/metricflow_semantics/model/dbt_manifest_parser.py similarity index 93% rename from metricflow/model/dbt_manifest_parser.py rename to metricflow-semantics/metricflow_semantics/model/dbt_manifest_parser.py index 0e53410084..ea1ba90c9c 100644 --- a/metricflow/model/dbt_manifest_parser.py +++ b/metricflow-semantics/metricflow_semantics/model/dbt_manifest_parser.py @@ -16,7 +16,7 @@ PydanticSemanticManifestTransformer, ) -from metricflow.model.transformations.dedupe_metric_input_measures import DedupeMetricInputMeasuresRule +from metricflow_semantics.model.transformations.dedupe_metric_input_measures import DedupeMetricInputMeasuresRule def parse_manifest_from_dbt_generated_manifest(manifest_json_string: str) -> PydanticSemanticManifest: diff --git a/metricflow/model/graph.py b/metricflow-semantics/metricflow_semantics/model/graph.py similarity index 100% rename from metricflow/model/graph.py rename to metricflow-semantics/metricflow_semantics/model/graph.py diff --git a/metricflow/model/object_to_reference.py b/metricflow-semantics/metricflow_semantics/model/object_to_reference.py similarity index 100% rename from metricflow/model/object_to_reference.py rename to metricflow-semantics/metricflow_semantics/model/object_to_reference.py diff --git a/metricflow-semantics/metricflow_semantics/model/semantic_manifest_lookup.py b/metricflow-semantics/metricflow_semantics/model/semantic_manifest_lookup.py new file mode 100644 index 0000000000..0068424a2e --- /dev/null +++ b/metricflow-semantics/metricflow_semantics/model/semantic_manifest_lookup.py @@ -0,0 +1,31 @@ +from __future__ import annotations + +import logging + +from dbt_semantic_interfaces.protocols.semantic_manifest import SemanticManifest + +from metricflow_semantics.model.semantics.metric_lookup import MetricLookup +from metricflow_semantics.model.semantics.semantic_model_lookup import SemanticModelLookup + +logger = logging.getLogger(__name__) + + +class SemanticManifestLookup: + """Adds semantics information to the user configured model.""" + + def __init__(self, semantic_manifest: SemanticManifest) -> None: # noqa: D107 + self._semantic_manifest = semantic_manifest + self._semantic_model_lookup = SemanticModelLookup(semantic_manifest) + self._metric_lookup = MetricLookup(self._semantic_manifest, self._semantic_model_lookup) + + @property + def semantic_manifest(self) -> SemanticManifest: # noqa: D102 + return self._semantic_manifest + + @property + def semantic_model_lookup(self) -> SemanticModelLookup: # noqa: D102 + return self._semantic_model_lookup + + @property + def metric_lookup(self) -> MetricLookup: # noqa: D102 + return self._metric_lookup diff --git a/metricflow/naming/__init__.py b/metricflow-semantics/metricflow_semantics/model/semantics/__init__.py similarity index 100% rename from metricflow/naming/__init__.py rename to metricflow-semantics/metricflow_semantics/model/semantics/__init__.py diff --git a/metricflow/model/semantics/element_group.py b/metricflow-semantics/metricflow_semantics/model/semantics/element_group.py similarity index 100% rename from metricflow/model/semantics/element_group.py rename to metricflow-semantics/metricflow_semantics/model/semantics/element_group.py diff --git a/metricflow/model/semantics/linkable_element.py b/metricflow-semantics/metricflow_semantics/model/semantics/linkable_element.py similarity index 99% rename from metricflow/model/semantics/linkable_element.py rename to metricflow-semantics/metricflow_semantics/model/semantics/linkable_element.py index 9f95b0cdd9..7167a784b1 100644 --- a/metricflow/model/semantics/linkable_element.py +++ b/metricflow-semantics/metricflow_semantics/model/semantics/linkable_element.py @@ -10,7 +10,7 @@ from dbt_semantic_interfaces.type_enums.date_part import DatePart from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity -from metricflow.specs.specs import EntityReference +from metricflow_semantics.specs.spec_classes import EntityReference class LinkableElementType(Enum): diff --git a/metricflow/model/semantics/linkable_element_set.py b/metricflow-semantics/metricflow_semantics/model/semantics/linkable_element_set.py similarity index 98% rename from metricflow/model/semantics/linkable_element_set.py rename to metricflow-semantics/metricflow_semantics/model/semantics/linkable_element_set.py index 7ef277b61f..3f3d6d09e5 100644 --- a/metricflow/model/semantics/linkable_element_set.py +++ b/metricflow-semantics/metricflow_semantics/model/semantics/linkable_element_set.py @@ -4,7 +4,7 @@ from dataclasses import dataclass, field from typing import Dict, FrozenSet, List, Sequence, Set, Tuple -from metricflow.model.semantics.linkable_element import ( +from metricflow_semantics.model.semantics.linkable_element import ( ElementPathKey, LinkableDimension, LinkableElementProperty, @@ -12,7 +12,13 @@ LinkableEntity, LinkableMetric, ) -from metricflow.specs.specs import DimensionSpec, EntitySpec, GroupByMetricSpec, LinkableSpecSet, TimeDimensionSpec +from metricflow_semantics.specs.spec_classes import ( + DimensionSpec, + EntitySpec, + GroupByMetricSpec, + LinkableSpecSet, + TimeDimensionSpec, +) @dataclass(frozen=True) diff --git a/metricflow/model/semantics/linkable_spec_resolver.py b/metricflow-semantics/metricflow_semantics/model/semantics/linkable_spec_resolver.py similarity index 97% rename from metricflow/model/semantics/linkable_spec_resolver.py rename to metricflow-semantics/metricflow_semantics/model/semantics/linkable_spec_resolver.py index 85429eb0d5..ce81cf8699 100644 --- a/metricflow/model/semantics/linkable_spec_resolver.py +++ b/metricflow-semantics/metricflow_semantics/model/semantics/linkable_spec_resolver.py @@ -18,11 +18,11 @@ from dbt_semantic_interfaces.type_enums import MetricType from dbt_semantic_interfaces.type_enums.date_part import DatePart from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity +from dbt_semantic_interfaces.validations.unique_valid_name import MetricFlowReservedKeywords -from metricflow.dataset.dataset import DataSet -from metricflow.errors.errors import UnknownMetricLinkingError -from metricflow.mf_logging.pretty_print import mf_pformat -from metricflow.model.semantics.linkable_element import ( +from metricflow_semantics.errors.error_classes import UnknownMetricLinkingError +from metricflow_semantics.mf_logging.pretty_print import mf_pformat +from metricflow_semantics.model.semantics.linkable_element import ( ElementPathKey, LinkableDimension, LinkableElementProperty, @@ -32,15 +32,15 @@ SemanticModelJoinPath, SemanticModelJoinPathElement, ) -from metricflow.model.semantics.linkable_element_set import LinkableElementSet -from metricflow.model.semantics.semantic_model_join_evaluator import SemanticModelJoinEvaluator -from metricflow.specs.specs import ( +from metricflow_semantics.model.semantics.linkable_element_set import LinkableElementSet +from metricflow_semantics.model.semantics.semantic_model_join_evaluator import SemanticModelJoinEvaluator +from metricflow_semantics.specs.spec_classes import ( DEFAULT_TIME_GRANULARITY, EntityReference, ) if TYPE_CHECKING: - from metricflow.model.semantics.semantic_model_lookup import SemanticModelLookup + from metricflow_semantics.model.semantics.semantic_model_lookup import SemanticModelLookup logger = logging.getLogger(__name__) @@ -412,7 +412,7 @@ def _get_metric_time_elements(self, measure_reference: Optional[MeasureReference for date_part in possible_date_parts: path_key = ElementPathKey( - element_name=DataSet.metric_time_dimension_name(), + element_name=MetricFlowReservedKeywords.METRIC_TIME.value, element_type=LinkableElementType.TIME_DIMENSION, entity_links=(), time_granularity=time_granularity, @@ -421,7 +421,7 @@ def _get_metric_time_elements(self, measure_reference: Optional[MeasureReference path_key_to_linkable_dimensions[path_key].append( LinkableDimension( semantic_model_origin=measure_semantic_model.reference if measure_semantic_model else None, - element_name=DataSet.metric_time_dimension_name(), + element_name=MetricFlowReservedKeywords.METRIC_TIME.value, dimension_type=DimensionType.TIME, entity_links=(), join_path=(), diff --git a/metricflow/model/semantics/metric_lookup.py b/metricflow-semantics/metricflow_semantics/model/semantics/metric_lookup.py similarity index 93% rename from metricflow/model/semantics/metric_lookup.py rename to metricflow-semantics/metricflow_semantics/model/semantics/metric_lookup.py index 4cc14b176a..0809a811ba 100644 --- a/metricflow/model/semantics/metric_lookup.py +++ b/metricflow-semantics/metricflow_semantics/model/semantics/metric_lookup.py @@ -8,15 +8,15 @@ from dbt_semantic_interfaces.protocols.semantic_manifest import SemanticManifest from dbt_semantic_interfaces.references import MeasureReference, MetricReference -from metricflow.errors.errors import DuplicateMetricError, MetricNotFoundError, NonExistentMeasureError -from metricflow.model.semantics.linkable_element import LinkableElementProperty -from metricflow.model.semantics.linkable_element_set import LinkableElementSet -from metricflow.model.semantics.linkable_spec_resolver import ( +from metricflow_semantics.errors.error_classes import DuplicateMetricError, MetricNotFoundError, NonExistentMeasureError +from metricflow_semantics.model.semantics.linkable_element import LinkableElementProperty +from metricflow_semantics.model.semantics.linkable_element_set import LinkableElementSet +from metricflow_semantics.model.semantics.linkable_spec_resolver import ( ValidLinkableSpecResolver, ) -from metricflow.model.semantics.semantic_model_join_evaluator import MAX_JOIN_HOPS -from metricflow.model.semantics.semantic_model_lookup import SemanticModelLookup -from metricflow.specs.specs import TimeDimensionSpec +from metricflow_semantics.model.semantics.semantic_model_join_evaluator import MAX_JOIN_HOPS +from metricflow_semantics.model.semantics.semantic_model_lookup import SemanticModelLookup +from metricflow_semantics.specs.spec_classes import TimeDimensionSpec logger = logging.getLogger(__name__) diff --git a/metricflow/model/semantics/semantic_model_container.py b/metricflow-semantics/metricflow_semantics/model/semantics/semantic_model_container.py similarity index 100% rename from metricflow/model/semantics/semantic_model_container.py rename to metricflow-semantics/metricflow_semantics/model/semantics/semantic_model_container.py diff --git a/metricflow/model/semantics/semantic_model_join_evaluator.py b/metricflow-semantics/metricflow_semantics/model/semantics/semantic_model_join_evaluator.py similarity index 85% rename from metricflow/model/semantics/semantic_model_join_evaluator.py rename to metricflow-semantics/metricflow_semantics/model/semantics/semantic_model_join_evaluator.py index ed8c3f7205..9ee52f2974 100644 --- a/metricflow/model/semantics/semantic_model_join_evaluator.py +++ b/metricflow-semantics/metricflow_semantics/model/semantics/semantic_model_join_evaluator.py @@ -10,11 +10,8 @@ SemanticModelReference, ) -from metricflow.instances import EntityInstance, InstanceSet -from metricflow.mf_logging.pretty_print import mf_pformat - if TYPE_CHECKING: - from metricflow.model.semantics.semantic_model_lookup import SemanticModelLookup + from metricflow_semantics.model.semantics.semantic_model_lookup import SemanticModelLookup MAX_JOIN_HOPS = 2 @@ -219,39 +216,3 @@ def is_valid_semantic_model_join( ) is not None ) - - @staticmethod - def _semantic_model_of_entity_in_instance_set( - instance_set: InstanceSet, - entity_reference: EntityReference, - ) -> SemanticModelReference: - """Return the semantic model where the entity was defined in the instance set.""" - matching_instances: List[EntityInstance] = [] - for entity_instance in instance_set.entity_instances: - assert len(entity_instance.defined_from) == 1 - if len(entity_instance.spec.entity_links) == 0 and entity_instance.spec.reference == entity_reference: - matching_instances.append(entity_instance) - - assert len(matching_instances) == 1, ( - f"Not exactly 1 matching entity instances found: {matching_instances} for {entity_reference} in " - f"{mf_pformat(instance_set)}" - ) - return matching_instances[0].origin_semantic_model_reference.semantic_model_reference - - def is_valid_instance_set_join( - self, - left_instance_set: InstanceSet, - right_instance_set: InstanceSet, - on_entity_reference: EntityReference, - ) -> bool: - """Return true if the instance sets can be joined using the given entity.""" - return self.is_valid_semantic_model_join( - left_semantic_model_reference=SemanticModelJoinEvaluator._semantic_model_of_entity_in_instance_set( - instance_set=left_instance_set, entity_reference=on_entity_reference - ), - right_semantic_model_reference=SemanticModelJoinEvaluator._semantic_model_of_entity_in_instance_set( - instance_set=right_instance_set, - entity_reference=on_entity_reference, - ), - on_entity_reference=on_entity_reference, - ) diff --git a/metricflow/model/semantics/semantic_model_lookup.py b/metricflow-semantics/metricflow_semantics/model/semantics/semantic_model_lookup.py similarity index 98% rename from metricflow/model/semantics/semantic_model_lookup.py rename to metricflow-semantics/metricflow_semantics/model/semantics/semantic_model_lookup.py index 32fd9cddd9..b1ab506927 100644 --- a/metricflow/model/semantics/semantic_model_lookup.py +++ b/metricflow-semantics/metricflow_semantics/model/semantics/semantic_model_lookup.py @@ -21,11 +21,11 @@ from dbt_semantic_interfaces.type_enums import DimensionType, EntityType from dbt_semantic_interfaces.type_enums.aggregation_type import AggregationType -from metricflow.errors.errors import InvalidSemanticModelError -from metricflow.mf_logging.pretty_print import mf_pformat -from metricflow.model.semantics.element_group import ElementGrouper -from metricflow.model.spec_converters import MeasureConverter -from metricflow.specs.specs import ( +from metricflow_semantics.errors.error_classes import InvalidSemanticModelError +from metricflow_semantics.mf_logging.pretty_print import mf_pformat +from metricflow_semantics.model.semantics.element_group import ElementGrouper +from metricflow_semantics.model.spec_converters import MeasureConverter +from metricflow_semantics.specs.spec_classes import ( DimensionSpec, EntitySpec, LinkableInstanceSpec, diff --git a/metricflow/model/spec_converters.py b/metricflow-semantics/metricflow_semantics/model/spec_converters.py similarity index 96% rename from metricflow/model/spec_converters.py rename to metricflow-semantics/metricflow_semantics/model/spec_converters.py index 7e4e5e7f45..2db2d7e519 100644 --- a/metricflow/model/spec_converters.py +++ b/metricflow-semantics/metricflow_semantics/model/spec_converters.py @@ -12,7 +12,7 @@ from dbt_semantic_interfaces.protocols.measure import Measure -from metricflow.specs.specs import ( +from metricflow_semantics.specs.spec_classes import ( MeasureSpec, NonAdditiveDimensionSpec, ) diff --git a/metricflow/query/__init__.py b/metricflow-semantics/metricflow_semantics/model/transformations/__init__.py similarity index 100% rename from metricflow/query/__init__.py rename to metricflow-semantics/metricflow_semantics/model/transformations/__init__.py diff --git a/metricflow/model/transformations/dedupe_metric_input_measures.py b/metricflow-semantics/metricflow_semantics/model/transformations/dedupe_metric_input_measures.py similarity index 100% rename from metricflow/model/transformations/dedupe_metric_input_measures.py rename to metricflow-semantics/metricflow_semantics/model/transformations/dedupe_metric_input_measures.py diff --git a/metricflow/query/group_by_item/__init__.py b/metricflow-semantics/metricflow_semantics/naming/__init__.py similarity index 100% rename from metricflow/query/group_by_item/__init__.py rename to metricflow-semantics/metricflow_semantics/naming/__init__.py diff --git a/metricflow/naming/dunder_scheme.py b/metricflow-semantics/metricflow_semantics/naming/dunder_scheme.py similarity index 96% rename from metricflow/naming/dunder_scheme.py rename to metricflow-semantics/metricflow_semantics/naming/dunder_scheme.py index 35eb1f12e9..40c43f7a43 100644 --- a/metricflow/naming/dunder_scheme.py +++ b/metricflow-semantics/metricflow_semantics/naming/dunder_scheme.py @@ -9,13 +9,13 @@ from dbt_semantic_interfaces.type_enums.date_part import DatePart from typing_extensions import override -from metricflow.naming.naming_scheme import QueryItemNamingScheme -from metricflow.specs.patterns.entity_link_pattern import ( +from metricflow_semantics.naming.naming_scheme import QueryItemNamingScheme +from metricflow_semantics.specs.patterns.entity_link_pattern import ( EntityLinkPattern, EntityLinkPatternParameterSet, ParameterSetField, ) -from metricflow.specs.specs import ( +from metricflow_semantics.specs.spec_classes import ( InstanceSpec, InstanceSpecSet, InstanceSpecSetTransform, diff --git a/metricflow/naming/linkable_spec_name.py b/metricflow-semantics/metricflow_semantics/naming/linkable_spec_name.py similarity index 100% rename from metricflow/naming/linkable_spec_name.py rename to metricflow-semantics/metricflow_semantics/naming/linkable_spec_name.py diff --git a/metricflow/naming/metric_scheme.py b/metricflow-semantics/metricflow_semantics/naming/metric_scheme.py similarity index 85% rename from metricflow/naming/metric_scheme.py rename to metricflow-semantics/metricflow_semantics/naming/metric_scheme.py index fdc0244df4..8fc0cd7c48 100644 --- a/metricflow/naming/metric_scheme.py +++ b/metricflow-semantics/metricflow_semantics/naming/metric_scheme.py @@ -5,9 +5,9 @@ from dbt_semantic_interfaces.references import MetricReference from typing_extensions import override -from metricflow.naming.naming_scheme import QueryItemNamingScheme -from metricflow.specs.patterns.metric_pattern import MetricSpecPattern -from metricflow.specs.specs import ( +from metricflow_semantics.naming.naming_scheme import QueryItemNamingScheme +from metricflow_semantics.specs.patterns.metric_pattern import MetricSpecPattern +from metricflow_semantics.specs.spec_classes import ( InstanceSpec, InstanceSpecSet, ) diff --git a/metricflow/naming/naming_scheme.py b/metricflow-semantics/metricflow_semantics/naming/naming_scheme.py similarity index 92% rename from metricflow/naming/naming_scheme.py rename to metricflow-semantics/metricflow_semantics/naming/naming_scheme.py index 0d9ef861f9..75331d5894 100644 --- a/metricflow/naming/naming_scheme.py +++ b/metricflow-semantics/metricflow_semantics/naming/naming_scheme.py @@ -3,10 +3,10 @@ from abc import ABC, abstractmethod from typing import TYPE_CHECKING, Optional -from metricflow.specs.patterns.spec_pattern import SpecPattern +from metricflow_semantics.specs.patterns.spec_pattern import SpecPattern if TYPE_CHECKING: - from metricflow.specs.specs import InstanceSpec + from metricflow_semantics.specs.spec_classes import InstanceSpec class QueryItemNamingScheme(ABC): diff --git a/metricflow/naming/object_builder_scheme.py b/metricflow-semantics/metricflow_semantics/naming/object_builder_scheme.py similarity index 93% rename from metricflow/naming/object_builder_scheme.py rename to metricflow-semantics/metricflow_semantics/naming/object_builder_scheme.py index eebcb7fc0a..fdf472b225 100644 --- a/metricflow/naming/object_builder_scheme.py +++ b/metricflow-semantics/metricflow_semantics/naming/object_builder_scheme.py @@ -12,16 +12,16 @@ from dbt_semantic_interfaces.references import EntityReference from typing_extensions import override -from metricflow.naming.naming_scheme import QueryItemNamingScheme -from metricflow.naming.object_builder_str import ObjectBuilderNameConverter -from metricflow.specs.patterns.entity_link_pattern import ( +from metricflow_semantics.naming.naming_scheme import QueryItemNamingScheme +from metricflow_semantics.naming.object_builder_str import ObjectBuilderNameConverter +from metricflow_semantics.specs.patterns.entity_link_pattern import ( EntityLinkPattern, EntityLinkPatternParameterSet, ParameterSetField, ) -from metricflow.specs.patterns.spec_pattern import SpecPattern -from metricflow.specs.patterns.typed_patterns import DimensionPattern, TimeDimensionPattern -from metricflow.specs.specs import ( +from metricflow_semantics.specs.patterns.spec_pattern import SpecPattern +from metricflow_semantics.specs.patterns.typed_patterns import DimensionPattern, TimeDimensionPattern +from metricflow_semantics.specs.spec_classes import ( InstanceSpec, ) diff --git a/metricflow/naming/object_builder_str.py b/metricflow-semantics/metricflow_semantics/naming/object_builder_str.py similarity index 98% rename from metricflow/naming/object_builder_str.py rename to metricflow-semantics/metricflow_semantics/naming/object_builder_str.py index ffbfcc84cd..ce20280268 100644 --- a/metricflow/naming/object_builder_str.py +++ b/metricflow-semantics/metricflow_semantics/naming/object_builder_str.py @@ -14,7 +14,7 @@ from dbt_semantic_interfaces.type_enums.date_part import DatePart from typing_extensions import override -from metricflow.specs.specs import InstanceSpec, InstanceSpecSet, InstanceSpecSetTransform +from metricflow_semantics.specs.spec_classes import InstanceSpec, InstanceSpecSet, InstanceSpecSetTransform class ObjectBuilderNameConverter: diff --git a/metricflow/query/group_by_item/candidate_push_down/__init__.py b/metricflow-semantics/metricflow_semantics/protocols/__init__.py similarity index 100% rename from metricflow/query/group_by_item/candidate_push_down/__init__.py rename to metricflow-semantics/metricflow_semantics/protocols/__init__.py diff --git a/metricflow/protocols/query_parameter.py b/metricflow-semantics/metricflow_semantics/protocols/query_parameter.py similarity index 96% rename from metricflow/protocols/query_parameter.py rename to metricflow-semantics/metricflow_semantics/protocols/query_parameter.py index 871f26223a..c8c15bfd87 100644 --- a/metricflow/protocols/query_parameter.py +++ b/metricflow-semantics/metricflow_semantics/protocols/query_parameter.py @@ -6,7 +6,7 @@ from dbt_semantic_interfaces.type_enums.date_part import DatePart if TYPE_CHECKING: - from metricflow.query.resolver_inputs.query_resolver_inputs import ( + from metricflow_semantics.query.resolver_inputs.query_resolver_inputs import ( ResolverInputForGroupByItem, ResolverInputForMetric, ResolverInputForOrderByItem, diff --git a/metricflow/query/group_by_item/filter_spec_resolution/__init__.py b/metricflow-semantics/metricflow_semantics/py.typed similarity index 100% rename from metricflow/query/group_by_item/filter_spec_resolution/__init__.py rename to metricflow-semantics/metricflow_semantics/py.typed diff --git a/metricflow/query/group_by_item/resolution_dag/__init__.py b/metricflow-semantics/metricflow_semantics/query/__init__.py similarity index 100% rename from metricflow/query/group_by_item/resolution_dag/__init__.py rename to metricflow-semantics/metricflow_semantics/query/__init__.py diff --git a/metricflow/query/group_by_item/resolution_dag/resolution_nodes/__init__.py b/metricflow-semantics/metricflow_semantics/query/group_by_item/__init__.py similarity index 100% rename from metricflow/query/group_by_item/resolution_dag/resolution_nodes/__init__.py rename to metricflow-semantics/metricflow_semantics/query/group_by_item/__init__.py diff --git a/metricflow/query/issues/__init__.py b/metricflow-semantics/metricflow_semantics/query/group_by_item/candidate_push_down/__init__.py similarity index 100% rename from metricflow/query/issues/__init__.py rename to metricflow-semantics/metricflow_semantics/query/group_by_item/candidate_push_down/__init__.py diff --git a/metricflow/query/group_by_item/candidate_push_down/group_by_item_candidate.py b/metricflow-semantics/metricflow_semantics/query/group_by_item/candidate_push_down/group_by_item_candidate.py similarity index 91% rename from metricflow/query/group_by_item/candidate_push_down/group_by_item_candidate.py rename to metricflow-semantics/metricflow_semantics/query/group_by_item/candidate_push_down/group_by_item_candidate.py index 767df7f499..bedfe43650 100644 --- a/metricflow/query/group_by_item/candidate_push_down/group_by_item_candidate.py +++ b/metricflow-semantics/metricflow_semantics/query/group_by_item/candidate_push_down/group_by_item_candidate.py @@ -6,10 +6,10 @@ from typing_extensions import override -from metricflow.query.group_by_item.path_prefixable import PathPrefixable -from metricflow.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath -from metricflow.specs.patterns.spec_pattern import SpecPattern -from metricflow.specs.specs import InstanceSpecSet, LinkableInstanceSpec, LinkableSpecSet +from metricflow_semantics.query.group_by_item.path_prefixable import PathPrefixable +from metricflow_semantics.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath +from metricflow_semantics.specs.patterns.spec_pattern import SpecPattern +from metricflow_semantics.specs.spec_classes import InstanceSpecSet, LinkableInstanceSpec, LinkableSpecSet @dataclass(frozen=True) diff --git a/metricflow/query/group_by_item/candidate_push_down/push_down_visitor.py b/metricflow-semantics/metricflow_semantics/query/group_by_item/candidate_push_down/push_down_visitor.py similarity index 90% rename from metricflow/query/group_by_item/candidate_push_down/push_down_visitor.py rename to metricflow-semantics/metricflow_semantics/query/group_by_item/candidate_push_down/push_down_visitor.py index 7879e80514..7abca90066 100644 --- a/metricflow/query/group_by_item/candidate_push_down/push_down_visitor.py +++ b/metricflow-semantics/metricflow_semantics/query/group_by_item/candidate_push_down/push_down_visitor.py @@ -9,43 +9,47 @@ from dbt_semantic_interfaces.type_enums import MetricType from typing_extensions import override -from metricflow.mf_logging.formatting import indent -from metricflow.mf_logging.pretty_print import mf_pformat, mf_pformat_many -from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup -from metricflow.model.semantics.linkable_element import LinkableElementProperty -from metricflow.query.group_by_item.candidate_push_down.group_by_item_candidate import GroupByItemCandidateSet -from metricflow.query.group_by_item.resolution_dag.resolution_nodes.base_node import ( +from metricflow_semantics.mf_logging.formatting import indent +from metricflow_semantics.mf_logging.pretty_print import mf_pformat, mf_pformat_many +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.model.semantics.linkable_element import LinkableElementProperty +from metricflow_semantics.query.group_by_item.candidate_push_down.group_by_item_candidate import GroupByItemCandidateSet +from metricflow_semantics.query.group_by_item.resolution_dag.resolution_nodes.base_node import ( GroupByItemResolutionNode, GroupByItemResolutionNodeVisitor, ) -from metricflow.query.group_by_item.resolution_dag.resolution_nodes.measure_source_node import ( +from metricflow_semantics.query.group_by_item.resolution_dag.resolution_nodes.measure_source_node import ( MeasureGroupByItemSourceNode, ) -from metricflow.query.group_by_item.resolution_dag.resolution_nodes.metric_resolution_node import ( +from metricflow_semantics.query.group_by_item.resolution_dag.resolution_nodes.metric_resolution_node import ( MetricGroupByItemResolutionNode, ) -from metricflow.query.group_by_item.resolution_dag.resolution_nodes.no_metrics_query_source_node import ( +from metricflow_semantics.query.group_by_item.resolution_dag.resolution_nodes.no_metrics_query_source_node import ( NoMetricsGroupByItemSourceNode, ) -from metricflow.query.group_by_item.resolution_dag.resolution_nodes.query_resolution_node import ( +from metricflow_semantics.query.group_by_item.resolution_dag.resolution_nodes.query_resolution_node import ( QueryGroupByItemResolutionNode, ) -from metricflow.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath -from metricflow.query.issues.group_by_item_resolver.invalid_use_of_date_part import MetricExcludesDatePartIssue -from metricflow.query.issues.group_by_item_resolver.no_common_items import NoCommonItemsInParents -from metricflow.query.issues.group_by_item_resolver.no_matching_items_for_measure import NoMatchingItemsForMeasure -from metricflow.query.issues.group_by_item_resolver.no_matching_items_for_no_metrics_query import ( +from metricflow_semantics.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath +from metricflow_semantics.query.issues.group_by_item_resolver.invalid_use_of_date_part import ( + MetricExcludesDatePartIssue, +) +from metricflow_semantics.query.issues.group_by_item_resolver.no_common_items import NoCommonItemsInParents +from metricflow_semantics.query.issues.group_by_item_resolver.no_matching_items_for_measure import ( + NoMatchingItemsForMeasure, +) +from metricflow_semantics.query.issues.group_by_item_resolver.no_matching_items_for_no_metrics_query import ( NoMatchingItemsForNoMetricsQuery, ) -from metricflow.query.issues.group_by_item_resolver.no_parent_candidates import NoParentCandidates -from metricflow.query.issues.issues_base import ( +from metricflow_semantics.query.issues.group_by_item_resolver.no_parent_candidates import NoParentCandidates +from metricflow_semantics.query.issues.issues_base import ( MetricFlowQueryResolutionIssueSet, ) -from metricflow.query.suggestion_generator import QueryItemSuggestionGenerator -from metricflow.specs.patterns.base_time_grain import BaseTimeGrainPattern -from metricflow.specs.patterns.none_date_part import NoneDatePartPattern -from metricflow.specs.patterns.spec_pattern import SpecPattern -from metricflow.specs.specs import InstanceSpecSet, LinkableInstanceSpec +from metricflow_semantics.query.suggestion_generator import QueryItemSuggestionGenerator +from metricflow_semantics.specs.patterns.base_time_grain import BaseTimeGrainPattern +from metricflow_semantics.specs.patterns.none_date_part import NoneDatePartPattern +from metricflow_semantics.specs.patterns.spec_pattern import SpecPattern +from metricflow_semantics.specs.spec_classes import InstanceSpecSet, LinkableInstanceSpec logger = logging.getLogger(__name__) diff --git a/metricflow/query/issues/filter_spec_resolver/__init__.py b/metricflow-semantics/metricflow_semantics/query/group_by_item/filter_spec_resolution/__init__.py similarity index 100% rename from metricflow/query/issues/filter_spec_resolver/__init__.py rename to metricflow-semantics/metricflow_semantics/query/group_by_item/filter_spec_resolution/__init__.py diff --git a/metricflow/query/group_by_item/filter_spec_resolution/filter_location.py b/metricflow-semantics/metricflow_semantics/query/group_by_item/filter_spec_resolution/filter_location.py similarity index 100% rename from metricflow/query/group_by_item/filter_spec_resolution/filter_location.py rename to metricflow-semantics/metricflow_semantics/query/group_by_item/filter_spec_resolution/filter_location.py diff --git a/metricflow/query/group_by_item/filter_spec_resolution/filter_pattern_factory.py b/metricflow-semantics/metricflow_semantics/query/group_by_item/filter_spec_resolution/filter_pattern_factory.py similarity index 94% rename from metricflow/query/group_by_item/filter_spec_resolution/filter_pattern_factory.py rename to metricflow-semantics/metricflow_semantics/query/group_by_item/filter_spec_resolution/filter_pattern_factory.py index 49b5ddcd66..22517bae53 100644 --- a/metricflow/query/group_by_item/filter_spec_resolution/filter_pattern_factory.py +++ b/metricflow-semantics/metricflow_semantics/query/group_by_item/filter_spec_resolution/filter_pattern_factory.py @@ -10,8 +10,8 @@ ) from typing_extensions import override -from metricflow.specs.patterns.spec_pattern import SpecPattern -from metricflow.specs.patterns.typed_patterns import ( +from metricflow_semantics.specs.patterns.spec_pattern import SpecPattern +from metricflow_semantics.specs.patterns.typed_patterns import ( DimensionPattern, EntityPattern, GroupByMetricPattern, diff --git a/metricflow/query/group_by_item/filter_spec_resolution/filter_spec_lookup.py b/metricflow-semantics/metricflow_semantics/query/group_by_item/filter_spec_resolution/filter_spec_lookup.py similarity index 91% rename from metricflow/query/group_by_item/filter_spec_resolution/filter_spec_lookup.py rename to metricflow-semantics/metricflow_semantics/query/group_by_item/filter_spec_resolution/filter_spec_lookup.py index 53badfc7c4..2c6468a5f9 100644 --- a/metricflow/query/group_by_item/filter_spec_resolution/filter_spec_lookup.py +++ b/metricflow-semantics/metricflow_semantics/query/group_by_item/filter_spec_resolution/filter_spec_lookup.py @@ -14,17 +14,17 @@ from dbt_semantic_interfaces.references import MetricReference from typing_extensions import override -from metricflow.collection_helpers.merger import Mergeable -from metricflow.mf_logging.formatting import indent -from metricflow.mf_logging.pretty_print import mf_pformat -from metricflow.query.group_by_item.filter_spec_resolution.filter_location import WhereFilterLocation -from metricflow.query.group_by_item.path_prefixable import PathPrefixable -from metricflow.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath -from metricflow.query.issues.issues_base import MetricFlowQueryResolutionIssueSet -from metricflow.specs.patterns.spec_pattern import SpecPattern +from metricflow_semantics.collection_helpers.merger import Mergeable +from metricflow_semantics.mf_logging.formatting import indent +from metricflow_semantics.mf_logging.pretty_print import mf_pformat +from metricflow_semantics.query.group_by_item.filter_spec_resolution.filter_location import WhereFilterLocation +from metricflow_semantics.query.group_by_item.path_prefixable import PathPrefixable +from metricflow_semantics.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath +from metricflow_semantics.query.issues.issues_base import MetricFlowQueryResolutionIssueSet +from metricflow_semantics.specs.patterns.spec_pattern import SpecPattern if TYPE_CHECKING: - from metricflow.specs.specs import LinkableInstanceSpec + from metricflow_semantics.specs.spec_classes import LinkableInstanceSpec logger = logging.getLogger(__name__) diff --git a/metricflow/query/group_by_item/filter_spec_resolution/filter_spec_resolver.py b/metricflow-semantics/metricflow_semantics/query/group_by_item/filter_spec_resolution/filter_spec_resolver.py similarity index 90% rename from metricflow/query/group_by_item/filter_spec_resolution/filter_spec_resolver.py rename to metricflow-semantics/metricflow_semantics/query/group_by_item/filter_spec_resolution/filter_spec_resolver.py index e8c94cda41..c698ad5c99 100644 --- a/metricflow/query/group_by_item/filter_spec_resolution/filter_spec_resolver.py +++ b/metricflow-semantics/metricflow_semantics/query/group_by_item/filter_spec_resolution/filter_spec_resolver.py @@ -10,39 +10,41 @@ from dbt_semantic_interfaces.references import EntityReference from typing_extensions import override -from metricflow.mf_logging.runtime import log_runtime -from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup -from metricflow.naming.object_builder_str import ObjectBuilderNameConverter -from metricflow.query.group_by_item.candidate_push_down.push_down_visitor import DagTraversalPathTracker -from metricflow.query.group_by_item.filter_spec_resolution.filter_location import WhereFilterLocation -from metricflow.query.group_by_item.filter_spec_resolution.filter_pattern_factory import WhereFilterPatternFactory -from metricflow.query.group_by_item.filter_spec_resolution.filter_spec_lookup import ( +from metricflow_semantics.mf_logging.runtime import log_runtime +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.naming.object_builder_str import ObjectBuilderNameConverter +from metricflow_semantics.query.group_by_item.candidate_push_down.push_down_visitor import DagTraversalPathTracker +from metricflow_semantics.query.group_by_item.filter_spec_resolution.filter_location import WhereFilterLocation +from metricflow_semantics.query.group_by_item.filter_spec_resolution.filter_pattern_factory import ( + WhereFilterPatternFactory, +) +from metricflow_semantics.query.group_by_item.filter_spec_resolution.filter_spec_lookup import ( FilterSpecResolution, FilterSpecResolutionLookUp, NonParsableFilterResolution, PatternAssociationForWhereFilterGroupByItem, ResolvedSpecLookUpKey, ) -from metricflow.query.group_by_item.group_by_item_resolver import GroupByItemResolver -from metricflow.query.group_by_item.resolution_dag.dag import GroupByItemResolutionDag, ResolutionDagSinkNode -from metricflow.query.group_by_item.resolution_dag.resolution_nodes.base_node import ( +from metricflow_semantics.query.group_by_item.group_by_item_resolver import GroupByItemResolver +from metricflow_semantics.query.group_by_item.resolution_dag.dag import GroupByItemResolutionDag, ResolutionDagSinkNode +from metricflow_semantics.query.group_by_item.resolution_dag.resolution_nodes.base_node import ( GroupByItemResolutionNodeVisitor, ) -from metricflow.query.group_by_item.resolution_dag.resolution_nodes.measure_source_node import ( +from metricflow_semantics.query.group_by_item.resolution_dag.resolution_nodes.measure_source_node import ( MeasureGroupByItemSourceNode, ) -from metricflow.query.group_by_item.resolution_dag.resolution_nodes.metric_resolution_node import ( +from metricflow_semantics.query.group_by_item.resolution_dag.resolution_nodes.metric_resolution_node import ( MetricGroupByItemResolutionNode, ) -from metricflow.query.group_by_item.resolution_dag.resolution_nodes.no_metrics_query_source_node import ( +from metricflow_semantics.query.group_by_item.resolution_dag.resolution_nodes.no_metrics_query_source_node import ( NoMetricsGroupByItemSourceNode, ) -from metricflow.query.group_by_item.resolution_dag.resolution_nodes.query_resolution_node import ( +from metricflow_semantics.query.group_by_item.resolution_dag.resolution_nodes.query_resolution_node import ( QueryGroupByItemResolutionNode, ) -from metricflow.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath -from metricflow.query.issues.filter_spec_resolver.invalid_where import WhereFilterParsingIssue -from metricflow.query.issues.issues_base import ( +from metricflow_semantics.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath +from metricflow_semantics.query.issues.filter_spec_resolver.invalid_where import WhereFilterParsingIssue +from metricflow_semantics.query.issues.issues_base import ( MetricFlowQueryResolutionIssueSet, ) diff --git a/metricflow/query/group_by_item/group_by_item_resolver.py b/metricflow-semantics/metricflow_semantics/query/group_by_item/group_by_item_resolver.py similarity index 86% rename from metricflow/query/group_by_item/group_by_item_resolver.py rename to metricflow-semantics/metricflow_semantics/query/group_by_item/group_by_item_resolver.py index 7d05dbe619..e501b2a499 100644 --- a/metricflow/query/group_by_item/group_by_item_resolver.py +++ b/metricflow-semantics/metricflow_semantics/query/group_by_item/group_by_item_resolver.py @@ -9,25 +9,25 @@ from dbt_semantic_interfaces.references import TimeDimensionReference from dbt_semantic_interfaces.type_enums import TimeGranularity -from metricflow.mf_logging.formatting import indent -from metricflow.mf_logging.pretty_print import mf_pformat -from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup -from metricflow.naming.object_builder_scheme import ObjectBuilderNamingScheme -from metricflow.query.group_by_item.candidate_push_down.push_down_visitor import ( +from metricflow_semantics.mf_logging.formatting import indent +from metricflow_semantics.mf_logging.pretty_print import mf_pformat +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.naming.object_builder_scheme import ObjectBuilderNamingScheme +from metricflow_semantics.query.group_by_item.candidate_push_down.push_down_visitor import ( PushDownResult, _PushDownGroupByItemCandidatesVisitor, ) -from metricflow.query.group_by_item.resolution_dag.dag import GroupByItemResolutionDag, ResolutionDagSinkNode -from metricflow.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath -from metricflow.query.issues.group_by_item_resolver.ambiguous_group_by_item import AmbiguousGroupByItemIssue -from metricflow.query.issues.issues_base import ( +from metricflow_semantics.query.group_by_item.resolution_dag.dag import GroupByItemResolutionDag, ResolutionDagSinkNode +from metricflow_semantics.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath +from metricflow_semantics.query.issues.group_by_item_resolver.ambiguous_group_by_item import AmbiguousGroupByItemIssue +from metricflow_semantics.query.issues.issues_base import ( MetricFlowQueryResolutionIssueSet, ) -from metricflow.query.suggestion_generator import QueryItemSuggestionGenerator -from metricflow.specs.patterns.base_time_grain import BaseTimeGrainPattern -from metricflow.specs.patterns.spec_pattern import SpecPattern -from metricflow.specs.patterns.typed_patterns import TimeDimensionPattern -from metricflow.specs.specs import LinkableInstanceSpec, LinkableSpecSet +from metricflow_semantics.query.suggestion_generator import QueryItemSuggestionGenerator +from metricflow_semantics.specs.patterns.base_time_grain import BaseTimeGrainPattern +from metricflow_semantics.specs.patterns.spec_pattern import SpecPattern +from metricflow_semantics.specs.patterns.typed_patterns import TimeDimensionPattern +from metricflow_semantics.specs.spec_classes import LinkableInstanceSpec, LinkableSpecSet logger = logging.getLogger(__name__) diff --git a/metricflow/query/group_by_item/path_prefixable.py b/metricflow-semantics/metricflow_semantics/query/group_by_item/path_prefixable.py similarity index 90% rename from metricflow/query/group_by_item/path_prefixable.py rename to metricflow-semantics/metricflow_semantics/query/group_by_item/path_prefixable.py index 154f5c51c3..3533f42c80 100644 --- a/metricflow/query/group_by_item/path_prefixable.py +++ b/metricflow-semantics/metricflow_semantics/query/group_by_item/path_prefixable.py @@ -5,7 +5,7 @@ from typing_extensions import TYPE_CHECKING, Self if TYPE_CHECKING: - from metricflow.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath + from metricflow_semantics.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath class PathPrefixable(ABC): diff --git a/metricflow/query/issues/group_by_item_resolver/__init__.py b/metricflow-semantics/metricflow_semantics/query/group_by_item/resolution_dag/__init__.py similarity index 100% rename from metricflow/query/issues/group_by_item_resolver/__init__.py rename to metricflow-semantics/metricflow_semantics/query/group_by_item/resolution_dag/__init__.py diff --git a/metricflow/query/group_by_item/resolution_dag/dag.py b/metricflow-semantics/metricflow_semantics/query/group_by_item/resolution_dag/dag.py similarity index 76% rename from metricflow/query/group_by_item/resolution_dag/dag.py rename to metricflow-semantics/metricflow_semantics/query/group_by_item/resolution_dag/dag.py index f1d34f29a4..70257f7d2d 100644 --- a/metricflow/query/group_by_item/resolution_dag/dag.py +++ b/metricflow-semantics/metricflow_semantics/query/group_by_item/resolution_dag/dag.py @@ -2,13 +2,13 @@ from typing import Union -from metricflow.dag.id_prefix import StaticIdPrefix -from metricflow.dag.mf_dag import DagId, MetricFlowDag -from metricflow.query.group_by_item.resolution_dag.resolution_nodes.base_node import GroupByItemResolutionNode -from metricflow.query.group_by_item.resolution_dag.resolution_nodes.metric_resolution_node import ( +from metricflow_semantics.dag.id_prefix import StaticIdPrefix +from metricflow_semantics.dag.mf_dag import DagId, MetricFlowDag +from metricflow_semantics.query.group_by_item.resolution_dag.resolution_nodes.base_node import GroupByItemResolutionNode +from metricflow_semantics.query.group_by_item.resolution_dag.resolution_nodes.metric_resolution_node import ( MetricGroupByItemResolutionNode, ) -from metricflow.query.group_by_item.resolution_dag.resolution_nodes.query_resolution_node import ( +from metricflow_semantics.query.group_by_item.resolution_dag.resolution_nodes.query_resolution_node import ( QueryGroupByItemResolutionNode, ) diff --git a/metricflow/query/group_by_item/resolution_dag/dag_builder.py b/metricflow-semantics/metricflow_semantics/query/group_by_item/resolution_dag/dag_builder.py similarity index 87% rename from metricflow/query/group_by_item/resolution_dag/dag_builder.py rename to metricflow-semantics/metricflow_semantics/query/group_by_item/resolution_dag/dag_builder.py index e92950e014..c161722907 100644 --- a/metricflow/query/group_by_item/resolution_dag/dag_builder.py +++ b/metricflow-semantics/metricflow_semantics/query/group_by_item/resolution_dag/dag_builder.py @@ -8,19 +8,19 @@ from dbt_semantic_interfaces.references import MeasureReference, MetricReference from dbt_semantic_interfaces.type_enums import MetricType -from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup -from metricflow.query.group_by_item.resolution_dag.dag import GroupByItemResolutionDag -from metricflow.query.group_by_item.resolution_dag.input_metric_location import InputMetricDefinitionLocation -from metricflow.query.group_by_item.resolution_dag.resolution_nodes.measure_source_node import ( +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.query.group_by_item.resolution_dag.dag import GroupByItemResolutionDag +from metricflow_semantics.query.group_by_item.resolution_dag.input_metric_location import InputMetricDefinitionLocation +from metricflow_semantics.query.group_by_item.resolution_dag.resolution_nodes.measure_source_node import ( MeasureGroupByItemSourceNode, ) -from metricflow.query.group_by_item.resolution_dag.resolution_nodes.metric_resolution_node import ( +from metricflow_semantics.query.group_by_item.resolution_dag.resolution_nodes.metric_resolution_node import ( MetricGroupByItemResolutionNode, ) -from metricflow.query.group_by_item.resolution_dag.resolution_nodes.no_metrics_query_source_node import ( +from metricflow_semantics.query.group_by_item.resolution_dag.resolution_nodes.no_metrics_query_source_node import ( NoMetricsGroupByItemSourceNode, ) -from metricflow.query.group_by_item.resolution_dag.resolution_nodes.query_resolution_node import ( +from metricflow_semantics.query.group_by_item.resolution_dag.resolution_nodes.query_resolution_node import ( QueryGroupByItemResolutionNode, ) diff --git a/metricflow/query/group_by_item/resolution_dag/input_metric_location.py b/metricflow-semantics/metricflow_semantics/query/group_by_item/resolution_dag/input_metric_location.py similarity index 92% rename from metricflow/query/group_by_item/resolution_dag/input_metric_location.py rename to metricflow-semantics/metricflow_semantics/query/group_by_item/resolution_dag/input_metric_location.py index e017756ca8..be4611a56c 100644 --- a/metricflow/query/group_by_item/resolution_dag/input_metric_location.py +++ b/metricflow-semantics/metricflow_semantics/query/group_by_item/resolution_dag/input_metric_location.py @@ -5,7 +5,7 @@ from dbt_semantic_interfaces.protocols import MetricInput from dbt_semantic_interfaces.references import MetricReference -from metricflow.model.semantics.metric_lookup import MetricLookup +from metricflow_semantics.model.semantics.metric_lookup import MetricLookup @dataclass(frozen=True) diff --git a/metricflow/query/issues/parsing/__init__.py b/metricflow-semantics/metricflow_semantics/query/group_by_item/resolution_dag/resolution_nodes/__init__.py similarity index 100% rename from metricflow/query/issues/parsing/__init__.py rename to metricflow-semantics/metricflow_semantics/query/group_by_item/resolution_dag/resolution_nodes/__init__.py diff --git a/metricflow/query/group_by_item/resolution_dag/resolution_nodes/base_node.py b/metricflow-semantics/metricflow_semantics/query/group_by_item/resolution_dag/resolution_nodes/base_node.py similarity index 77% rename from metricflow/query/group_by_item/resolution_dag/resolution_nodes/base_node.py rename to metricflow-semantics/metricflow_semantics/query/group_by_item/resolution_dag/resolution_nodes/base_node.py index 1b249675a1..ac3fef5c31 100644 --- a/metricflow/query/group_by_item/resolution_dag/resolution_nodes/base_node.py +++ b/metricflow-semantics/metricflow_semantics/query/group_by_item/resolution_dag/resolution_nodes/base_node.py @@ -3,20 +3,20 @@ from abc import ABC, abstractmethod from typing import TYPE_CHECKING, Generic, Sequence -from metricflow.dag.mf_dag import DagNode, NodeId -from metricflow.visitor import Visitable, VisitorOutputT +from metricflow_semantics.dag.mf_dag import DagNode, NodeId +from metricflow_semantics.visitor import Visitable, VisitorOutputT if TYPE_CHECKING: - from metricflow.query.group_by_item.resolution_dag.resolution_nodes.measure_source_node import ( + from metricflow_semantics.query.group_by_item.resolution_dag.resolution_nodes.measure_source_node import ( MeasureGroupByItemSourceNode, ) - from metricflow.query.group_by_item.resolution_dag.resolution_nodes.metric_resolution_node import ( + from metricflow_semantics.query.group_by_item.resolution_dag.resolution_nodes.metric_resolution_node import ( MetricGroupByItemResolutionNode, ) - from metricflow.query.group_by_item.resolution_dag.resolution_nodes.no_metrics_query_source_node import ( + from metricflow_semantics.query.group_by_item.resolution_dag.resolution_nodes.no_metrics_query_source_node import ( NoMetricsGroupByItemSourceNode, ) - from metricflow.query.group_by_item.resolution_dag.resolution_nodes.query_resolution_node import ( + from metricflow_semantics.query.group_by_item.resolution_dag.resolution_nodes.query_resolution_node import ( QueryGroupByItemResolutionNode, ) diff --git a/metricflow/query/group_by_item/resolution_dag/resolution_nodes/measure_source_node.py b/metricflow-semantics/metricflow_semantics/query/group_by_item/resolution_dag/resolution_nodes/measure_source_node.py similarity index 88% rename from metricflow/query/group_by_item/resolution_dag/resolution_nodes/measure_source_node.py rename to metricflow-semantics/metricflow_semantics/query/group_by_item/resolution_dag/resolution_nodes/measure_source_node.py index 91a7518064..34502b4adb 100644 --- a/metricflow/query/group_by_item/resolution_dag/resolution_nodes/measure_source_node.py +++ b/metricflow-semantics/metricflow_semantics/query/group_by_item/resolution_dag/resolution_nodes/measure_source_node.py @@ -5,13 +5,13 @@ from dbt_semantic_interfaces.references import MeasureReference, MetricReference from typing_extensions import override -from metricflow.dag.id_prefix import IdPrefix, StaticIdPrefix -from metricflow.dag.mf_dag import DisplayedProperty -from metricflow.query.group_by_item.resolution_dag.resolution_nodes.base_node import ( +from metricflow_semantics.dag.id_prefix import IdPrefix, StaticIdPrefix +from metricflow_semantics.dag.mf_dag import DisplayedProperty +from metricflow_semantics.query.group_by_item.resolution_dag.resolution_nodes.base_node import ( GroupByItemResolutionNode, GroupByItemResolutionNodeVisitor, ) -from metricflow.visitor import VisitorOutputT +from metricflow_semantics.visitor import VisitorOutputT class MeasureGroupByItemSourceNode(GroupByItemResolutionNode): diff --git a/metricflow/query/group_by_item/resolution_dag/resolution_nodes/metric_resolution_node.py b/metricflow-semantics/metricflow_semantics/query/group_by_item/resolution_dag/resolution_nodes/metric_resolution_node.py similarity index 84% rename from metricflow/query/group_by_item/resolution_dag/resolution_nodes/metric_resolution_node.py rename to metricflow-semantics/metricflow_semantics/query/group_by_item/resolution_dag/resolution_nodes/metric_resolution_node.py index 14cf6d121b..914cc69946 100644 --- a/metricflow/query/group_by_item/resolution_dag/resolution_nodes/metric_resolution_node.py +++ b/metricflow-semantics/metricflow_semantics/query/group_by_item/resolution_dag/resolution_nodes/metric_resolution_node.py @@ -5,17 +5,17 @@ from dbt_semantic_interfaces.references import MetricReference from typing_extensions import Self, override -from metricflow.dag.id_prefix import IdPrefix, StaticIdPrefix -from metricflow.dag.mf_dag import DisplayedProperty -from metricflow.query.group_by_item.resolution_dag.input_metric_location import InputMetricDefinitionLocation -from metricflow.query.group_by_item.resolution_dag.resolution_nodes.base_node import ( +from metricflow_semantics.dag.id_prefix import IdPrefix, StaticIdPrefix +from metricflow_semantics.dag.mf_dag import DisplayedProperty +from metricflow_semantics.query.group_by_item.resolution_dag.input_metric_location import InputMetricDefinitionLocation +from metricflow_semantics.query.group_by_item.resolution_dag.resolution_nodes.base_node import ( GroupByItemResolutionNode, GroupByItemResolutionNodeVisitor, ) -from metricflow.query.group_by_item.resolution_dag.resolution_nodes.measure_source_node import ( +from metricflow_semantics.query.group_by_item.resolution_dag.resolution_nodes.measure_source_node import ( MeasureGroupByItemSourceNode, ) -from metricflow.visitor import VisitorOutputT +from metricflow_semantics.visitor import VisitorOutputT class MetricGroupByItemResolutionNode(GroupByItemResolutionNode): diff --git a/metricflow/query/group_by_item/resolution_dag/resolution_nodes/no_metrics_query_source_node.py b/metricflow-semantics/metricflow_semantics/query/group_by_item/resolution_dag/resolution_nodes/no_metrics_query_source_node.py similarity index 76% rename from metricflow/query/group_by_item/resolution_dag/resolution_nodes/no_metrics_query_source_node.py rename to metricflow-semantics/metricflow_semantics/query/group_by_item/resolution_dag/resolution_nodes/no_metrics_query_source_node.py index 93e9055dd5..d1ba72470a 100644 --- a/metricflow/query/group_by_item/resolution_dag/resolution_nodes/no_metrics_query_source_node.py +++ b/metricflow-semantics/metricflow_semantics/query/group_by_item/resolution_dag/resolution_nodes/no_metrics_query_source_node.py @@ -4,15 +4,15 @@ from typing_extensions import override -from metricflow.dag.id_prefix import IdPrefix, StaticIdPrefix -from metricflow.query.group_by_item.resolution_dag.resolution_nodes.base_node import ( +from metricflow_semantics.dag.id_prefix import IdPrefix, StaticIdPrefix +from metricflow_semantics.query.group_by_item.resolution_dag.resolution_nodes.base_node import ( GroupByItemResolutionNode, GroupByItemResolutionNodeVisitor, ) -from metricflow.query.group_by_item.resolution_dag.resolution_nodes.metric_resolution_node import ( +from metricflow_semantics.query.group_by_item.resolution_dag.resolution_nodes.metric_resolution_node import ( MetricGroupByItemResolutionNode, ) -from metricflow.visitor import VisitorOutputT +from metricflow_semantics.visitor import VisitorOutputT class NoMetricsGroupByItemSourceNode(GroupByItemResolutionNode): diff --git a/metricflow/query/group_by_item/resolution_dag/resolution_nodes/query_resolution_node.py b/metricflow-semantics/metricflow_semantics/query/group_by_item/resolution_dag/resolution_nodes/query_resolution_node.py similarity index 85% rename from metricflow/query/group_by_item/resolution_dag/resolution_nodes/query_resolution_node.py rename to metricflow-semantics/metricflow_semantics/query/group_by_item/resolution_dag/resolution_nodes/query_resolution_node.py index 5b0f1e277d..684da6a2d6 100644 --- a/metricflow/query/group_by_item/resolution_dag/resolution_nodes/query_resolution_node.py +++ b/metricflow-semantics/metricflow_semantics/query/group_by_item/resolution_dag/resolution_nodes/query_resolution_node.py @@ -6,19 +6,19 @@ from dbt_semantic_interfaces.references import MetricReference from typing_extensions import override -from metricflow.dag.id_prefix import IdPrefix, StaticIdPrefix -from metricflow.dag.mf_dag import DisplayedProperty -from metricflow.query.group_by_item.resolution_dag.resolution_nodes.base_node import ( +from metricflow_semantics.dag.id_prefix import IdPrefix, StaticIdPrefix +from metricflow_semantics.dag.mf_dag import DisplayedProperty +from metricflow_semantics.query.group_by_item.resolution_dag.resolution_nodes.base_node import ( GroupByItemResolutionNode, GroupByItemResolutionNodeVisitor, ) -from metricflow.query.group_by_item.resolution_dag.resolution_nodes.metric_resolution_node import ( +from metricflow_semantics.query.group_by_item.resolution_dag.resolution_nodes.metric_resolution_node import ( MetricGroupByItemResolutionNode, ) -from metricflow.query.group_by_item.resolution_dag.resolution_nodes.no_metrics_query_source_node import ( +from metricflow_semantics.query.group_by_item.resolution_dag.resolution_nodes.no_metrics_query_source_node import ( NoMetricsGroupByItemSourceNode, ) -from metricflow.visitor import VisitorOutputT +from metricflow_semantics.visitor import VisitorOutputT class QueryGroupByItemResolutionNode(GroupByItemResolutionNode): diff --git a/metricflow/query/group_by_item/resolution_path.py b/metricflow-semantics/metricflow_semantics/query/group_by_item/resolution_path.py similarity index 87% rename from metricflow/query/group_by_item/resolution_path.py rename to metricflow-semantics/metricflow_semantics/query/group_by_item/resolution_path.py index 6967e0ec60..cc8dc2c4ef 100644 --- a/metricflow/query/group_by_item/resolution_path.py +++ b/metricflow-semantics/metricflow_semantics/query/group_by_item/resolution_path.py @@ -5,9 +5,9 @@ from typing_extensions import override -from metricflow.mf_logging.formatting import indent -from metricflow.query.group_by_item.path_prefixable import PathPrefixable -from metricflow.query.group_by_item.resolution_dag.resolution_nodes.base_node import GroupByItemResolutionNode +from metricflow_semantics.mf_logging.formatting import indent +from metricflow_semantics.query.group_by_item.path_prefixable import PathPrefixable +from metricflow_semantics.query.group_by_item.resolution_dag.resolution_nodes.base_node import GroupByItemResolutionNode @dataclass(frozen=True) diff --git a/metricflow/query/resolver_inputs/__init__.py b/metricflow-semantics/metricflow_semantics/query/issues/__init__.py similarity index 100% rename from metricflow/query/resolver_inputs/__init__.py rename to metricflow-semantics/metricflow_semantics/query/issues/__init__.py diff --git a/metricflow/query/validation_rules/__init__.py b/metricflow-semantics/metricflow_semantics/query/issues/filter_spec_resolver/__init__.py similarity index 100% rename from metricflow/query/validation_rules/__init__.py rename to metricflow-semantics/metricflow_semantics/query/issues/filter_spec_resolver/__init__.py diff --git a/metricflow/query/issues/filter_spec_resolver/invalid_where.py b/metricflow-semantics/metricflow_semantics/query/issues/filter_spec_resolver/invalid_where.py similarity index 85% rename from metricflow/query/issues/filter_spec_resolver/invalid_where.py rename to metricflow-semantics/metricflow_semantics/query/issues/filter_spec_resolver/invalid_where.py index dc088f07b9..d0ca769b80 100644 --- a/metricflow/query/issues/filter_spec_resolver/invalid_where.py +++ b/metricflow-semantics/metricflow_semantics/query/issues/filter_spec_resolver/invalid_where.py @@ -6,13 +6,13 @@ from dbt_semantic_interfaces.protocols import WhereFilter from typing_extensions import override -from metricflow.mf_logging.formatting import indent -from metricflow.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath -from metricflow.query.issues.issues_base import ( +from metricflow_semantics.mf_logging.formatting import indent +from metricflow_semantics.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath +from metricflow_semantics.query.issues.issues_base import ( MetricFlowQueryIssueType, MetricFlowQueryResolutionIssue, ) -from metricflow.query.resolver_inputs.base_resolver_inputs import MetricFlowQueryResolverInput +from metricflow_semantics.query.resolver_inputs.base_resolver_inputs import MetricFlowQueryResolverInput @dataclass(frozen=True) diff --git a/metricflow/specs/__init__.py b/metricflow-semantics/metricflow_semantics/query/issues/group_by_item_resolver/__init__.py similarity index 100% rename from metricflow/specs/__init__.py rename to metricflow-semantics/metricflow_semantics/query/issues/group_by_item_resolver/__init__.py diff --git a/metricflow/query/issues/group_by_item_resolver/ambiguous_group_by_item.py b/metricflow-semantics/metricflow_semantics/query/issues/group_by_item_resolver/ambiguous_group_by_item.py similarity index 77% rename from metricflow/query/issues/group_by_item_resolver/ambiguous_group_by_item.py rename to metricflow-semantics/metricflow_semantics/query/issues/group_by_item_resolver/ambiguous_group_by_item.py index 35522ae621..7b95b58857 100644 --- a/metricflow/query/issues/group_by_item_resolver/ambiguous_group_by_item.py +++ b/metricflow-semantics/metricflow_semantics/query/issues/group_by_item_resolver/ambiguous_group_by_item.py @@ -5,16 +5,16 @@ from typing_extensions import override -from metricflow.mf_logging.formatting import indent -from metricflow.mf_logging.pretty_print import mf_pformat -from metricflow.naming.object_builder_scheme import ObjectBuilderNamingScheme -from metricflow.query.group_by_item.candidate_push_down.group_by_item_candidate import GroupByItemCandidateSet -from metricflow.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath -from metricflow.query.issues.issues_base import ( +from metricflow_semantics.mf_logging.formatting import indent +from metricflow_semantics.mf_logging.pretty_print import mf_pformat +from metricflow_semantics.naming.object_builder_scheme import ObjectBuilderNamingScheme +from metricflow_semantics.query.group_by_item.candidate_push_down.group_by_item_candidate import GroupByItemCandidateSet +from metricflow_semantics.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath +from metricflow_semantics.query.issues.issues_base import ( MetricFlowQueryIssueType, MetricFlowQueryResolutionIssue, ) -from metricflow.query.resolver_inputs.base_resolver_inputs import MetricFlowQueryResolverInput +from metricflow_semantics.query.resolver_inputs.base_resolver_inputs import MetricFlowQueryResolverInput @dataclass(frozen=True) diff --git a/metricflow/query/issues/group_by_item_resolver/invalid_use_of_date_part.py b/metricflow-semantics/metricflow_semantics/query/issues/group_by_item_resolver/invalid_use_of_date_part.py similarity index 85% rename from metricflow/query/issues/group_by_item_resolver/invalid_use_of_date_part.py rename to metricflow-semantics/metricflow_semantics/query/issues/group_by_item_resolver/invalid_use_of_date_part.py index 5826dd13f4..a53f178efe 100644 --- a/metricflow/query/issues/group_by_item_resolver/invalid_use_of_date_part.py +++ b/metricflow-semantics/metricflow_semantics/query/issues/group_by_item_resolver/invalid_use_of_date_part.py @@ -5,14 +5,14 @@ from typing_extensions import override -from metricflow.mf_logging.pretty_print import mf_pformat -from metricflow.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath -from metricflow.query.issues.issues_base import ( +from metricflow_semantics.mf_logging.pretty_print import mf_pformat +from metricflow_semantics.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath +from metricflow_semantics.query.issues.issues_base import ( MetricFlowQueryIssueType, MetricFlowQueryResolutionIssue, ) -from metricflow.query.resolver_inputs.base_resolver_inputs import MetricFlowQueryResolverInput -from metricflow.specs.specs import LinkableInstanceSpec +from metricflow_semantics.query.resolver_inputs.base_resolver_inputs import MetricFlowQueryResolverInput +from metricflow_semantics.specs.spec_classes import LinkableInstanceSpec @dataclass(frozen=True) diff --git a/metricflow/query/issues/group_by_item_resolver/multiple_join_paths.py b/metricflow-semantics/metricflow_semantics/query/issues/group_by_item_resolver/multiple_join_paths.py similarity index 79% rename from metricflow/query/issues/group_by_item_resolver/multiple_join_paths.py rename to metricflow-semantics/metricflow_semantics/query/issues/group_by_item_resolver/multiple_join_paths.py index c989fdbd84..2a0bcaebeb 100644 --- a/metricflow/query/issues/group_by_item_resolver/multiple_join_paths.py +++ b/metricflow-semantics/metricflow_semantics/query/issues/group_by_item_resolver/multiple_join_paths.py @@ -5,16 +5,16 @@ from typing_extensions import override -from metricflow.mf_logging.formatting import indent -from metricflow.mf_logging.pretty_print import mf_pformat -from metricflow.naming.object_builder_scheme import ObjectBuilderNamingScheme -from metricflow.query.group_by_item.candidate_push_down.group_by_item_candidate import GroupByItemCandidateSet -from metricflow.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath -from metricflow.query.issues.issues_base import ( +from metricflow_semantics.mf_logging.formatting import indent +from metricflow_semantics.mf_logging.pretty_print import mf_pformat +from metricflow_semantics.naming.object_builder_scheme import ObjectBuilderNamingScheme +from metricflow_semantics.query.group_by_item.candidate_push_down.group_by_item_candidate import GroupByItemCandidateSet +from metricflow_semantics.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath +from metricflow_semantics.query.issues.issues_base import ( MetricFlowQueryIssueType, MetricFlowQueryResolutionIssue, ) -from metricflow.query.resolver_inputs.base_resolver_inputs import MetricFlowQueryResolverInput +from metricflow_semantics.query.resolver_inputs.base_resolver_inputs import MetricFlowQueryResolverInput @dataclass(frozen=True) diff --git a/metricflow/query/issues/group_by_item_resolver/no_common_items.py b/metricflow-semantics/metricflow_semantics/query/issues/group_by_item_resolver/no_common_items.py similarity index 84% rename from metricflow/query/issues/group_by_item_resolver/no_common_items.py rename to metricflow-semantics/metricflow_semantics/query/issues/group_by_item_resolver/no_common_items.py index 475acd9ce9..138d5ddfd6 100644 --- a/metricflow/query/issues/group_by_item_resolver/no_common_items.py +++ b/metricflow-semantics/metricflow_semantics/query/issues/group_by_item_resolver/no_common_items.py @@ -5,17 +5,17 @@ from typing_extensions import override -from metricflow.mf_logging.formatting import indent -from metricflow.mf_logging.pretty_print import mf_pformat -from metricflow.naming.object_builder_scheme import ObjectBuilderNamingScheme -from metricflow.query.group_by_item.candidate_push_down.group_by_item_candidate import GroupByItemCandidateSet -from metricflow.query.group_by_item.resolution_dag.resolution_nodes.base_node import GroupByItemResolutionNode -from metricflow.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath -from metricflow.query.issues.issues_base import ( +from metricflow_semantics.mf_logging.formatting import indent +from metricflow_semantics.mf_logging.pretty_print import mf_pformat +from metricflow_semantics.naming.object_builder_scheme import ObjectBuilderNamingScheme +from metricflow_semantics.query.group_by_item.candidate_push_down.group_by_item_candidate import GroupByItemCandidateSet +from metricflow_semantics.query.group_by_item.resolution_dag.resolution_nodes.base_node import GroupByItemResolutionNode +from metricflow_semantics.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath +from metricflow_semantics.query.issues.issues_base import ( MetricFlowQueryIssueType, MetricFlowQueryResolutionIssue, ) -from metricflow.query.resolver_inputs.base_resolver_inputs import MetricFlowQueryResolverInput +from metricflow_semantics.query.resolver_inputs.base_resolver_inputs import MetricFlowQueryResolverInput @dataclass(frozen=True) diff --git a/metricflow/query/issues/group_by_item_resolver/no_matching_items_for_measure.py b/metricflow-semantics/metricflow_semantics/query/issues/group_by_item_resolver/no_matching_items_for_measure.py similarity index 85% rename from metricflow/query/issues/group_by_item_resolver/no_matching_items_for_measure.py rename to metricflow-semantics/metricflow_semantics/query/issues/group_by_item_resolver/no_matching_items_for_measure.py index 9513cb0d55..8abab4bbf9 100644 --- a/metricflow/query/issues/group_by_item_resolver/no_matching_items_for_measure.py +++ b/metricflow-semantics/metricflow_semantics/query/issues/group_by_item_resolver/no_matching_items_for_measure.py @@ -6,14 +6,14 @@ from typing_extensions import override -from metricflow.mf_logging.formatting import indent -from metricflow.mf_logging.pretty_print import mf_pformat -from metricflow.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath -from metricflow.query.issues.issues_base import ( +from metricflow_semantics.mf_logging.formatting import indent +from metricflow_semantics.mf_logging.pretty_print import mf_pformat +from metricflow_semantics.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath +from metricflow_semantics.query.issues.issues_base import ( MetricFlowQueryIssueType, MetricFlowQueryResolutionIssue, ) -from metricflow.query.resolver_inputs.base_resolver_inputs import MetricFlowQueryResolverInput +from metricflow_semantics.query.resolver_inputs.base_resolver_inputs import MetricFlowQueryResolverInput logger = logging.getLogger(__name__) diff --git a/metricflow/query/issues/group_by_item_resolver/no_matching_items_for_no_metrics_query.py b/metricflow-semantics/metricflow_semantics/query/issues/group_by_item_resolver/no_matching_items_for_no_metrics_query.py similarity index 86% rename from metricflow/query/issues/group_by_item_resolver/no_matching_items_for_no_metrics_query.py rename to metricflow-semantics/metricflow_semantics/query/issues/group_by_item_resolver/no_matching_items_for_no_metrics_query.py index 1a03d17b8e..5e5f12c905 100644 --- a/metricflow/query/issues/group_by_item_resolver/no_matching_items_for_no_metrics_query.py +++ b/metricflow-semantics/metricflow_semantics/query/issues/group_by_item_resolver/no_matching_items_for_no_metrics_query.py @@ -5,12 +5,12 @@ from typing_extensions import override -from metricflow.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath -from metricflow.query.issues.issues_base import ( +from metricflow_semantics.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath +from metricflow_semantics.query.issues.issues_base import ( MetricFlowQueryIssueType, MetricFlowQueryResolutionIssue, ) -from metricflow.query.resolver_inputs.base_resolver_inputs import MetricFlowQueryResolverInput +from metricflow_semantics.query.resolver_inputs.base_resolver_inputs import MetricFlowQueryResolverInput @dataclass(frozen=True) diff --git a/metricflow/query/issues/group_by_item_resolver/no_parent_candidates.py b/metricflow-semantics/metricflow_semantics/query/issues/group_by_item_resolver/no_parent_candidates.py similarity index 88% rename from metricflow/query/issues/group_by_item_resolver/no_parent_candidates.py rename to metricflow-semantics/metricflow_semantics/query/issues/group_by_item_resolver/no_parent_candidates.py index 641a378a23..74a213ee97 100644 --- a/metricflow/query/issues/group_by_item_resolver/no_parent_candidates.py +++ b/metricflow-semantics/metricflow_semantics/query/issues/group_by_item_resolver/no_parent_candidates.py @@ -4,12 +4,12 @@ from typing_extensions import override -from metricflow.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath -from metricflow.query.issues.issues_base import ( +from metricflow_semantics.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath +from metricflow_semantics.query.issues.issues_base import ( MetricFlowQueryIssueType, MetricFlowQueryResolutionIssue, ) -from metricflow.query.resolver_inputs.base_resolver_inputs import MetricFlowQueryResolverInput +from metricflow_semantics.query.resolver_inputs.base_resolver_inputs import MetricFlowQueryResolverInput @dataclass(frozen=True) diff --git a/metricflow/query/issues/issues_base.py b/metricflow-semantics/metricflow_semantics/query/issues/issues_base.py similarity index 90% rename from metricflow/query/issues/issues_base.py rename to metricflow-semantics/metricflow_semantics/query/issues/issues_base.py index 34276057bb..67be8fe6e4 100644 --- a/metricflow/query/issues/issues_base.py +++ b/metricflow-semantics/metricflow_semantics/query/issues/issues_base.py @@ -7,10 +7,10 @@ from typing_extensions import override -from metricflow.collection_helpers.merger import Mergeable -from metricflow.query.group_by_item.path_prefixable import PathPrefixable -from metricflow.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath -from metricflow.query.resolver_inputs.base_resolver_inputs import MetricFlowQueryResolverInput +from metricflow_semantics.collection_helpers.merger import Mergeable +from metricflow_semantics.query.group_by_item.path_prefixable import PathPrefixable +from metricflow_semantics.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath +from metricflow_semantics.query.resolver_inputs.base_resolver_inputs import MetricFlowQueryResolverInput class MetricFlowQueryIssueType(Enum): diff --git a/metricflow/specs/patterns/__init__.py b/metricflow-semantics/metricflow_semantics/query/issues/parsing/__init__.py similarity index 100% rename from metricflow/specs/patterns/__init__.py rename to metricflow-semantics/metricflow_semantics/query/issues/parsing/__init__.py diff --git a/metricflow/query/issues/parsing/cumulative_metric_requires_metric_time.py b/metricflow-semantics/metricflow_semantics/query/issues/parsing/cumulative_metric_requires_metric_time.py similarity index 87% rename from metricflow/query/issues/parsing/cumulative_metric_requires_metric_time.py rename to metricflow-semantics/metricflow_semantics/query/issues/parsing/cumulative_metric_requires_metric_time.py index 183977fed2..84bb9e3eb0 100644 --- a/metricflow/query/issues/parsing/cumulative_metric_requires_metric_time.py +++ b/metricflow-semantics/metricflow_semantics/query/issues/parsing/cumulative_metric_requires_metric_time.py @@ -6,12 +6,12 @@ from dbt_semantic_interfaces.references import MetricReference from typing_extensions import override -from metricflow.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath -from metricflow.query.issues.issues_base import ( +from metricflow_semantics.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath +from metricflow_semantics.query.issues.issues_base import ( MetricFlowQueryIssueType, MetricFlowQueryResolutionIssue, ) -from metricflow.query.resolver_inputs.base_resolver_inputs import MetricFlowQueryResolverInput +from metricflow_semantics.query.resolver_inputs.base_resolver_inputs import MetricFlowQueryResolverInput @dataclass(frozen=True) diff --git a/metricflow/query/issues/parsing/duplicate_metric.py b/metricflow-semantics/metricflow_semantics/query/issues/parsing/duplicate_metric.py similarity index 86% rename from metricflow/query/issues/parsing/duplicate_metric.py rename to metricflow-semantics/metricflow_semantics/query/issues/parsing/duplicate_metric.py index 62b1c0b008..39c8763608 100644 --- a/metricflow/query/issues/parsing/duplicate_metric.py +++ b/metricflow-semantics/metricflow_semantics/query/issues/parsing/duplicate_metric.py @@ -6,12 +6,12 @@ from dbt_semantic_interfaces.references import MetricReference from typing_extensions import override -from metricflow.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath -from metricflow.query.issues.issues_base import ( +from metricflow_semantics.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath +from metricflow_semantics.query.issues.issues_base import ( MetricFlowQueryIssueType, MetricFlowQueryResolutionIssue, ) -from metricflow.query.resolver_inputs.base_resolver_inputs import MetricFlowQueryResolverInput +from metricflow_semantics.query.resolver_inputs.base_resolver_inputs import MetricFlowQueryResolverInput @dataclass(frozen=True) diff --git a/metricflow/query/issues/parsing/invalid_limit.py b/metricflow-semantics/metricflow_semantics/query/issues/parsing/invalid_limit.py similarity index 83% rename from metricflow/query/issues/parsing/invalid_limit.py rename to metricflow-semantics/metricflow_semantics/query/issues/parsing/invalid_limit.py index 60f876290c..0ade37aa8e 100644 --- a/metricflow/query/issues/parsing/invalid_limit.py +++ b/metricflow-semantics/metricflow_semantics/query/issues/parsing/invalid_limit.py @@ -4,12 +4,12 @@ from typing_extensions import override -from metricflow.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath -from metricflow.query.issues.issues_base import ( +from metricflow_semantics.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath +from metricflow_semantics.query.issues.issues_base import ( MetricFlowQueryIssueType, MetricFlowQueryResolutionIssue, ) -from metricflow.query.resolver_inputs.base_resolver_inputs import MetricFlowQueryResolverInput +from metricflow_semantics.query.resolver_inputs.base_resolver_inputs import MetricFlowQueryResolverInput @dataclass(frozen=True) diff --git a/metricflow/query/issues/parsing/invalid_metric.py b/metricflow-semantics/metricflow_semantics/query/issues/parsing/invalid_metric.py similarity index 80% rename from metricflow/query/issues/parsing/invalid_metric.py rename to metricflow-semantics/metricflow_semantics/query/issues/parsing/invalid_metric.py index c3c6e13ffc..8447b6885b 100644 --- a/metricflow/query/issues/parsing/invalid_metric.py +++ b/metricflow-semantics/metricflow_semantics/query/issues/parsing/invalid_metric.py @@ -5,14 +5,14 @@ from typing_extensions import override -from metricflow.mf_logging.formatting import indent -from metricflow.mf_logging.pretty_print import mf_pformat -from metricflow.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath -from metricflow.query.issues.issues_base import ( +from metricflow_semantics.mf_logging.formatting import indent +from metricflow_semantics.mf_logging.pretty_print import mf_pformat +from metricflow_semantics.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath +from metricflow_semantics.query.issues.issues_base import ( MetricFlowQueryIssueType, MetricFlowQueryResolutionIssue, ) -from metricflow.query.resolver_inputs.base_resolver_inputs import MetricFlowQueryResolverInput +from metricflow_semantics.query.resolver_inputs.base_resolver_inputs import MetricFlowQueryResolverInput @dataclass(frozen=True) diff --git a/metricflow/query/issues/parsing/invalid_min_max_only.py b/metricflow-semantics/metricflow_semantics/query/issues/parsing/invalid_min_max_only.py similarity index 84% rename from metricflow/query/issues/parsing/invalid_min_max_only.py rename to metricflow-semantics/metricflow_semantics/query/issues/parsing/invalid_min_max_only.py index 2b9665570f..252b049fd6 100644 --- a/metricflow/query/issues/parsing/invalid_min_max_only.py +++ b/metricflow-semantics/metricflow_semantics/query/issues/parsing/invalid_min_max_only.py @@ -4,12 +4,12 @@ from typing_extensions import override -from metricflow.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath -from metricflow.query.issues.issues_base import ( +from metricflow_semantics.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath +from metricflow_semantics.query.issues.issues_base import ( MetricFlowQueryIssueType, MetricFlowQueryResolutionIssue, ) -from metricflow.query.resolver_inputs.base_resolver_inputs import MetricFlowQueryResolverInput +from metricflow_semantics.query.resolver_inputs.base_resolver_inputs import MetricFlowQueryResolverInput @dataclass(frozen=True) diff --git a/metricflow/query/issues/parsing/invalid_order.py b/metricflow-semantics/metricflow_semantics/query/issues/parsing/invalid_order.py similarity index 82% rename from metricflow/query/issues/parsing/invalid_order.py rename to metricflow-semantics/metricflow_semantics/query/issues/parsing/invalid_order.py index 28483e49c5..e5c303a251 100644 --- a/metricflow/query/issues/parsing/invalid_order.py +++ b/metricflow-semantics/metricflow_semantics/query/issues/parsing/invalid_order.py @@ -4,13 +4,13 @@ from typing_extensions import override -from metricflow.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath -from metricflow.query.issues.issues_base import ( +from metricflow_semantics.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath +from metricflow_semantics.query.issues.issues_base import ( MetricFlowQueryIssueType, MetricFlowQueryResolutionIssue, ) -from metricflow.query.resolver_inputs.base_resolver_inputs import MetricFlowQueryResolverInput -from metricflow.query.resolver_inputs.query_resolver_inputs import ( +from metricflow_semantics.query.resolver_inputs.base_resolver_inputs import MetricFlowQueryResolverInput +from metricflow_semantics.query.resolver_inputs.query_resolver_inputs import ( ResolverInputForOrderByItem, ) diff --git a/metricflow/query/issues/parsing/no_metric_or_group_by.py b/metricflow-semantics/metricflow_semantics/query/issues/parsing/no_metric_or_group_by.py similarity index 80% rename from metricflow/query/issues/parsing/no_metric_or_group_by.py rename to metricflow-semantics/metricflow_semantics/query/issues/parsing/no_metric_or_group_by.py index d7655a8b1d..f80f638eb1 100644 --- a/metricflow/query/issues/parsing/no_metric_or_group_by.py +++ b/metricflow-semantics/metricflow_semantics/query/issues/parsing/no_metric_or_group_by.py @@ -4,13 +4,13 @@ from typing_extensions import override -from metricflow.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath -from metricflow.query.issues.issues_base import ( +from metricflow_semantics.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath +from metricflow_semantics.query.issues.issues_base import ( MetricFlowQueryIssueType, MetricFlowQueryResolutionIssue, ) -from metricflow.query.resolver_inputs.base_resolver_inputs import MetricFlowQueryResolverInput -from metricflow.query.resolver_inputs.query_resolver_inputs import ResolverInputForQuery +from metricflow_semantics.query.resolver_inputs.base_resolver_inputs import MetricFlowQueryResolverInput +from metricflow_semantics.query.resolver_inputs.query_resolver_inputs import ResolverInputForQuery @dataclass(frozen=True) diff --git a/metricflow/query/issues/parsing/offset_metric_requires_metric_time.py b/metricflow-semantics/metricflow_semantics/query/issues/parsing/offset_metric_requires_metric_time.py similarity index 89% rename from metricflow/query/issues/parsing/offset_metric_requires_metric_time.py rename to metricflow-semantics/metricflow_semantics/query/issues/parsing/offset_metric_requires_metric_time.py index f5db96a349..969e9b2dea 100644 --- a/metricflow/query/issues/parsing/offset_metric_requires_metric_time.py +++ b/metricflow-semantics/metricflow_semantics/query/issues/parsing/offset_metric_requires_metric_time.py @@ -8,12 +8,12 @@ from dbt_semantic_interfaces.references import MetricReference from typing_extensions import override -from metricflow.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath -from metricflow.query.issues.issues_base import ( +from metricflow_semantics.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath +from metricflow_semantics.query.issues.issues_base import ( MetricFlowQueryIssueType, MetricFlowQueryResolutionIssue, ) -from metricflow.query.resolver_inputs.base_resolver_inputs import MetricFlowQueryResolverInput +from metricflow_semantics.query.resolver_inputs.base_resolver_inputs import MetricFlowQueryResolverInput @dataclass(frozen=True) diff --git a/metricflow/query/issues/parsing/string_input_parsing_issue.py b/metricflow-semantics/metricflow_semantics/query/issues/parsing/string_input_parsing_issue.py similarity index 83% rename from metricflow/query/issues/parsing/string_input_parsing_issue.py rename to metricflow-semantics/metricflow_semantics/query/issues/parsing/string_input_parsing_issue.py index 9a1a4c65b3..29e3f9aad2 100644 --- a/metricflow/query/issues/parsing/string_input_parsing_issue.py +++ b/metricflow-semantics/metricflow_semantics/query/issues/parsing/string_input_parsing_issue.py @@ -4,12 +4,12 @@ from typing_extensions import override -from metricflow.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath -from metricflow.query.issues.issues_base import ( +from metricflow_semantics.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath +from metricflow_semantics.query.issues.issues_base import ( MetricFlowQueryIssueType, MetricFlowQueryResolutionIssue, ) -from metricflow.query.resolver_inputs.base_resolver_inputs import MetricFlowQueryResolverInput +from metricflow_semantics.query.resolver_inputs.base_resolver_inputs import MetricFlowQueryResolverInput @dataclass(frozen=True) diff --git a/metricflow/query/query_exceptions.py b/metricflow-semantics/metricflow_semantics/query/query_exceptions.py similarity index 100% rename from metricflow/query/query_exceptions.py rename to metricflow-semantics/metricflow_semantics/query/query_exceptions.py diff --git a/metricflow/query/query_parser.py b/metricflow-semantics/metricflow_semantics/query/query_parser.py similarity index 90% rename from metricflow/query/query_parser.py rename to metricflow-semantics/metricflow_semantics/query/query_parser.py index 75dcd34ee2..63486319ce 100644 --- a/metricflow/query/query_parser.py +++ b/metricflow-semantics/metricflow_semantics/query/query_parser.py @@ -13,35 +13,35 @@ from dbt_semantic_interfaces.protocols.where_filter import WhereFilter from dbt_semantic_interfaces.type_enums import TimeGranularity -from metricflow.assert_one_arg import assert_at_most_one_arg_set -from metricflow.filters.merge_where import merge_to_single_where_filter -from metricflow.filters.time_constraint import TimeRangeConstraint -from metricflow.mf_logging.formatting import indent -from metricflow.mf_logging.pretty_print import mf_pformat -from metricflow.mf_logging.runtime import log_runtime -from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup -from metricflow.naming.dunder_scheme import DunderNamingScheme -from metricflow.naming.metric_scheme import MetricNamingScheme -from metricflow.naming.object_builder_scheme import ObjectBuilderNamingScheme -from metricflow.protocols.query_parameter import ( +from metricflow_semantics.assert_one_arg import assert_at_most_one_arg_set +from metricflow_semantics.filters.merge_where import merge_to_single_where_filter +from metricflow_semantics.filters.time_constraint import TimeRangeConstraint +from metricflow_semantics.mf_logging.formatting import indent +from metricflow_semantics.mf_logging.pretty_print import mf_pformat +from metricflow_semantics.mf_logging.runtime import log_runtime +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.naming.dunder_scheme import DunderNamingScheme +from metricflow_semantics.naming.metric_scheme import MetricNamingScheme +from metricflow_semantics.naming.object_builder_scheme import ObjectBuilderNamingScheme +from metricflow_semantics.protocols.query_parameter import ( GroupByParameter, MetricQueryParameter, OrderByQueryParameter, SavedQueryParameter, ) -from metricflow.query.group_by_item.filter_spec_resolution.filter_pattern_factory import ( +from metricflow_semantics.query.group_by_item.filter_spec_resolution.filter_pattern_factory import ( DefaultWhereFilterPatternFactory, WhereFilterPatternFactory, ) -from metricflow.query.group_by_item.group_by_item_resolver import GroupByItemResolver -from metricflow.query.group_by_item.resolution_dag.dag import GroupByItemResolutionDag -from metricflow.query.issues.issues_base import MetricFlowQueryResolutionIssueSet -from metricflow.query.issues.parsing.string_input_parsing_issue import StringInputParsingIssue -from metricflow.query.query_exceptions import InvalidQueryException -from metricflow.query.query_resolution import InputToIssueSetMapping, InputToIssueSetMappingItem -from metricflow.query.query_resolver import MetricFlowQueryResolver -from metricflow.query.resolver_inputs.base_resolver_inputs import MetricFlowQueryResolverInput -from metricflow.query.resolver_inputs.query_resolver_inputs import ( +from metricflow_semantics.query.group_by_item.group_by_item_resolver import GroupByItemResolver +from metricflow_semantics.query.group_by_item.resolution_dag.dag import GroupByItemResolutionDag +from metricflow_semantics.query.issues.issues_base import MetricFlowQueryResolutionIssueSet +from metricflow_semantics.query.issues.parsing.string_input_parsing_issue import StringInputParsingIssue +from metricflow_semantics.query.query_exceptions import InvalidQueryException +from metricflow_semantics.query.query_resolution import InputToIssueSetMapping, InputToIssueSetMappingItem +from metricflow_semantics.query.query_resolver import MetricFlowQueryResolver +from metricflow_semantics.query.resolver_inputs.base_resolver_inputs import MetricFlowQueryResolverInput +from metricflow_semantics.query.resolver_inputs.query_resolver_inputs import ( InvalidStringInput, ResolverInputForGroupByItem, ResolverInputForLimit, @@ -51,16 +51,16 @@ ResolverInputForQuery, ResolverInputForQueryLevelWhereFilterIntersection, ) -from metricflow.specs.patterns.base_time_grain import BaseTimeGrainPattern -from metricflow.specs.patterns.metric_time_pattern import MetricTimePattern -from metricflow.specs.patterns.none_date_part import NoneDatePartPattern -from metricflow.specs.specs import ( +from metricflow_semantics.specs.patterns.base_time_grain import BaseTimeGrainPattern +from metricflow_semantics.specs.patterns.metric_time_pattern import MetricTimePattern +from metricflow_semantics.specs.patterns.none_date_part import NoneDatePartPattern +from metricflow_semantics.specs.spec_classes import ( InstanceSpec, InstanceSpecSet, MetricFlowQuerySpec, TimeDimensionSpec, ) -from metricflow.time.time_granularity import ( +from metricflow_semantics.time.time_granularity import ( adjust_to_end_of_period, adjust_to_start_of_period, is_period_end, diff --git a/metricflow/query/query_resolution.py b/metricflow-semantics/metricflow_semantics/query/query_resolution.py similarity index 83% rename from metricflow/query/query_resolution.py rename to metricflow-semantics/metricflow_semantics/query/query_resolution.py index c15e3ef839..f715c048fd 100644 --- a/metricflow/query/query_resolution.py +++ b/metricflow-semantics/metricflow_semantics/query/query_resolution.py @@ -5,13 +5,15 @@ from typing_extensions import override -from metricflow.collection_helpers.merger import Mergeable -from metricflow.mf_logging.pretty_print import mf_pformat -from metricflow.query.group_by_item.filter_spec_resolution.filter_spec_lookup import FilterSpecResolutionLookUp -from metricflow.query.group_by_item.resolution_dag.dag import GroupByItemResolutionDag -from metricflow.query.issues.issues_base import MetricFlowQueryResolutionIssueSet -from metricflow.query.resolver_inputs.base_resolver_inputs import MetricFlowQueryResolverInput -from metricflow.specs.specs import MetricFlowQuerySpec +from metricflow_semantics.collection_helpers.merger import Mergeable +from metricflow_semantics.mf_logging.pretty_print import mf_pformat +from metricflow_semantics.query.group_by_item.filter_spec_resolution.filter_spec_lookup import ( + FilterSpecResolutionLookUp, +) +from metricflow_semantics.query.group_by_item.resolution_dag.dag import GroupByItemResolutionDag +from metricflow_semantics.query.issues.issues_base import MetricFlowQueryResolutionIssueSet +from metricflow_semantics.query.resolver_inputs.base_resolver_inputs import MetricFlowQueryResolverInput +from metricflow_semantics.specs.spec_classes import MetricFlowQuerySpec @dataclass(frozen=True) diff --git a/metricflow/query/query_resolver.py b/metricflow-semantics/metricflow_semantics/query/query_resolver.py similarity index 91% rename from metricflow/query/query_resolver.py rename to metricflow-semantics/metricflow_semantics/query/query_resolver.py index 15ea3fb34c..45f4e0ff39 100644 --- a/metricflow/query/query_resolver.py +++ b/metricflow-semantics/metricflow_semantics/query/query_resolver.py @@ -6,36 +6,40 @@ from dbt_semantic_interfaces.references import MetricReference -from metricflow.mf_logging.pretty_print import mf_pformat -from metricflow.mf_logging.runtime import log_runtime -from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup -from metricflow.naming.metric_scheme import MetricNamingScheme -from metricflow.query.group_by_item.filter_spec_resolution.filter_pattern_factory import WhereFilterPatternFactory -from metricflow.query.group_by_item.filter_spec_resolution.filter_spec_lookup import FilterSpecResolutionLookUp -from metricflow.query.group_by_item.filter_spec_resolution.filter_spec_resolver import ( +from metricflow_semantics.mf_logging.pretty_print import mf_pformat +from metricflow_semantics.mf_logging.runtime import log_runtime +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.naming.metric_scheme import MetricNamingScheme +from metricflow_semantics.query.group_by_item.filter_spec_resolution.filter_pattern_factory import ( + WhereFilterPatternFactory, +) +from metricflow_semantics.query.group_by_item.filter_spec_resolution.filter_spec_lookup import ( + FilterSpecResolutionLookUp, +) +from metricflow_semantics.query.group_by_item.filter_spec_resolution.filter_spec_resolver import ( WhereFilterSpecResolver, ) -from metricflow.query.group_by_item.group_by_item_resolver import GroupByItemResolution, GroupByItemResolver -from metricflow.query.group_by_item.resolution_dag.dag import GroupByItemResolutionDag -from metricflow.query.group_by_item.resolution_dag.dag_builder import GroupByItemResolutionDagBuilder -from metricflow.query.group_by_item.resolution_dag.resolution_nodes.query_resolution_node import ( +from metricflow_semantics.query.group_by_item.group_by_item_resolver import GroupByItemResolution, GroupByItemResolver +from metricflow_semantics.query.group_by_item.resolution_dag.dag import GroupByItemResolutionDag +from metricflow_semantics.query.group_by_item.resolution_dag.dag_builder import GroupByItemResolutionDagBuilder +from metricflow_semantics.query.group_by_item.resolution_dag.resolution_nodes.query_resolution_node import ( QueryGroupByItemResolutionNode, ) -from metricflow.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath -from metricflow.query.issues.issues_base import ( +from metricflow_semantics.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath +from metricflow_semantics.query.issues.issues_base import ( MetricFlowQueryResolutionIssueSet, ) -from metricflow.query.issues.parsing.invalid_limit import InvalidLimitIssue -from metricflow.query.issues.parsing.invalid_metric import InvalidMetricIssue -from metricflow.query.issues.parsing.invalid_min_max_only import InvalidMinMaxOnlyIssue -from metricflow.query.issues.parsing.invalid_order import InvalidOrderByItemIssue -from metricflow.query.issues.parsing.no_metric_or_group_by import NoMetricOrGroupByIssue -from metricflow.query.query_resolution import ( +from metricflow_semantics.query.issues.parsing.invalid_limit import InvalidLimitIssue +from metricflow_semantics.query.issues.parsing.invalid_metric import InvalidMetricIssue +from metricflow_semantics.query.issues.parsing.invalid_min_max_only import InvalidMinMaxOnlyIssue +from metricflow_semantics.query.issues.parsing.invalid_order import InvalidOrderByItemIssue +from metricflow_semantics.query.issues.parsing.no_metric_or_group_by import NoMetricOrGroupByIssue +from metricflow_semantics.query.query_resolution import ( InputToIssueSetMapping, InputToIssueSetMappingItem, MetricFlowQueryResolution, ) -from metricflow.query.resolver_inputs.query_resolver_inputs import ( +from metricflow_semantics.query.resolver_inputs.query_resolver_inputs import ( ResolverInputForGroupByItem, ResolverInputForLimit, ResolverInputForMetric, @@ -45,10 +49,10 @@ ResolverInputForQueryLevelWhereFilterIntersection, ResolverInputForWhereFilterIntersection, ) -from metricflow.query.suggestion_generator import QueryItemSuggestionGenerator -from metricflow.query.validation_rules.query_validator import PostResolutionQueryValidator -from metricflow.specs.patterns.match_list_pattern import MatchListSpecPattern -from metricflow.specs.specs import ( +from metricflow_semantics.query.suggestion_generator import QueryItemSuggestionGenerator +from metricflow_semantics.query.validation_rules.query_validator import PostResolutionQueryValidator +from metricflow_semantics.specs.patterns.match_list_pattern import MatchListSpecPattern +from metricflow_semantics.specs.spec_classes import ( InstanceSpec, LinkableInstanceSpec, LinkableSpecSet, diff --git a/metricflow/time/__init__.py b/metricflow-semantics/metricflow_semantics/query/resolver_inputs/__init__.py similarity index 100% rename from metricflow/time/__init__.py rename to metricflow-semantics/metricflow_semantics/query/resolver_inputs/__init__.py diff --git a/metricflow/query/resolver_inputs/base_resolver_inputs.py b/metricflow-semantics/metricflow_semantics/query/resolver_inputs/base_resolver_inputs.py similarity index 89% rename from metricflow/query/resolver_inputs/base_resolver_inputs.py rename to metricflow-semantics/metricflow_semantics/query/resolver_inputs/base_resolver_inputs.py index 6a46956ad3..ee6308ed2a 100644 --- a/metricflow/query/resolver_inputs/base_resolver_inputs.py +++ b/metricflow-semantics/metricflow_semantics/query/resolver_inputs/base_resolver_inputs.py @@ -4,8 +4,8 @@ from dataclasses import dataclass from typing import Optional -from metricflow.naming.naming_scheme import QueryItemNamingScheme -from metricflow.specs.patterns.spec_pattern import SpecPattern +from metricflow_semantics.naming.naming_scheme import QueryItemNamingScheme +from metricflow_semantics.specs.patterns.spec_pattern import SpecPattern @dataclass(frozen=True) diff --git a/metricflow/query/resolver_inputs/query_resolver_inputs.py b/metricflow-semantics/metricflow_semantics/query/resolver_inputs/query_resolver_inputs.py similarity index 89% rename from metricflow/query/resolver_inputs/query_resolver_inputs.py rename to metricflow-semantics/metricflow_semantics/query/resolver_inputs/query_resolver_inputs.py index d775f03965..45a02b49b3 100644 --- a/metricflow/query/resolver_inputs/query_resolver_inputs.py +++ b/metricflow-semantics/metricflow_semantics/query/resolver_inputs/query_resolver_inputs.py @@ -11,15 +11,18 @@ from dbt_semantic_interfaces.protocols import WhereFilterIntersection from typing_extensions import override -from metricflow.mf_logging.formatting import indent -from metricflow.mf_logging.pretty_print import mf_pformat -from metricflow.naming.metric_scheme import MetricNamingScheme -from metricflow.naming.naming_scheme import QueryItemNamingScheme -from metricflow.protocols.query_parameter import GroupByParameter, MetricQueryParameter, OrderByQueryParameter -from metricflow.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath -from metricflow.query.resolver_inputs.base_resolver_inputs import InputPatternDescription, MetricFlowQueryResolverInput -from metricflow.specs.patterns.metric_pattern import MetricSpecPattern -from metricflow.specs.patterns.spec_pattern import SpecPattern +from metricflow_semantics.mf_logging.formatting import indent +from metricflow_semantics.mf_logging.pretty_print import mf_pformat +from metricflow_semantics.naming.metric_scheme import MetricNamingScheme +from metricflow_semantics.naming.naming_scheme import QueryItemNamingScheme +from metricflow_semantics.protocols.query_parameter import GroupByParameter, MetricQueryParameter, OrderByQueryParameter +from metricflow_semantics.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath +from metricflow_semantics.query.resolver_inputs.base_resolver_inputs import ( + InputPatternDescription, + MetricFlowQueryResolverInput, +) +from metricflow_semantics.specs.patterns.metric_pattern import MetricSpecPattern +from metricflow_semantics.specs.patterns.spec_pattern import SpecPattern @dataclass(frozen=True) diff --git a/metricflow/query/similarity.py b/metricflow-semantics/metricflow_semantics/query/similarity.py similarity index 100% rename from metricflow/query/similarity.py rename to metricflow-semantics/metricflow_semantics/query/similarity.py diff --git a/metricflow/query/suggestion_generator.py b/metricflow-semantics/metricflow_semantics/query/suggestion_generator.py similarity index 83% rename from metricflow/query/suggestion_generator.py rename to metricflow-semantics/metricflow_semantics/query/suggestion_generator.py index ed1d06918c..f89784ced7 100644 --- a/metricflow/query/suggestion_generator.py +++ b/metricflow-semantics/metricflow_semantics/query/suggestion_generator.py @@ -3,12 +3,12 @@ import logging from typing import Sequence, Tuple -from metricflow.naming.naming_scheme import QueryItemNamingScheme -from metricflow.query.similarity import top_fuzzy_matches -from metricflow.specs.patterns.base_time_grain import BaseTimeGrainPattern -from metricflow.specs.patterns.none_date_part import NoneDatePartPattern -from metricflow.specs.patterns.spec_pattern import SpecPattern -from metricflow.specs.specs import InstanceSpec +from metricflow_semantics.naming.naming_scheme import QueryItemNamingScheme +from metricflow_semantics.query.similarity import top_fuzzy_matches +from metricflow_semantics.specs.patterns.base_time_grain import BaseTimeGrainPattern +from metricflow_semantics.specs.patterns.none_date_part import NoneDatePartPattern +from metricflow_semantics.specs.patterns.spec_pattern import SpecPattern +from metricflow_semantics.specs.spec_classes import InstanceSpec logger = logging.getLogger(__name__) diff --git a/tests/__init__.py b/metricflow-semantics/metricflow_semantics/query/validation_rules/__init__.py similarity index 100% rename from tests/__init__.py rename to metricflow-semantics/metricflow_semantics/query/validation_rules/__init__.py diff --git a/metricflow/query/validation_rules/base_validation_rule.py b/metricflow-semantics/metricflow_semantics/query/validation_rules/base_validation_rule.py similarity index 81% rename from metricflow/query/validation_rules/base_validation_rule.py rename to metricflow-semantics/metricflow_semantics/query/validation_rules/base_validation_rule.py index 3f2186e878..abfc9ab42f 100644 --- a/metricflow/query/validation_rules/base_validation_rule.py +++ b/metricflow-semantics/metricflow_semantics/query/validation_rules/base_validation_rule.py @@ -6,10 +6,10 @@ from dbt_semantic_interfaces.protocols import Metric, WhereFilterIntersection from dbt_semantic_interfaces.references import MetricReference -from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup -from metricflow.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath -from metricflow.query.issues.issues_base import MetricFlowQueryResolutionIssueSet -from metricflow.query.resolver_inputs.query_resolver_inputs import ResolverInputForQuery +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath +from metricflow_semantics.query.issues.issues_base import MetricFlowQueryResolutionIssueSet +from metricflow_semantics.query.resolver_inputs.query_resolver_inputs import ResolverInputForQuery class PostResolutionQueryValidationRule(ABC): diff --git a/metricflow/query/validation_rules/duplicate_metric.py b/metricflow-semantics/metricflow_semantics/query/validation_rules/duplicate_metric.py similarity index 76% rename from metricflow/query/validation_rules/duplicate_metric.py rename to metricflow-semantics/metricflow_semantics/query/validation_rules/duplicate_metric.py index 923968016c..7a595f4be6 100644 --- a/metricflow/query/validation_rules/duplicate_metric.py +++ b/metricflow-semantics/metricflow_semantics/query/validation_rules/duplicate_metric.py @@ -7,12 +7,12 @@ from dbt_semantic_interfaces.references import MetricReference from typing_extensions import override -from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup -from metricflow.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath -from metricflow.query.issues.issues_base import MetricFlowQueryResolutionIssueSet -from metricflow.query.issues.parsing.duplicate_metric import DuplicateMetricIssue -from metricflow.query.resolver_inputs.query_resolver_inputs import ResolverInputForQuery -from metricflow.query.validation_rules.base_validation_rule import PostResolutionQueryValidationRule +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath +from metricflow_semantics.query.issues.issues_base import MetricFlowQueryResolutionIssueSet +from metricflow_semantics.query.issues.parsing.duplicate_metric import DuplicateMetricIssue +from metricflow_semantics.query.resolver_inputs.query_resolver_inputs import ResolverInputForQuery +from metricflow_semantics.query.validation_rules.base_validation_rule import PostResolutionQueryValidationRule logger = logging.getLogger(__name__) diff --git a/metricflow/query/validation_rules/metric_time_requirements.py b/metricflow-semantics/metricflow_semantics/query/validation_rules/metric_time_requirements.py similarity index 85% rename from metricflow/query/validation_rules/metric_time_requirements.py rename to metricflow-semantics/metricflow_semantics/query/validation_rules/metric_time_requirements.py index ab8394a6a0..794fa2c769 100644 --- a/metricflow/query/validation_rules/metric_time_requirements.py +++ b/metricflow-semantics/metricflow_semantics/query/validation_rules/metric_time_requirements.py @@ -9,16 +9,18 @@ from dbt_semantic_interfaces.type_enums import MetricType from typing_extensions import override -from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup -from metricflow.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath -from metricflow.query.issues.issues_base import MetricFlowQueryResolutionIssueSet -from metricflow.query.issues.parsing.cumulative_metric_requires_metric_time import ( +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath +from metricflow_semantics.query.issues.issues_base import MetricFlowQueryResolutionIssueSet +from metricflow_semantics.query.issues.parsing.cumulative_metric_requires_metric_time import ( CumulativeMetricRequiresMetricTimeIssue, ) -from metricflow.query.issues.parsing.offset_metric_requires_metric_time import OffsetMetricRequiresMetricTimeIssue -from metricflow.query.resolver_inputs.query_resolver_inputs import ResolverInputForQuery -from metricflow.query.validation_rules.base_validation_rule import PostResolutionQueryValidationRule -from metricflow.specs.specs import TimeDimensionSpec +from metricflow_semantics.query.issues.parsing.offset_metric_requires_metric_time import ( + OffsetMetricRequiresMetricTimeIssue, +) +from metricflow_semantics.query.resolver_inputs.query_resolver_inputs import ResolverInputForQuery +from metricflow_semantics.query.validation_rules.base_validation_rule import PostResolutionQueryValidationRule +from metricflow_semantics.specs.spec_classes import TimeDimensionSpec class MetricTimeQueryValidationRule(PostResolutionQueryValidationRule): diff --git a/metricflow/query/validation_rules/query_validator.py b/metricflow-semantics/metricflow_semantics/query/validation_rules/query_validator.py similarity index 75% rename from metricflow/query/validation_rules/query_validator.py rename to metricflow-semantics/metricflow_semantics/query/validation_rules/query_validator.py index de87b2038e..2885ed0c74 100644 --- a/metricflow/query/validation_rules/query_validator.py +++ b/metricflow-semantics/metricflow_semantics/query/validation_rules/query_validator.py @@ -4,30 +4,30 @@ from typing_extensions import override -from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup -from metricflow.query.group_by_item.candidate_push_down.push_down_visitor import DagTraversalPathTracker -from metricflow.query.group_by_item.resolution_dag.dag import GroupByItemResolutionDag -from metricflow.query.group_by_item.resolution_dag.resolution_nodes.base_node import ( +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.query.group_by_item.candidate_push_down.push_down_visitor import DagTraversalPathTracker +from metricflow_semantics.query.group_by_item.resolution_dag.dag import GroupByItemResolutionDag +from metricflow_semantics.query.group_by_item.resolution_dag.resolution_nodes.base_node import ( GroupByItemResolutionNode, GroupByItemResolutionNodeVisitor, ) -from metricflow.query.group_by_item.resolution_dag.resolution_nodes.measure_source_node import ( +from metricflow_semantics.query.group_by_item.resolution_dag.resolution_nodes.measure_source_node import ( MeasureGroupByItemSourceNode, ) -from metricflow.query.group_by_item.resolution_dag.resolution_nodes.metric_resolution_node import ( +from metricflow_semantics.query.group_by_item.resolution_dag.resolution_nodes.metric_resolution_node import ( MetricGroupByItemResolutionNode, ) -from metricflow.query.group_by_item.resolution_dag.resolution_nodes.no_metrics_query_source_node import ( +from metricflow_semantics.query.group_by_item.resolution_dag.resolution_nodes.no_metrics_query_source_node import ( NoMetricsGroupByItemSourceNode, ) -from metricflow.query.group_by_item.resolution_dag.resolution_nodes.query_resolution_node import ( +from metricflow_semantics.query.group_by_item.resolution_dag.resolution_nodes.query_resolution_node import ( QueryGroupByItemResolutionNode, ) -from metricflow.query.issues.issues_base import MetricFlowQueryResolutionIssueSet -from metricflow.query.resolver_inputs.query_resolver_inputs import ResolverInputForQuery -from metricflow.query.validation_rules.base_validation_rule import PostResolutionQueryValidationRule -from metricflow.query.validation_rules.duplicate_metric import DuplicateMetricValidationRule -from metricflow.query.validation_rules.metric_time_requirements import MetricTimeQueryValidationRule +from metricflow_semantics.query.issues.issues_base import MetricFlowQueryResolutionIssueSet +from metricflow_semantics.query.resolver_inputs.query_resolver_inputs import ResolverInputForQuery +from metricflow_semantics.query.validation_rules.base_validation_rule import PostResolutionQueryValidationRule +from metricflow_semantics.query.validation_rules.duplicate_metric import DuplicateMetricValidationRule +from metricflow_semantics.query.validation_rules.metric_time_requirements import MetricTimeQueryValidationRule class PostResolutionQueryValidator: diff --git a/metricflow/random_id.py b/metricflow-semantics/metricflow_semantics/random_id.py similarity index 100% rename from metricflow/random_id.py rename to metricflow-semantics/metricflow_semantics/random_id.py diff --git a/tests/cli/__init__.py b/metricflow-semantics/metricflow_semantics/specs/__init__.py similarity index 100% rename from tests/cli/__init__.py rename to metricflow-semantics/metricflow_semantics/specs/__init__.py diff --git a/metricflow/specs/column_assoc.py b/metricflow-semantics/metricflow_semantics/specs/column_assoc.py similarity index 97% rename from metricflow/specs/column_assoc.py rename to metricflow-semantics/metricflow_semantics/specs/column_assoc.py index 6231da5849..2b82580fb6 100644 --- a/metricflow/specs/column_assoc.py +++ b/metricflow-semantics/metricflow_semantics/specs/column_assoc.py @@ -6,7 +6,7 @@ from dbt_semantic_interfaces.dataclass_serialization import SerializableDataclass -from metricflow.specs.specs import InstanceSpec +from metricflow_semantics.specs.spec_classes import InstanceSpec class ColumnCorrelationKey(ABC): diff --git a/metricflow/specs/dimension_spec_resolver.py b/metricflow-semantics/metricflow_semantics/specs/dimension_spec_resolver.py similarity index 96% rename from metricflow/specs/dimension_spec_resolver.py rename to metricflow-semantics/metricflow_semantics/specs/dimension_spec_resolver.py index 25caa0ac6c..752e64b300 100644 --- a/metricflow/specs/dimension_spec_resolver.py +++ b/metricflow-semantics/metricflow_semantics/specs/dimension_spec_resolver.py @@ -12,7 +12,7 @@ from dbt_semantic_interfaces.type_enums import TimeGranularity from dbt_semantic_interfaces.type_enums.date_part import DatePart -from metricflow.specs.specs import DEFAULT_TIME_GRANULARITY, DimensionSpec, TimeDimensionSpec +from metricflow_semantics.specs.spec_classes import DEFAULT_TIME_GRANULARITY, DimensionSpec, TimeDimensionSpec class DimensionSpecResolver: diff --git a/metricflow/plan_conversion/column_resolver.py b/metricflow-semantics/metricflow_semantics/specs/dunder_column_association_resolver.py similarity index 93% rename from metricflow/plan_conversion/column_resolver.py rename to metricflow-semantics/metricflow_semantics/specs/dunder_column_association_resolver.py index 323bbf2c83..d217067646 100644 --- a/metricflow/plan_conversion/column_resolver.py +++ b/metricflow-semantics/metricflow_semantics/specs/dunder_column_association_resolver.py @@ -1,15 +1,13 @@ from __future__ import annotations -import logging - -from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup -from metricflow.naming.linkable_spec_name import DUNDER, StructuredLinkableSpecName -from metricflow.specs.column_assoc import ( +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.naming.linkable_spec_name import DUNDER, StructuredLinkableSpecName +from metricflow_semantics.specs.column_assoc import ( ColumnAssociation, ColumnAssociationResolver, SingleColumnCorrelationKey, ) -from metricflow.specs.specs import ( +from metricflow_semantics.specs.spec_classes import ( DimensionSpec, EntitySpec, GroupByMetricSpec, @@ -21,7 +19,24 @@ TimeDimensionSpec, ) -logger = logging.getLogger(__name__) + +class DunderColumnAssociationResolver(ColumnAssociationResolver): + """Uses a double underscore to map specs to column names. + + For example: + + DimensionSpec(element_name='country', entity_links=['listing']) + + -> + + listing__country + """ + + def __init__(self, semantic_manifest_lookup: SemanticManifestLookup) -> None: # noqa: D107 + self._visitor_helper = DunderColumnAssociationResolverVisitor(semantic_manifest_lookup) + + def resolve_spec(self, spec: InstanceSpec) -> ColumnAssociation: # noqa: D102 + return spec.accept(self._visitor_helper) class DunderColumnAssociationResolverVisitor(InstanceSpecVisitor[ColumnAssociation]): @@ -92,22 +107,3 @@ def visit_metadata_spec(self, metadata_spec: MetadataSpec) -> ColumnAssociation: column_name=metadata_spec.qualified_name, single_column_correlation_key=SingleColumnCorrelationKey(), ) - - -class DunderColumnAssociationResolver(ColumnAssociationResolver): - """Uses a double underscore to map specs to column names. - - For example: - - DimensionSpec(element_name='country', entity_links=['listing']) - - -> - - listing__country - """ - - def __init__(self, semantic_manifest_lookup: SemanticManifestLookup) -> None: # noqa: D107 - self._visitor_helper = DunderColumnAssociationResolverVisitor(semantic_manifest_lookup) - - def resolve_spec(self, spec: InstanceSpec) -> ColumnAssociation: # noqa: D102 - return spec.accept(self._visitor_helper) diff --git a/tests/collection_helpers/__init__.py b/metricflow-semantics/metricflow_semantics/specs/patterns/__init__.py similarity index 100% rename from tests/collection_helpers/__init__.py rename to metricflow-semantics/metricflow_semantics/specs/patterns/__init__.py diff --git a/metricflow/specs/patterns/base_time_grain.py b/metricflow-semantics/metricflow_semantics/specs/patterns/base_time_grain.py similarity index 94% rename from metricflow/specs/patterns/base_time_grain.py rename to metricflow-semantics/metricflow_semantics/specs/patterns/base_time_grain.py index 26a45a33b1..fa23af1990 100644 --- a/metricflow/specs/patterns/base_time_grain.py +++ b/metricflow-semantics/metricflow_semantics/specs/patterns/base_time_grain.py @@ -6,9 +6,9 @@ from dbt_semantic_interfaces.type_enums import TimeGranularity from typing_extensions import override -from metricflow.specs.patterns.metric_time_pattern import MetricTimePattern -from metricflow.specs.patterns.spec_pattern import SpecPattern -from metricflow.specs.specs import ( +from metricflow_semantics.specs.patterns.metric_time_pattern import MetricTimePattern +from metricflow_semantics.specs.patterns.spec_pattern import SpecPattern +from metricflow_semantics.specs.spec_classes import ( InstanceSpec, InstanceSpecSet, LinkableInstanceSpec, diff --git a/metricflow/specs/patterns/entity_link_pattern.py b/metricflow-semantics/metricflow_semantics/specs/patterns/entity_link_pattern.py similarity index 97% rename from metricflow/specs/patterns/entity_link_pattern.py rename to metricflow-semantics/metricflow_semantics/specs/patterns/entity_link_pattern.py index 28d8adcdd3..5f152a07c4 100644 --- a/metricflow/specs/patterns/entity_link_pattern.py +++ b/metricflow-semantics/metricflow_semantics/specs/patterns/entity_link_pattern.py @@ -11,8 +11,8 @@ from more_itertools import is_sorted from typing_extensions import override -from metricflow.specs.patterns.spec_pattern import SpecPattern -from metricflow.specs.specs import InstanceSpec, InstanceSpecSet, LinkableInstanceSpec +from metricflow_semantics.specs.patterns.spec_pattern import SpecPattern +from metricflow_semantics.specs.spec_classes import InstanceSpec, InstanceSpecSet, LinkableInstanceSpec logger = logging.getLogger(__name__) diff --git a/metricflow/specs/patterns/match_list_pattern.py b/metricflow-semantics/metricflow_semantics/specs/patterns/match_list_pattern.py similarity index 82% rename from metricflow/specs/patterns/match_list_pattern.py rename to metricflow-semantics/metricflow_semantics/specs/patterns/match_list_pattern.py index 7ac8d5824e..07bf3e2553 100644 --- a/metricflow/specs/patterns/match_list_pattern.py +++ b/metricflow-semantics/metricflow_semantics/specs/patterns/match_list_pattern.py @@ -4,8 +4,8 @@ from typing_extensions import override -from metricflow.specs.patterns.spec_pattern import SpecPattern -from metricflow.specs.specs import InstanceSpec +from metricflow_semantics.specs.patterns.spec_pattern import SpecPattern +from metricflow_semantics.specs.spec_classes import InstanceSpec class MatchListSpecPattern(SpecPattern): diff --git a/metricflow/specs/patterns/metric_pattern.py b/metricflow-semantics/metricflow_semantics/specs/patterns/metric_pattern.py similarity index 85% rename from metricflow/specs/patterns/metric_pattern.py rename to metricflow-semantics/metricflow_semantics/specs/patterns/metric_pattern.py index b08d73e5d7..0bbe31cbe4 100644 --- a/metricflow/specs/patterns/metric_pattern.py +++ b/metricflow-semantics/metricflow_semantics/specs/patterns/metric_pattern.py @@ -6,8 +6,8 @@ from dbt_semantic_interfaces.references import MetricReference from typing_extensions import override -from metricflow.specs.patterns.spec_pattern import SpecPattern -from metricflow.specs.specs import ( +from metricflow_semantics.specs.patterns.spec_pattern import SpecPattern +from metricflow_semantics.specs.spec_classes import ( InstanceSpec, InstanceSpecSet, MetricSpec, diff --git a/metricflow/specs/patterns/metric_time_pattern.py b/metricflow-semantics/metricflow_semantics/specs/patterns/metric_time_pattern.py similarity index 88% rename from metricflow/specs/patterns/metric_time_pattern.py rename to metricflow-semantics/metricflow_semantics/specs/patterns/metric_time_pattern.py index 85f7dca0fc..ff0337de10 100644 --- a/metricflow/specs/patterns/metric_time_pattern.py +++ b/metricflow-semantics/metricflow_semantics/specs/patterns/metric_time_pattern.py @@ -5,8 +5,8 @@ from dbt_semantic_interfaces.naming.keywords import METRIC_TIME_ELEMENT_NAME from typing_extensions import override -from metricflow.specs.patterns.spec_pattern import SpecPattern -from metricflow.specs.specs import ( +from metricflow_semantics.specs.patterns.spec_pattern import SpecPattern +from metricflow_semantics.specs.spec_classes import ( InstanceSpec, InstanceSpecSet, LinkableSpecSet, diff --git a/metricflow/specs/patterns/none_date_part.py b/metricflow-semantics/metricflow_semantics/specs/patterns/none_date_part.py similarity index 88% rename from metricflow/specs/patterns/none_date_part.py rename to metricflow-semantics/metricflow_semantics/specs/patterns/none_date_part.py index 539f57de84..5a30db5cff 100644 --- a/metricflow/specs/patterns/none_date_part.py +++ b/metricflow-semantics/metricflow_semantics/specs/patterns/none_date_part.py @@ -4,8 +4,8 @@ from typing_extensions import override -from metricflow.specs.patterns.spec_pattern import SpecPattern -from metricflow.specs.specs import ( +from metricflow_semantics.specs.patterns.spec_pattern import SpecPattern +from metricflow_semantics.specs.spec_classes import ( InstanceSpec, InstanceSpecSet, LinkableInstanceSpec, diff --git a/metricflow/specs/patterns/spec_pattern.py b/metricflow-semantics/metricflow_semantics/specs/patterns/spec_pattern.py similarity index 92% rename from metricflow/specs/patterns/spec_pattern.py rename to metricflow-semantics/metricflow_semantics/specs/patterns/spec_pattern.py index 3315b81251..7a9071f08b 100644 --- a/metricflow/specs/patterns/spec_pattern.py +++ b/metricflow-semantics/metricflow_semantics/specs/patterns/spec_pattern.py @@ -4,7 +4,7 @@ from typing import TYPE_CHECKING, Sequence if TYPE_CHECKING: - from metricflow.specs.specs import InstanceSpec + from metricflow_semantics.specs.spec_classes import InstanceSpec class SpecPattern(ABC): diff --git a/metricflow/specs/patterns/typed_patterns.py b/metricflow-semantics/metricflow_semantics/specs/patterns/typed_patterns.py similarity index 97% rename from metricflow/specs/patterns/typed_patterns.py rename to metricflow-semantics/metricflow_semantics/specs/patterns/typed_patterns.py index e59dd1d6f6..cec6ef7859 100644 --- a/metricflow/specs/patterns/typed_patterns.py +++ b/metricflow-semantics/metricflow_semantics/specs/patterns/typed_patterns.py @@ -12,12 +12,12 @@ from dbt_semantic_interfaces.references import EntityReference from typing_extensions import override -from metricflow.specs.patterns.entity_link_pattern import ( +from metricflow_semantics.specs.patterns.entity_link_pattern import ( EntityLinkPattern, EntityLinkPatternParameterSet, ParameterSetField, ) -from metricflow.specs.specs import InstanceSpec, InstanceSpecSet, LinkableInstanceSpec +from metricflow_semantics.specs.spec_classes import InstanceSpec, InstanceSpecSet, LinkableInstanceSpec @dataclass(frozen=True) diff --git a/metricflow/specs/python_object.py b/metricflow-semantics/metricflow_semantics/specs/python_object.py similarity index 91% rename from metricflow/specs/python_object.py rename to metricflow-semantics/metricflow_semantics/specs/python_object.py index 9dc916daea..78d4b85bd2 100644 --- a/metricflow/specs/python_object.py +++ b/metricflow-semantics/metricflow_semantics/specs/python_object.py @@ -5,10 +5,10 @@ from dbt_semantic_interfaces.call_parameter_sets import ParseWhereFilterException from dbt_semantic_interfaces.implementations.filters.where_filter import PydanticWhereFilter -from metricflow.naming.linkable_spec_name import StructuredLinkableSpecName -from metricflow.protocols.query_parameter import GroupByParameter -from metricflow.query.query_exceptions import InvalidQueryException -from metricflow.specs.query_param_implementations import DimensionOrEntityParameter, TimeDimensionParameter +from metricflow_semantics.naming.linkable_spec_name import StructuredLinkableSpecName +from metricflow_semantics.protocols.query_parameter import GroupByParameter +from metricflow_semantics.query.query_exceptions import InvalidQueryException +from metricflow_semantics.specs.query_param_implementations import DimensionOrEntityParameter, TimeDimensionParameter def parse_object_builder_naming_scheme(group_by_item_name: str) -> GroupByParameter: diff --git a/metricflow/specs/query_param_implementations.py b/metricflow-semantics/metricflow_semantics/specs/query_param_implementations.py similarity index 89% rename from metricflow/specs/query_param_implementations.py rename to metricflow-semantics/metricflow_semantics/specs/query_param_implementations.py index 7af21980f1..697b65db8f 100644 --- a/metricflow/specs/query_param_implementations.py +++ b/metricflow-semantics/metricflow_semantics/specs/query_param_implementations.py @@ -9,21 +9,21 @@ from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity from typing_extensions import override -from metricflow.naming.linkable_spec_name import StructuredLinkableSpecName -from metricflow.naming.metric_scheme import MetricNamingScheme -from metricflow.naming.object_builder_scheme import ObjectBuilderNamingScheme -from metricflow.protocols.query_parameter import ( +from metricflow_semantics.naming.linkable_spec_name import StructuredLinkableSpecName +from metricflow_semantics.naming.metric_scheme import MetricNamingScheme +from metricflow_semantics.naming.object_builder_scheme import ObjectBuilderNamingScheme +from metricflow_semantics.protocols.query_parameter import ( DimensionOrEntityQueryParameter, InputOrderByParameter, TimeDimensionQueryParameter, ) -from metricflow.protocols.query_parameter import SavedQueryParameter as SavedQueryParameterProtocol -from metricflow.query.resolver_inputs.query_resolver_inputs import ( +from metricflow_semantics.protocols.query_parameter import SavedQueryParameter as SavedQueryParameterProtocol +from metricflow_semantics.query.resolver_inputs.query_resolver_inputs import ( ResolverInputForGroupByItem, ResolverInputForMetric, ResolverInputForOrderByItem, ) -from metricflow.specs.patterns.entity_link_pattern import ( +from metricflow_semantics.specs.patterns.entity_link_pattern import ( EntityLinkPattern, EntityLinkPatternParameterSet, ParameterSetField, diff --git a/metricflow/specs/rendered_spec_tracker.py b/metricflow-semantics/metricflow_semantics/specs/rendered_spec_tracker.py similarity index 92% rename from metricflow/specs/rendered_spec_tracker.py rename to metricflow-semantics/metricflow_semantics/specs/rendered_spec_tracker.py index 8582394149..cafe386503 100644 --- a/metricflow/specs/rendered_spec_tracker.py +++ b/metricflow-semantics/metricflow_semantics/specs/rendered_spec_tracker.py @@ -2,7 +2,7 @@ from typing import List, Sequence -from metricflow.specs.specs import LinkableInstanceSpec +from metricflow_semantics.specs.spec_classes import LinkableInstanceSpec class RenderedSpecTracker: diff --git a/metricflow/specs/specs.py b/metricflow-semantics/metricflow_semantics/specs/spec_classes.py similarity index 97% rename from metricflow/specs/specs.py rename to metricflow-semantics/metricflow_semantics/specs/spec_classes.py index 41ee7e6f38..573d48c6cb 100644 --- a/metricflow/specs/specs.py +++ b/metricflow-semantics/metricflow_semantics/specs/spec_classes.py @@ -35,19 +35,21 @@ from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity from typing_extensions import override -from metricflow.aggregation_properties import AggregationState -from metricflow.collection_helpers.merger import Mergeable -from metricflow.filters.time_constraint import TimeRangeConstraint -from metricflow.naming.linkable_spec_name import StructuredLinkableSpecName -from metricflow.query.group_by_item.filter_spec_resolution.filter_spec_lookup import FilterSpecResolutionLookUp -from metricflow.sql.sql_bind_parameters import SqlBindParameters -from metricflow.sql.sql_column_type import SqlColumnType -from metricflow.sql.sql_plan import SqlJoinType -from metricflow.visitor import VisitorOutputT +from metricflow_semantics.aggregation_properties import AggregationState +from metricflow_semantics.collection_helpers.merger import Mergeable +from metricflow_semantics.filters.time_constraint import TimeRangeConstraint +from metricflow_semantics.naming.linkable_spec_name import StructuredLinkableSpecName +from metricflow_semantics.query.group_by_item.filter_spec_resolution.filter_spec_lookup import ( + FilterSpecResolutionLookUp, +) +from metricflow_semantics.sql.sql_bind_parameters import SqlBindParameters +from metricflow_semantics.sql.sql_column_type import SqlColumnType +from metricflow_semantics.sql.sql_join_type import SqlJoinType +from metricflow_semantics.visitor import VisitorOutputT if TYPE_CHECKING: - from metricflow.model.semantics.metric_lookup import MetricLookup - from metricflow.model.semantics.semantic_model_lookup import SemanticModelLookup + from metricflow_semantics.model.semantics.metric_lookup import MetricLookup + from metricflow_semantics.model.semantics.semantic_model_lookup import SemanticModelLookup def hash_items(items: Sequence[SqlColumnType]) -> str: diff --git a/metricflow/specs/spec_set_transforms.py b/metricflow-semantics/metricflow_semantics/specs/spec_set_transforms.py similarity index 87% rename from metricflow/specs/spec_set_transforms.py rename to metricflow-semantics/metricflow_semantics/specs/spec_set_transforms.py index fffebd0a45..991cacafc2 100644 --- a/metricflow/specs/spec_set_transforms.py +++ b/metricflow-semantics/metricflow_semantics/specs/spec_set_transforms.py @@ -2,7 +2,7 @@ from typing import Set -from metricflow.specs.specs import InstanceSpecSet, InstanceSpecSetTransform +from metricflow_semantics.specs.spec_classes import InstanceSpecSet, InstanceSpecSetTransform class ToElementNameSet(InstanceSpecSetTransform[Set[str]]): diff --git a/metricflow/specs/where_filter_dimension.py b/metricflow-semantics/metricflow_semantics/specs/where_filter_dimension.py similarity index 93% rename from metricflow/specs/where_filter_dimension.py rename to metricflow-semantics/metricflow_semantics/specs/where_filter_dimension.py index 663c10f871..ca2dc8d3cb 100644 --- a/metricflow/specs/where_filter_dimension.py +++ b/metricflow-semantics/metricflow_semantics/specs/where_filter_dimension.py @@ -18,14 +18,14 @@ from dbt_semantic_interfaces.type_enums.date_part import DatePart from typing_extensions import override -from metricflow.errors.errors import InvalidQuerySyntax -from metricflow.query.group_by_item.filter_spec_resolution.filter_location import WhereFilterLocation -from metricflow.query.group_by_item.filter_spec_resolution.filter_spec_lookup import ( +from metricflow_semantics.errors.error_classes import InvalidQuerySyntax +from metricflow_semantics.query.group_by_item.filter_spec_resolution.filter_location import WhereFilterLocation +from metricflow_semantics.query.group_by_item.filter_spec_resolution.filter_spec_lookup import ( FilterSpecResolutionLookUp, ResolvedSpecLookUpKey, ) -from metricflow.specs.column_assoc import ColumnAssociationResolver -from metricflow.specs.rendered_spec_tracker import RenderedSpecTracker +from metricflow_semantics.specs.column_assoc import ColumnAssociationResolver +from metricflow_semantics.specs.rendered_spec_tracker import RenderedSpecTracker logger = logging.getLogger(__name__) diff --git a/metricflow/specs/where_filter_entity.py b/metricflow-semantics/metricflow_semantics/specs/where_filter_entity.py similarity index 90% rename from metricflow/specs/where_filter_entity.py rename to metricflow-semantics/metricflow_semantics/specs/where_filter_entity.py index 507b4ef590..c73c9ffbff 100644 --- a/metricflow/specs/where_filter_entity.py +++ b/metricflow-semantics/metricflow_semantics/specs/where_filter_entity.py @@ -13,14 +13,14 @@ from dbt_semantic_interfaces.type_enums.date_part import DatePart from typing_extensions import override -from metricflow.errors.errors import InvalidQuerySyntax -from metricflow.query.group_by_item.filter_spec_resolution.filter_location import WhereFilterLocation -from metricflow.query.group_by_item.filter_spec_resolution.filter_spec_lookup import ( +from metricflow_semantics.errors.error_classes import InvalidQuerySyntax +from metricflow_semantics.query.group_by_item.filter_spec_resolution.filter_location import WhereFilterLocation +from metricflow_semantics.query.group_by_item.filter_spec_resolution.filter_spec_lookup import ( FilterSpecResolutionLookUp, ResolvedSpecLookUpKey, ) -from metricflow.specs.column_assoc import ColumnAssociationResolver -from metricflow.specs.rendered_spec_tracker import RenderedSpecTracker +from metricflow_semantics.specs.column_assoc import ColumnAssociationResolver +from metricflow_semantics.specs.rendered_spec_tracker import RenderedSpecTracker class WhereFilterEntity(ProtocolHint[QueryInterfaceEntity]): diff --git a/metricflow/specs/where_filter_metric.py b/metricflow-semantics/metricflow_semantics/specs/where_filter_metric.py similarity index 90% rename from metricflow/specs/where_filter_metric.py rename to metricflow-semantics/metricflow_semantics/specs/where_filter_metric.py index b1e9307ef0..483fa36b39 100644 --- a/metricflow/specs/where_filter_metric.py +++ b/metricflow-semantics/metricflow_semantics/specs/where_filter_metric.py @@ -10,14 +10,14 @@ from dbt_semantic_interfaces.references import EntityReference, LinkableElementReference, MetricReference from typing_extensions import override -from metricflow.errors.errors import InvalidQuerySyntax -from metricflow.query.group_by_item.filter_spec_resolution.filter_location import WhereFilterLocation -from metricflow.query.group_by_item.filter_spec_resolution.filter_spec_lookup import ( +from metricflow_semantics.errors.error_classes import InvalidQuerySyntax +from metricflow_semantics.query.group_by_item.filter_spec_resolution.filter_location import WhereFilterLocation +from metricflow_semantics.query.group_by_item.filter_spec_resolution.filter_spec_lookup import ( FilterSpecResolutionLookUp, ResolvedSpecLookUpKey, ) -from metricflow.specs.column_assoc import ColumnAssociationResolver -from metricflow.specs.rendered_spec_tracker import RenderedSpecTracker +from metricflow_semantics.specs.column_assoc import ColumnAssociationResolver +from metricflow_semantics.specs.rendered_spec_tracker import RenderedSpecTracker class WhereFilterMetric(ProtocolHint[QueryInterfaceMetric]): diff --git a/metricflow/specs/where_filter_time_dimension.py b/metricflow-semantics/metricflow_semantics/specs/where_filter_time_dimension.py similarity index 88% rename from metricflow/specs/where_filter_time_dimension.py rename to metricflow-semantics/metricflow_semantics/specs/where_filter_time_dimension.py index e08ab6ac5f..03452936c1 100644 --- a/metricflow/specs/where_filter_time_dimension.py +++ b/metricflow-semantics/metricflow_semantics/specs/where_filter_time_dimension.py @@ -15,15 +15,15 @@ from dbt_semantic_interfaces.type_enums.date_part import DatePart from typing_extensions import override -from metricflow.errors.errors import InvalidQuerySyntax -from metricflow.query.group_by_item.filter_spec_resolution.filter_location import WhereFilterLocation -from metricflow.query.group_by_item.filter_spec_resolution.filter_spec_lookup import ( +from metricflow_semantics.errors.error_classes import InvalidQuerySyntax +from metricflow_semantics.query.group_by_item.filter_spec_resolution.filter_location import WhereFilterLocation +from metricflow_semantics.query.group_by_item.filter_spec_resolution.filter_spec_lookup import ( FilterSpecResolutionLookUp, ResolvedSpecLookUpKey, ) -from metricflow.specs.column_assoc import ColumnAssociationResolver -from metricflow.specs.rendered_spec_tracker import RenderedSpecTracker -from metricflow.specs.where_filter_dimension import WhereFilterDimension +from metricflow_semantics.specs.column_assoc import ColumnAssociationResolver +from metricflow_semantics.specs.rendered_spec_tracker import RenderedSpecTracker +from metricflow_semantics.specs.where_filter_dimension import WhereFilterDimension class WhereFilterTimeDimension(WhereFilterDimension): diff --git a/metricflow/specs/where_filter_transform.py b/metricflow-semantics/metricflow_semantics/specs/where_filter_transform.py similarity index 82% rename from metricflow/specs/where_filter_transform.py rename to metricflow-semantics/metricflow_semantics/specs/where_filter_transform.py index 0ecb5bd6a9..d56676d912 100644 --- a/metricflow/specs/where_filter_transform.py +++ b/metricflow-semantics/metricflow_semantics/specs/where_filter_transform.py @@ -7,16 +7,18 @@ from dbt_semantic_interfaces.implementations.filters.where_filter import PydanticWhereFilterIntersection from dbt_semantic_interfaces.protocols import WhereFilter, WhereFilterIntersection -from metricflow.query.group_by_item.filter_spec_resolution.filter_location import WhereFilterLocation -from metricflow.query.group_by_item.filter_spec_resolution.filter_spec_lookup import FilterSpecResolutionLookUp -from metricflow.specs.column_assoc import ColumnAssociationResolver -from metricflow.specs.rendered_spec_tracker import RenderedSpecTracker -from metricflow.specs.specs import LinkableSpecSet, WhereFilterSpec -from metricflow.specs.where_filter_dimension import WhereFilterDimensionFactory -from metricflow.specs.where_filter_entity import WhereFilterEntityFactory -from metricflow.specs.where_filter_metric import WhereFilterMetricFactory -from metricflow.specs.where_filter_time_dimension import WhereFilterTimeDimensionFactory -from metricflow.sql.sql_bind_parameters import SqlBindParameters +from metricflow_semantics.query.group_by_item.filter_spec_resolution.filter_location import WhereFilterLocation +from metricflow_semantics.query.group_by_item.filter_spec_resolution.filter_spec_lookup import ( + FilterSpecResolutionLookUp, +) +from metricflow_semantics.specs.column_assoc import ColumnAssociationResolver +from metricflow_semantics.specs.rendered_spec_tracker import RenderedSpecTracker +from metricflow_semantics.specs.spec_classes import LinkableSpecSet, WhereFilterSpec +from metricflow_semantics.specs.where_filter_dimension import WhereFilterDimensionFactory +from metricflow_semantics.specs.where_filter_entity import WhereFilterEntityFactory +from metricflow_semantics.specs.where_filter_metric import WhereFilterMetricFactory +from metricflow_semantics.specs.where_filter_time_dimension import WhereFilterTimeDimensionFactory +from metricflow_semantics.sql.sql_bind_parameters import SqlBindParameters logger = logging.getLogger(__name__) diff --git a/tests/dataflow/__init__.py b/metricflow-semantics/metricflow_semantics/sql/__init__.py similarity index 100% rename from tests/dataflow/__init__.py rename to metricflow-semantics/metricflow_semantics/sql/__init__.py diff --git a/metricflow/sql/sql_bind_parameters.py b/metricflow-semantics/metricflow_semantics/sql/sql_bind_parameters.py similarity index 97% rename from metricflow/sql/sql_bind_parameters.py rename to metricflow-semantics/metricflow_semantics/sql/sql_bind_parameters.py index 9bd39c9788..05b7ee7e2d 100644 --- a/metricflow/sql/sql_bind_parameters.py +++ b/metricflow-semantics/metricflow_semantics/sql/sql_bind_parameters.py @@ -7,8 +7,8 @@ from dbt_semantic_interfaces.dataclass_serialization import SerializableDataclass -from metricflow.assert_one_arg import assert_exactly_one_arg_set -from metricflow.sql.sql_column_type import SqlColumnType +from metricflow_semantics.assert_one_arg import assert_exactly_one_arg_set +from metricflow_semantics.sql.sql_column_type import SqlColumnType @dataclass(frozen=True) diff --git a/metricflow/sql/sql_column_type.py b/metricflow-semantics/metricflow_semantics/sql/sql_column_type.py similarity index 100% rename from metricflow/sql/sql_column_type.py rename to metricflow-semantics/metricflow_semantics/sql/sql_column_type.py diff --git a/metricflow-semantics/metricflow_semantics/sql/sql_join_type.py b/metricflow-semantics/metricflow_semantics/sql/sql_join_type.py new file mode 100644 index 0000000000..b547994484 --- /dev/null +++ b/metricflow-semantics/metricflow_semantics/sql/sql_join_type.py @@ -0,0 +1,18 @@ +from __future__ import annotations + +from enum import Enum + + +class SqlJoinType(Enum): + """Enumerates the different kinds of SQL joins. + + The value is the SQL string to be used when rendering the join. + """ + + LEFT_OUTER = "LEFT OUTER JOIN" + FULL_OUTER = "FULL OUTER JOIN" + INNER = "INNER JOIN" + CROSS_JOIN = "CROSS JOIN" + + def __repr__(self) -> str: # noqa: D105 + return f"{self.__class__.__name__}.{self.name}" diff --git a/tests/dataflow/builder/__init__.py b/metricflow-semantics/metricflow_semantics/test_helpers/__init__.py similarity index 100% rename from tests/dataflow/builder/__init__.py rename to metricflow-semantics/metricflow_semantics/test_helpers/__init__.py diff --git a/metricflow-semantics/metricflow_semantics/test_helpers/config_helpers.py b/metricflow-semantics/metricflow_semantics/test_helpers/config_helpers.py new file mode 100644 index 0000000000..3e2852badb --- /dev/null +++ b/metricflow-semantics/metricflow_semantics/test_helpers/config_helpers.py @@ -0,0 +1,47 @@ +from __future__ import annotations + +import pathlib +import traceback +from dataclasses import dataclass + +from metricflow_semantics.test_helpers.snapshot_helpers import SnapshotConfiguration + + +@dataclass(frozen=True) +class MetricFlowTestConfiguration(SnapshotConfiguration): + """State that is shared between tests during a testing session.""" + + sql_engine_url: str + sql_engine_password: str + # Where MF system tables should be stored. + mf_system_schema: str + # Where tables for test data sets should be stored. + mf_source_schema: str + + # Whether to display the graph associated with a test session in a browser window. + display_graphs: bool + + # The source schema contains tables that are used for running tests. If this is set, a source schema in the SQL + # is created and persisted between runs. The source schema name includes a hash of the tables that should be in + # the schema, so + use_persistent_source_schema: bool + + +class DirectoryPathAnchor: + """Defines a directory inside the repo. + + Using this object allows you to avoid using hard-coded paths and instead use objects that will be handled properly + during refactoring. + """ + + def __init__(self) -> None: + """Initializer. + + The directory associated this anchor is where it's initialized. + """ + stack = traceback.extract_stack() + self._directory = pathlib.Path(stack[-2].filename).parent + + @property + def directory(self) -> pathlib.Path: # noqa: D102 + return self._directory diff --git a/tests/fixtures/id_fixtures.py b/metricflow-semantics/metricflow_semantics/test_helpers/id_helpers.py similarity index 78% rename from tests/fixtures/id_fixtures.py rename to metricflow-semantics/metricflow_semantics/test_helpers/id_helpers.py index 0e0f6209eb..083cbb1a1d 100644 --- a/tests/fixtures/id_fixtures.py +++ b/metricflow-semantics/metricflow_semantics/test_helpers/id_helpers.py @@ -5,9 +5,27 @@ from typing import Generator from unittest.mock import patch -import pytest +from metricflow_semantics.dag.sequential_id import SequentialIdGenerator -from metricflow.dag.sequential_id import SequentialIdGenerator + +@contextmanager +def patch_id_generators_helper(start_value: int) -> Generator[None, None, None]: + """Replace ID generators in IdGeneratorRegistry with one that has the given start value. + + TODO: This method will be modified in a later PR. + """ + # Create patch context managers for all ID generators in the registry with introspection magic. + patch_context_managers = [ + patch.object(SequentialIdGenerator, "_prefix_to_next_value", {}), + patch.object(SequentialIdGenerator, "_default_start_value", start_value), + ] + + # Enter the patch context for the patches above. + with ExitStack() as stack: + for patch_context_manager in patch_context_managers: + stack.enter_context(patch_context_manager) # type: ignore + # This will un-patch when done with the test. + yield None @dataclass(frozen=True) @@ -34,34 +52,3 @@ def for_block(block_index: int, block_size: int = 2000, first_block_offset: int if not first_block_offset >= 0: raise RuntimeError(f"first_block_offset should be >= 0. Got: {first_block_offset}") return IdNumberSpace(first_block_offset + block_size * block_index) - - -@pytest.fixture(autouse=True, scope="function") -def patch_id_generators() -> Generator[None, None, None]: - """Patch ID generators with a new one to get repeatability in plan outputs before every test. - - Plan outputs contain IDs, so if the IDs are not consistent from run to run, there will be diffs in the actual vs. - expected outputs during a test. - """ - with patch_id_generators_helper(start_value=IdNumberSpace.for_test_start().start_value): - yield None - - -@contextmanager -def patch_id_generators_helper(start_value: int) -> Generator[None, None, None]: - """Replace ID generators in IdGeneratorRegistry with one that has the given start value. - - TODO: This method will be modified in a later PR. - """ - # Create patch context managers for all ID generators in the registry with introspection magic. - patch_context_managers = [ - patch.object(SequentialIdGenerator, "_prefix_to_next_value", {}), - patch.object(SequentialIdGenerator, "_default_start_value", start_value), - ] - - # Enter the patch context for the patches above. - with ExitStack() as stack: - for patch_context_manager in patch_context_managers: - stack.enter_context(patch_context_manager) # type: ignore - # This will un-patch when done with the test. - yield None diff --git a/metricflow-semantics/metricflow_semantics/test_helpers/manifest_helpers.py b/metricflow-semantics/metricflow_semantics/test_helpers/manifest_helpers.py new file mode 100644 index 0000000000..f7e3a8ae13 --- /dev/null +++ b/metricflow-semantics/metricflow_semantics/test_helpers/manifest_helpers.py @@ -0,0 +1,34 @@ +from __future__ import annotations + +from typing import Dict, Optional + +from dbt_semantic_interfaces.implementations.semantic_manifest import PydanticSemanticManifest +from dbt_semantic_interfaces.parsing.dir_to_model import ( + SemanticManifestBuildResult, + parse_directory_of_yaml_files_to_semantic_manifest, +) +from dbt_semantic_interfaces.validations.semantic_manifest_validator import SemanticManifestValidator + +from metricflow_semantics.test_helpers.semantic_manifest_yamls import SEMANTIC_MANIFEST_YAMLS_PATH_ANCHOR + + +def load_semantic_manifest( + relative_manifest_path: str, + template_mapping: Optional[Dict[str, str]] = None, +) -> SemanticManifestBuildResult: + """Reads the manifest YAMLs from the standard location, applies transformations, runs validations.""" + yaml_file_directory = SEMANTIC_MANIFEST_YAMLS_PATH_ANCHOR.directory.joinpath(relative_manifest_path) + build_result = parse_directory_of_yaml_files_to_semantic_manifest( + str(yaml_file_directory), template_mapping=template_mapping + ) + validator = SemanticManifestValidator[PydanticSemanticManifest]() + validator.checked_validations(build_result.semantic_manifest) + return build_result + + +def load_named_manifest(template_mapping: Dict[str, str], manifest_name: str) -> PydanticSemanticManifest: # noqa: D103 + try: + build_result = load_semantic_manifest(manifest_name, template_mapping) + return build_result.semantic_manifest + except Exception as e: + raise RuntimeError(f"Error while loading semantic manifest: {manifest_name}") from e diff --git a/metricflow-semantics/metricflow_semantics/test_helpers/metric_time_dimension.py b/metricflow-semantics/metricflow_semantics/test_helpers/metric_time_dimension.py new file mode 100644 index 0000000000..93a2928b8c --- /dev/null +++ b/metricflow-semantics/metricflow_semantics/test_helpers/metric_time_dimension.py @@ -0,0 +1,26 @@ +from __future__ import annotations + +from dbt_semantic_interfaces.references import TimeDimensionReference +from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity +from dbt_semantic_interfaces.validations.unique_valid_name import MetricFlowReservedKeywords + +from metricflow_semantics.specs.spec_classes import TimeDimensionSpec + +# Shortcuts for referring to the metric time dimension. +MTD = MetricFlowReservedKeywords.METRIC_TIME.value +MTD_REFERENCE = TimeDimensionReference(element_name=MetricFlowReservedKeywords.METRIC_TIME.value) +MTD_SPEC_DAY = TimeDimensionSpec( + element_name=MetricFlowReservedKeywords.METRIC_TIME.value, entity_links=(), time_granularity=TimeGranularity.DAY +) +MTD_SPEC_WEEK = TimeDimensionSpec( + element_name=MetricFlowReservedKeywords.METRIC_TIME.value, entity_links=(), time_granularity=TimeGranularity.WEEK +) +MTD_SPEC_MONTH = TimeDimensionSpec( + element_name=MetricFlowReservedKeywords.METRIC_TIME.value, entity_links=(), time_granularity=TimeGranularity.MONTH +) +MTD_SPEC_QUARTER = TimeDimensionSpec( + element_name=MetricFlowReservedKeywords.METRIC_TIME.value, entity_links=(), time_granularity=TimeGranularity.QUARTER +) +MTD_SPEC_YEAR = TimeDimensionSpec( + element_name=MetricFlowReservedKeywords.METRIC_TIME.value, entity_links=(), time_granularity=TimeGranularity.YEAR +) diff --git a/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/__init__.py b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/__init__.py new file mode 100644 index 0000000000..6761c31c38 --- /dev/null +++ b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/__init__.py @@ -0,0 +1,5 @@ +from __future__ import annotations + +from metricflow_semantics.test_helpers.config_helpers import DirectoryPathAnchor + +SEMANTIC_MANIFEST_YAMLS_PATH_ANCHOR = DirectoryPathAnchor() diff --git a/tests/fixtures/semantic_manifest_yamls/ambiguous_resolution_manifest/metrics.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/ambiguous_resolution_manifest/metrics.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/ambiguous_resolution_manifest/metrics.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/ambiguous_resolution_manifest/metrics.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/ambiguous_resolution_manifest/project_configuration.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/ambiguous_resolution_manifest/project_configuration.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/ambiguous_resolution_manifest/project_configuration.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/ambiguous_resolution_manifest/project_configuration.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/ambiguous_resolution_manifest/semantic_models/monthly_measures_source.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/ambiguous_resolution_manifest/semantic_models/monthly_measures_source.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/ambiguous_resolution_manifest/semantic_models/monthly_measures_source.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/ambiguous_resolution_manifest/semantic_models/monthly_measures_source.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/ambiguous_resolution_manifest/semantic_models/yearly_measures_source.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/ambiguous_resolution_manifest/semantic_models/yearly_measures_source.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/ambiguous_resolution_manifest/semantic_models/yearly_measures_source.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/ambiguous_resolution_manifest/semantic_models/yearly_measures_source.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/config_linter_manifest/multiple_semantic_models_without_divider.yml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/config_linter_manifest/multiple_semantic_models_without_divider.yml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/config_linter_manifest/multiple_semantic_models_without_divider.yml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/config_linter_manifest/multiple_semantic_models_without_divider.yml diff --git a/tests/fixtures/semantic_manifest_yamls/config_linter_manifest/project_configuration.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/config_linter_manifest/project_configuration.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/config_linter_manifest/project_configuration.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/config_linter_manifest/project_configuration.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/cyclic_join_manifest/listings_latest.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/cyclic_join_manifest/listings_latest.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/cyclic_join_manifest/listings_latest.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/cyclic_join_manifest/listings_latest.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/cyclic_join_manifest/listings_latest_cyclic.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/cyclic_join_manifest/listings_latest_cyclic.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/cyclic_join_manifest/listings_latest_cyclic.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/cyclic_join_manifest/listings_latest_cyclic.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/cyclic_join_manifest/project_configuration.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/cyclic_join_manifest/project_configuration.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/cyclic_join_manifest/project_configuration.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/cyclic_join_manifest/project_configuration.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/data_warehouse_validation_manifest/project_configuration.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/data_warehouse_validation_manifest/project_configuration.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/data_warehouse_validation_manifest/project_configuration.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/data_warehouse_validation_manifest/project_configuration.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/data_warehouse_validation_manifest/semantic_models/semantic_model1.yml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/data_warehouse_validation_manifest/semantic_models/semantic_model1.yml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/data_warehouse_validation_manifest/semantic_models/semantic_model1.yml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/data_warehouse_validation_manifest/semantic_models/semantic_model1.yml diff --git a/tests/fixtures/semantic_manifest_yamls/extended_date_manifest/metrics/bookings_cumulative.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/extended_date_manifest/metrics/bookings_cumulative.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/extended_date_manifest/metrics/bookings_cumulative.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/extended_date_manifest/metrics/bookings_cumulative.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/extended_date_manifest/metrics/bookings_last_month.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/extended_date_manifest/metrics/bookings_last_month.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/extended_date_manifest/metrics/bookings_last_month.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/extended_date_manifest/metrics/bookings_last_month.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/extended_date_manifest/metrics/bookings_monthly_cumulative.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/extended_date_manifest/metrics/bookings_monthly_cumulative.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/extended_date_manifest/metrics/bookings_monthly_cumulative.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/extended_date_manifest/metrics/bookings_monthly_cumulative.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/extended_date_manifest/project_configuration.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/extended_date_manifest/project_configuration.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/extended_date_manifest/project_configuration.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/extended_date_manifest/project_configuration.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/extended_date_manifest/semantic_models/bookings_monthly_source.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/extended_date_manifest/semantic_models/bookings_monthly_source.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/extended_date_manifest/semantic_models/bookings_monthly_source.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/extended_date_manifest/semantic_models/bookings_monthly_source.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/extended_date_manifest/semantic_models/extended_bookings_source.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/extended_date_manifest/semantic_models/extended_bookings_source.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/extended_date_manifest/semantic_models/extended_bookings_source.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/extended_date_manifest/semantic_models/extended_bookings_source.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/extended_date_manifest/semantic_models/listings_extended_source.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/extended_date_manifest/semantic_models/listings_extended_source.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/extended_date_manifest/semantic_models/listings_extended_source.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/extended_date_manifest/semantic_models/listings_extended_source.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/join_types_manifest/bookings_source.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/join_types_manifest/bookings_source.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/join_types_manifest/bookings_source.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/join_types_manifest/bookings_source.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/join_types_manifest/listings_source.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/join_types_manifest/listings_source.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/join_types_manifest/listings_source.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/join_types_manifest/listings_source.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/join_types_manifest/project_configuration.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/join_types_manifest/project_configuration.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/join_types_manifest/project_configuration.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/join_types_manifest/project_configuration.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/multi_hop_join_manifest/account_month_txns.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/multi_hop_join_manifest/account_month_txns.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/multi_hop_join_manifest/account_month_txns.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/multi_hop_join_manifest/account_month_txns.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/multi_hop_join_manifest/bridge_table.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/multi_hop_join_manifest/bridge_table.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/multi_hop_join_manifest/bridge_table.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/multi_hop_join_manifest/bridge_table.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/multi_hop_join_manifest/customer_other_data.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/multi_hop_join_manifest/customer_other_data.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/multi_hop_join_manifest/customer_other_data.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/multi_hop_join_manifest/customer_other_data.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/multi_hop_join_manifest/customer_table.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/multi_hop_join_manifest/customer_table.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/multi_hop_join_manifest/customer_table.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/multi_hop_join_manifest/customer_table.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/multi_hop_join_manifest/project_configuration.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/multi_hop_join_manifest/project_configuration.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/multi_hop_join_manifest/project_configuration.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/multi_hop_join_manifest/project_configuration.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/multi_hop_join_manifest/third_hop_table.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/multi_hop_join_manifest/third_hop_table.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/multi_hop_join_manifest/third_hop_table.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/multi_hop_join_manifest/third_hop_table.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/non_sm_manifest/bookings_source.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/non_sm_manifest/bookings_source.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/non_sm_manifest/bookings_source.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/non_sm_manifest/bookings_source.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/non_sm_manifest/listings_latest.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/non_sm_manifest/listings_latest.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/non_sm_manifest/listings_latest.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/non_sm_manifest/listings_latest.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/non_sm_manifest/project_configuration.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/non_sm_manifest/project_configuration.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/non_sm_manifest/project_configuration.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/non_sm_manifest/project_configuration.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/partitioned_multi_hop_join_manifest/account_month_txns.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/partitioned_multi_hop_join_manifest/account_month_txns.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/partitioned_multi_hop_join_manifest/account_month_txns.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/partitioned_multi_hop_join_manifest/account_month_txns.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/partitioned_multi_hop_join_manifest/bridge_table.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/partitioned_multi_hop_join_manifest/bridge_table.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/partitioned_multi_hop_join_manifest/bridge_table.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/partitioned_multi_hop_join_manifest/bridge_table.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/partitioned_multi_hop_join_manifest/customer_other_data.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/partitioned_multi_hop_join_manifest/customer_other_data.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/partitioned_multi_hop_join_manifest/customer_other_data.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/partitioned_multi_hop_join_manifest/customer_other_data.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/partitioned_multi_hop_join_manifest/customer_table.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/partitioned_multi_hop_join_manifest/customer_table.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/partitioned_multi_hop_join_manifest/customer_table.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/partitioned_multi_hop_join_manifest/customer_table.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/partitioned_multi_hop_join_manifest/project_configuration.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/partitioned_multi_hop_join_manifest/project_configuration.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/partitioned_multi_hop_join_manifest/project_configuration.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/partitioned_multi_hop_join_manifest/project_configuration.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/partitioned_multi_hop_join_manifest/third_hop_table.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/partitioned_multi_hop_join_manifest/third_hop_table.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/partitioned_multi_hop_join_manifest/third_hop_table.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/partitioned_multi_hop_join_manifest/third_hop_table.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/scd_manifest/project_configuration.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/scd_manifest/project_configuration.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/scd_manifest/project_configuration.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/scd_manifest/project_configuration.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/scd_manifest/scd_accounts.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/scd_manifest/scd_accounts.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/scd_manifest/scd_accounts.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/scd_manifest/scd_accounts.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/scd_manifest/scd_bookings.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/scd_manifest/scd_bookings.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/scd_manifest/scd_bookings.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/scd_manifest/scd_bookings.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/scd_manifest/scd_companies.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/scd_manifest/scd_companies.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/scd_manifest/scd_companies.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/scd_manifest/scd_companies.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/scd_manifest/scd_listings.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/scd_manifest/scd_listings.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/scd_manifest/scd_listings.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/scd_manifest/scd_listings.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/scd_manifest/scd_lux_listings.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/scd_manifest/scd_lux_listings.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/scd_manifest/scd_lux_listings.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/scd_manifest/scd_lux_listings.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/scd_manifest/scd_metrics.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/scd_manifest/scd_metrics.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/scd_manifest/scd_metrics.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/scd_manifest/scd_metrics.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/scd_manifest/scd_users.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/scd_manifest/scd_users.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/scd_manifest/scd_users.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/scd_manifest/scd_users.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/shared/project_configuration.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/shared/project_configuration.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/shared/project_configuration.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/shared/project_configuration.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/simple_manifest/metrics.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_manifest/metrics.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/simple_manifest/metrics.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_manifest/metrics.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/simple_manifest/project_configuration.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_manifest/project_configuration.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/simple_manifest/project_configuration.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_manifest/project_configuration.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/simple_manifest/saved_queries.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_manifest/saved_queries.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/simple_manifest/saved_queries.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_manifest/saved_queries.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/simple_manifest/semantic_models/accounts_source.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_manifest/semantic_models/accounts_source.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/simple_manifest/semantic_models/accounts_source.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_manifest/semantic_models/accounts_source.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/simple_manifest/semantic_models/bookings_source.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_manifest/semantic_models/bookings_source.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/simple_manifest/semantic_models/bookings_source.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_manifest/semantic_models/bookings_source.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/simple_manifest/semantic_models/buys_source.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_manifest/semantic_models/buys_source.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/simple_manifest/semantic_models/buys_source.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_manifest/semantic_models/buys_source.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/simple_manifest/semantic_models/companies.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_manifest/semantic_models/companies.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/simple_manifest/semantic_models/companies.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_manifest/semantic_models/companies.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/simple_manifest/semantic_models/id_verifications.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_manifest/semantic_models/id_verifications.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/simple_manifest/semantic_models/id_verifications.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_manifest/semantic_models/id_verifications.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/simple_manifest/semantic_models/listings_latest.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_manifest/semantic_models/listings_latest.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/simple_manifest/semantic_models/listings_latest.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_manifest/semantic_models/listings_latest.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/simple_manifest/semantic_models/lux_listing_mapping.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_manifest/semantic_models/lux_listing_mapping.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/simple_manifest/semantic_models/lux_listing_mapping.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_manifest/semantic_models/lux_listing_mapping.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/simple_manifest/semantic_models/revenue.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_manifest/semantic_models/revenue.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/simple_manifest/semantic_models/revenue.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_manifest/semantic_models/revenue.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/simple_manifest/semantic_models/user_sm_source.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_manifest/semantic_models/user_sm_source.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/simple_manifest/semantic_models/user_sm_source.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_manifest/semantic_models/user_sm_source.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/simple_manifest/semantic_models/users_latest.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_manifest/semantic_models/users_latest.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/simple_manifest/semantic_models/users_latest.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_manifest/semantic_models/users_latest.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/simple_manifest/semantic_models/views_source.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_manifest/semantic_models/views_source.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/simple_manifest/semantic_models/views_source.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_manifest/semantic_models/views_source.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/simple_manifest/semantic_models/visits_source.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_manifest/semantic_models/visits_source.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/simple_manifest/semantic_models/visits_source.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_manifest/semantic_models/visits_source.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/simple_multi_hop_join_manifest/all_entity_measure_source.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_multi_hop_join_manifest/all_entity_measure_source.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/simple_multi_hop_join_manifest/all_entity_measure_source.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_multi_hop_join_manifest/all_entity_measure_source.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/simple_multi_hop_join_manifest/entity_0_dimension_source.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_multi_hop_join_manifest/entity_0_dimension_source.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/simple_multi_hop_join_manifest/entity_0_dimension_source.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_multi_hop_join_manifest/entity_0_dimension_source.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/simple_multi_hop_join_manifest/entity_0_measure_source.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_multi_hop_join_manifest/entity_0_measure_source.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/simple_multi_hop_join_manifest/entity_0_measure_source.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_multi_hop_join_manifest/entity_0_measure_source.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/simple_multi_hop_join_manifest/entity_1_and_entity_2_measure_source.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_multi_hop_join_manifest/entity_1_and_entity_2_measure_source.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/simple_multi_hop_join_manifest/entity_1_and_entity_2_measure_source.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_multi_hop_join_manifest/entity_1_and_entity_2_measure_source.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/simple_multi_hop_join_manifest/entity_1_dimension_source.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_multi_hop_join_manifest/entity_1_dimension_source.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/simple_multi_hop_join_manifest/entity_1_dimension_source.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_multi_hop_join_manifest/entity_1_dimension_source.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/simple_multi_hop_join_manifest/entity_1_measure_source.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_multi_hop_join_manifest/entity_1_measure_source.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/simple_multi_hop_join_manifest/entity_1_measure_source.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_multi_hop_join_manifest/entity_1_measure_source.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/simple_multi_hop_join_manifest/entity_1_to_entity_0_mapping_source.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_multi_hop_join_manifest/entity_1_to_entity_0_mapping_source.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/simple_multi_hop_join_manifest/entity_1_to_entity_0_mapping_source.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_multi_hop_join_manifest/entity_1_to_entity_0_mapping_source.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/simple_multi_hop_join_manifest/entity_2_to_entity_0_mapping_source.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_multi_hop_join_manifest/entity_2_to_entity_0_mapping_source.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/simple_multi_hop_join_manifest/entity_2_to_entity_0_mapping_source.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_multi_hop_join_manifest/entity_2_to_entity_0_mapping_source.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/simple_multi_hop_join_manifest/metrics.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_multi_hop_join_manifest/metrics.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/simple_multi_hop_join_manifest/metrics.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_multi_hop_join_manifest/metrics.yaml diff --git a/tests/fixtures/semantic_manifest_yamls/simple_multi_hop_join_manifest/project_configuration.yaml b/metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_multi_hop_join_manifest/project_configuration.yaml similarity index 100% rename from tests/fixtures/semantic_manifest_yamls/simple_multi_hop_join_manifest/project_configuration.yaml rename to metricflow-semantics/metricflow_semantics/test_helpers/semantic_manifest_yamls/simple_multi_hop_join_manifest/project_configuration.yaml diff --git a/tests/snapshot_utils.py b/metricflow-semantics/metricflow_semantics/test_helpers/snapshot_helpers.py similarity index 52% rename from tests/snapshot_utils.py rename to metricflow-semantics/metricflow_semantics/test_helpers/snapshot_helpers.py index d0e230c61d..4354c6eed4 100644 --- a/tests/snapshot_utils.py +++ b/metricflow-semantics/metricflow_semantics/test_helpers/snapshot_helpers.py @@ -1,33 +1,184 @@ from __future__ import annotations +import difflib import logging +import os import re -from typing import Any, Callable, Optional, Tuple, TypeVar +import webbrowser +from dataclasses import dataclass +from typing import Any, Callable, List, Optional, Tuple, TypeVar +import _pytest.fixtures import tabulate from _pytest.fixtures import FixtureRequest -from metricflow.dag.mf_dag import MetricFlowDag -from metricflow.dataflow.dataflow_plan import DataflowPlan -from metricflow.execution.execution_plan import ExecutionPlan -from metricflow.mf_logging.pretty_print import mf_pformat -from metricflow.model.semantics.linkable_element_set import LinkableElementSet -from metricflow.naming.object_builder_scheme import ObjectBuilderNamingScheme -from metricflow.protocols.sql_client import SqlClient, SqlEngine -from metricflow.specs.specs import InstanceSpecSet, LinkableSpecSet -from metricflow.test_helpers import assert_snapshot_text_equal -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration, check_sql_engine_snapshot_marker +from metricflow_semantics.dag.mf_dag import MetricFlowDag +from metricflow_semantics.mf_logging.pretty_print import mf_pformat +from metricflow_semantics.model.semantics.linkable_element_set import LinkableElementSet +from metricflow_semantics.naming.object_builder_scheme import ObjectBuilderNamingScheme +from metricflow_semantics.specs.spec_classes import InstanceSpecSet, LinkableSpecSet logger = logging.getLogger(__name__) +@dataclass(frozen=True) +class SnapshotConfiguration: + """Configuration for handling snapshots in a test session.""" + + # Whether to display the snapshot associated with a test session in a browser window. + display_snapshots: bool + # Whether to overwrite any text files that were generated. + overwrite_snapshots: bool + + +def assert_snapshot_text_equal( + request: _pytest.fixtures.FixtureRequest, + mf_test_configuration: SnapshotConfiguration, + group_id: str, + snapshot_id: str, + snapshot_text: str, + snapshot_file_extension: str, + exclude_line_regex: Optional[str] = None, + incomparable_strings_replacement_function: Optional[Callable[[str], str]] = None, + additional_sub_directories_for_snapshots: Tuple[str, ...] = (), +) -> None: + """Similar to assert_plan_snapshot_text_equal(), but with more controls on how the snapshot paths are generated.""" + file_path = ( + snapshot_path_prefix( + request=request, + snapshot_group=group_id, + snapshot_id=snapshot_id, + additional_sub_directories=additional_sub_directories_for_snapshots, + ) + + snapshot_file_extension + ) + + if incomparable_strings_replacement_function is not None: + snapshot_text = incomparable_strings_replacement_function(snapshot_text) + + # Add a new line at the end of the file so that PRs don't show the "no newline" symbol on Github. + if len(snapshot_text) > 1 and snapshot_text[-1] != "\n": + snapshot_text = snapshot_text + "\n" + + # If we are in overwrite mode, make a new plan: + if mf_test_configuration.overwrite_snapshots: + # Create parent directory for the plan text files. + os.makedirs(os.path.dirname(file_path), exist_ok=True) + with open(file_path, "w") as snapshot_text_file: + snapshot_text_file.write(snapshot_text) + + # Throw an exception if the plan is not there. + if not os.path.exists(file_path): + raise FileNotFoundError( + f"Could not find snapshot file at path {file_path}. Re-run with --overwrite-snapshots and check git status " + "to see what's new." + ) + + if mf_test_configuration.display_snapshots: + if not mf_test_configuration.overwrite_snapshots: + logger.warning(f"Not overwriting snapshots, so displaying existing snapshot at {file_path}") + + if len(request.session.items) > 1: + raise ValueError("Displaying snapshots is only supported when there's a single item in a testing session.") + webbrowser.open("file://" + file_path) + + # Read the existing plan from the file and compare with the actual plan + with open(file_path, "r") as snapshot_text_file: + expected_snapshot_text = snapshot_text_file.read() + + if exclude_line_regex: + # Filter out lines that should be ignored. + expected_snapshot_text = _exclude_lines_matching_regex( + file_contents=expected_snapshot_text, exclude_line_regex=exclude_line_regex + ) + snapshot_text = _exclude_lines_matching_regex( + file_contents=snapshot_text, exclude_line_regex=exclude_line_regex + ) + # pytest should show a detailed diff with "assert actual_modified == expected_modified", but it's not, so doing + # this instead. + if snapshot_text != expected_snapshot_text: + differ = difflib.Differ() + diff = differ.compare(expected_snapshot_text.splitlines(), snapshot_text.splitlines()) + assert False, f"Snapshot from {file_path} does not match. Diff from expected to actual:\n" + "\n".join(diff) + + +def snapshot_path_prefix( + request: _pytest.fixtures.FixtureRequest, + snapshot_group: str, + snapshot_id: str, + additional_sub_directories: Tuple[str, ...] = (), +) -> str: + """Returns a path prefix that can be used to build filenames for files associated with the snapshot. + + The snapshot prefix is generated from the name of the test file, the name of the test, name of the snapshot class, + and the name of the snapshot. + + e.g. + .../snapshots/test_file.py/DataflowPlan/test_name__plan1 + + which can be used to construct paths like + + .../snapshots/test_file.py/DataflowPlan/test_name__plan1.xml + .../snapshots/test_file.py/DataflowPlan/test_name__plan1.svg + """ + test_name = request.node.name + + snapshot_file_name_parts = [] + # Parameterized test names look like 'test_case[some_param]'. "[" and "]" are annoying to deal with in the shell, + # so replace them with dunders. + snapshot_file_name_parts.extend(re.split(r"[\[\]]", test_name)) + # A trailing ] will produce an empty string in the list, so remove that. + snapshot_file_name_parts = [part for part in snapshot_file_name_parts if len(part) > 0] + snapshot_file_name_parts.append(snapshot_id) + + snapshot_file_name = "__".join(snapshot_file_name_parts) + + path_items: List[str] = [] + + test_file_path_items = os.path.normpath(request.node.fspath).split(os.sep) + test_file_name = test_file_path_items[-1] + # Default to where this is defined, but use more appropriate directories if found. + test_directory_root_index = -1 + for i, path_item in enumerate(test_file_path_items): + if path_item in ("tests_metricflow", "tests_metricflow_semantics", "metricflow"): + test_directory_root_index = i + 1 + + path_to_store_snapshots = os.sep.join(test_file_path_items[:test_directory_root_index]) + path_items.extend([path_to_store_snapshots, "snapshots", test_file_name, snapshot_group]) + + if additional_sub_directories: + path_items.extend(additional_sub_directories) + path_items.append(snapshot_file_name) + + return os.path.abspath(os.path.join(*path_items)) + + +def _exclude_lines_matching_regex(file_contents: str, exclude_line_regex: str) -> str: + """Removes lines from file contents if the line matches exclude_regex.""" + compiled_regex = re.compile(exclude_line_regex) + return "\n".join([line for line in file_contents.split("\n") if not compiled_regex.match(line)]) + + +DISPLAY_SNAPSHOTS_CLI_FLAG = "--display-snapshots" +OVERWRITE_SNAPSHOTS_CLI_FLAG = "--overwrite-snapshots" + + +def add_display_snapshots_cli_flag(parser: _pytest.config.argparsing.Parser) -> None: # noqa: D103 + parser.addoption(DISPLAY_SNAPSHOTS_CLI_FLAG, action="store_true", help="Displays snapshots in a browser if set") + + +def add_overwrite_snapshots_cli_flag(parser: _pytest.config.argparsing.Parser) -> None: # noqa: D103 + parser.addoption( + OVERWRITE_SNAPSHOTS_CLI_FLAG, + action="store_true", + help="Overwrites existing snapshots by ones generated during this testing session", + ) + + # In plan outputs, replace strings that vary from run to run with this so that comparisons can be made # consistently. PLACEHOLDER_CHAR_FOR_INCOMPARABLE_STRINGS = "*" -# Needed as the table alias can vary from run to run. -_EXCLUDE_TABLE_ALIAS_REGEX = "^.*_src.*$" - def make_schema_replacement_function(system_schema: str, source_schema: str) -> Callable[[str], str]: """Generates a function to replace schema names in test outputs.""" @@ -65,7 +216,7 @@ def replace_dataset_id_hash(text: str) -> str: def assert_plan_snapshot_text_equal( request: FixtureRequest, - mf_test_configuration: MetricFlowTestConfiguration, + mf_test_configuration: SnapshotConfiguration, plan: PlanT, plan_snapshot_text: str, plan_snapshot_file_extension: str = ".xml", @@ -97,114 +248,9 @@ def assert_plan_snapshot_text_equal( ) -def assert_execution_plan_text_equal( # noqa: D103 - request: FixtureRequest, - mf_test_configuration: MetricFlowTestConfiguration, - sql_client: SqlClient, - execution_plan: ExecutionPlan, -) -> None: - assert_plan_snapshot_text_equal( - request=request, - mf_test_configuration=mf_test_configuration, - plan=execution_plan, - plan_snapshot_text=execution_plan.structure_text(), - incomparable_strings_replacement_function=make_schema_replacement_function( - system_schema=mf_test_configuration.mf_system_schema, - source_schema=mf_test_configuration.mf_source_schema, - ), - additional_sub_directories_for_snapshots=(sql_client.sql_engine_type.value,), - ) - - -def assert_dataflow_plan_text_equal( # noqa: D103 - request: FixtureRequest, - mf_test_configuration: MetricFlowTestConfiguration, - dataflow_plan: DataflowPlan, - sql_client: SqlClient, -) -> None: - assert_plan_snapshot_text_equal( - request=request, - mf_test_configuration=mf_test_configuration, - plan=dataflow_plan, - plan_snapshot_text=dataflow_plan.structure_text(), - incomparable_strings_replacement_function=replace_dataset_id_hash, - additional_sub_directories_for_snapshots=(sql_client.sql_engine_type.value,), - ) - - -def assert_object_snapshot_equal( # type: ignore[misc] - request: FixtureRequest, - mf_test_configuration: MetricFlowTestConfiguration, - obj_id: str, - obj: Any, - sql_client: Optional[SqlClient] = None, -) -> None: - """For tests to compare large objects, this can be used to snapshot a text representation of the object.""" - if sql_client is not None: - check_sql_engine_snapshot_marker(request) - - assert_snapshot_text_equal( - request=request, - mf_test_configuration=mf_test_configuration, - group_id=obj.__class__.__name__, - snapshot_id=obj_id, - snapshot_text=mf_pformat(obj), - snapshot_file_extension=".txt", - additional_sub_directories_for_snapshots=(sql_client.sql_engine_type.value,) if sql_client else (), - ) - - -def assert_sql_snapshot_equal( - request: FixtureRequest, - mf_test_configuration: MetricFlowTestConfiguration, - snapshot_id: str, - sql: str, - sql_engine: Optional[SqlEngine] = None, -) -> None: - """For tests that generate SQL, use this to write / check snapshots.""" - if sql_engine is not None: - check_sql_engine_snapshot_marker(request) - - assert_snapshot_text_equal( - request=request, - mf_test_configuration=mf_test_configuration, - group_id=sql.__class__.__name__, - snapshot_id=snapshot_id, - snapshot_text=sql, - snapshot_file_extension=".sql", - incomparable_strings_replacement_function=make_schema_replacement_function( - system_schema=mf_test_configuration.mf_system_schema, source_schema=mf_test_configuration.mf_source_schema - ), - exclude_line_regex=_EXCLUDE_TABLE_ALIAS_REGEX, - additional_sub_directories_for_snapshots=(sql_engine.value,) if sql_engine is not None else (), - ) - - -def assert_str_snapshot_equal( # type: ignore[misc] - request: FixtureRequest, - mf_test_configuration: MetricFlowTestConfiguration, - snapshot_id: str, - snapshot_str: str, - sql_engine: Optional[SqlEngine] = None, -) -> None: - """Write / compare a string snapshot.""" - if sql_engine is not None: - check_sql_engine_snapshot_marker(request) - - assert_snapshot_text_equal( - request=request, - mf_test_configuration=mf_test_configuration, - group_id=snapshot_str.__class__.__name__, - snapshot_id=snapshot_id, - snapshot_text=snapshot_str, - snapshot_file_extension=".txt", - additional_sub_directories_for_snapshots=(sql_engine.value,) if sql_engine is not None else (), - ) - - def assert_linkable_element_set_snapshot_equal( # noqa: D103 request: FixtureRequest, - mf_test_configuration: MetricFlowTestConfiguration, + mf_test_configuration: SnapshotConfiguration, set_id: str, linkable_element_set: LinkableElementSet, ) -> None: @@ -267,7 +313,7 @@ def assert_linkable_element_set_snapshot_equal( # noqa: D103 def assert_spec_set_snapshot_equal( # noqa: D103 - request: FixtureRequest, mf_test_configuration: MetricFlowTestConfiguration, set_id: str, spec_set: InstanceSpecSet + request: FixtureRequest, mf_test_configuration: SnapshotConfiguration, set_id: str, spec_set: InstanceSpecSet ) -> None: assert_object_snapshot_equal( request=request, @@ -278,7 +324,7 @@ def assert_spec_set_snapshot_equal( # noqa: D103 def assert_linkable_spec_set_snapshot_equal( # noqa: D103 - request: FixtureRequest, mf_test_configuration: MetricFlowTestConfiguration, set_id: str, spec_set: LinkableSpecSet + request: FixtureRequest, mf_test_configuration: SnapshotConfiguration, set_id: str, spec_set: LinkableSpecSet ) -> None: # TODO: This will be used in a later PR and this message will be removed. naming_scheme = ObjectBuilderNamingScheme() @@ -291,3 +337,37 @@ def assert_linkable_spec_set_snapshot_equal( # noqa: D103 snapshot_file_extension=".txt", additional_sub_directories_for_snapshots=(), ) + + +def assert_object_snapshot_equal( # type: ignore[misc] + request: FixtureRequest, + mf_test_configuration: SnapshotConfiguration, + obj_id: str, + obj: Any, +) -> None: + """For tests to compare large objects, this can be used to snapshot a text representation of the object.""" + assert_snapshot_text_equal( + request=request, + mf_test_configuration=mf_test_configuration, + group_id=obj.__class__.__name__, + snapshot_id=obj_id, + snapshot_text=mf_pformat(obj), + snapshot_file_extension=".txt", + ) + + +def assert_str_snapshot_equal( # type: ignore[misc] + request: FixtureRequest, + mf_test_configuration: SnapshotConfiguration, + snapshot_id: str, + snapshot_str: str, +) -> None: + """Write / compare a string snapshot.""" + assert_snapshot_text_equal( + request=request, + mf_test_configuration=mf_test_configuration, + group_id=snapshot_str.__class__.__name__, + snapshot_id=snapshot_id, + snapshot_text=snapshot_str, + snapshot_file_extension=".txt", + ) diff --git a/metricflow-semantics/metricflow_semantics/test_helpers/time_helpers.py b/metricflow-semantics/metricflow_semantics/test_helpers/time_helpers.py new file mode 100644 index 0000000000..bcccdc1870 --- /dev/null +++ b/metricflow-semantics/metricflow_semantics/test_helpers/time_helpers.py @@ -0,0 +1,19 @@ +from __future__ import annotations + +import datetime + +from metricflow_semantics.time.time_source import TimeSource + + +class ConfigurableTimeSource(TimeSource): + """A time source that can be configured so that scheduled operations can be simulated in testing.""" + + def __init__(self, configured_time: datetime.datetime) -> None: # noqa: D107 + self._configured_time = configured_time + + def get_time(self) -> datetime.datetime: # noqa: D102 + return self._configured_time + + def set_time(self, new_time: datetime.datetime) -> datetime.datetime: # noqa: D102 + self._configured_time = new_time + return new_time diff --git a/tests/dataflow/optimizer/__init__.py b/metricflow-semantics/metricflow_semantics/time/__init__.py similarity index 100% rename from tests/dataflow/optimizer/__init__.py rename to metricflow-semantics/metricflow_semantics/time/__init__.py diff --git a/metricflow/time/time_constants.py b/metricflow-semantics/metricflow_semantics/time/time_constants.py similarity index 100% rename from metricflow/time/time_constants.py rename to metricflow-semantics/metricflow_semantics/time/time_constants.py diff --git a/metricflow/time/time_granularity.py b/metricflow-semantics/metricflow_semantics/time/time_granularity.py similarity index 100% rename from metricflow/time/time_granularity.py rename to metricflow-semantics/metricflow_semantics/time/time_granularity.py diff --git a/metricflow/time/time_source.py b/metricflow-semantics/metricflow_semantics/time/time_source.py similarity index 100% rename from metricflow/time/time_source.py rename to metricflow-semantics/metricflow_semantics/time/time_source.py diff --git a/metricflow/visitor.py b/metricflow-semantics/metricflow_semantics/visitor.py similarity index 100% rename from metricflow/visitor.py rename to metricflow-semantics/metricflow_semantics/visitor.py diff --git a/metricflow-semantics/pyproject.toml b/metricflow-semantics/pyproject.toml new file mode 100644 index 0000000000..88dc2bf5ce --- /dev/null +++ b/metricflow-semantics/pyproject.toml @@ -0,0 +1,62 @@ +[build-system] +requires = ["hatchling~=1.14.0"] +build-backend = "hatchling.build" + +[project] +name = "metricflow-semantics" +version = "0.1.0" +description = "Modules for semantic understanding of a MetricFlow query." +readme = "README.md" +requires-python = ">=3.8,<3.12" +license = "BUSL-1.1" +authors = [ + { name = "dbt Labs", email = "info@dbtlabs.com" }, +] + +classifiers = [ + "Development Status :: 4 - Beta", + "Programming Language :: Python", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", +] + +dependencies = [ + "dbt-semantic-interfaces>=0.5.1, <0.6.0", + "pandas>=1.5.0, <1.6.0", + "rapidfuzz>=3.0, <4.0", +] + +[project.optional-dependencies] +dev-packages = [ + # Developer tools + "mypy>=1.7.0, <1.8.0", + "pre-commit>=3.2.2, <3.3.0", + "pytest-mock>=3.7.0, <3.8.0", + "pytest-xdist>=3.2.1, <3.3.0", + "pytest>=7.1.1, < 7.2.0", + "tabulate>=0.8.9", + "types-PyYAML", + "types-python-dateutil", + "types-tabulate", +] + +[tool.hatch.envs.dev-env] +description = "Environment for development. Includes a DuckDB-backed client." + +features = [ + "dev-packages", +] + + +[project.urls] +"Source Code" = "https://github.com/dbt-labs/metricflow/tree/main/metricflow-semanitcs" + +[tool.hatch.build.targets.sdist] +packages = ["metricflow_semantics"] + +[tool.hatch.build.targets.wheel] +packages = ["metricflow_semantics"] diff --git a/tests/dataflow/optimizer/source_scan/__init__.py b/metricflow-semantics/tests_metricflow_semantics/__init__.py similarity index 100% rename from tests/dataflow/optimizer/source_scan/__init__.py rename to metricflow-semantics/tests_metricflow_semantics/__init__.py diff --git a/tests/dataset/__init__.py b/metricflow-semantics/tests_metricflow_semantics/collection_helpers/__init__.py similarity index 100% rename from tests/dataset/__init__.py rename to metricflow-semantics/tests_metricflow_semantics/collection_helpers/__init__.py diff --git a/tests/collection_helpers/test_merger.py b/metricflow-semantics/tests_metricflow_semantics/collection_helpers/test_merger.py similarity index 91% rename from tests/collection_helpers/test_merger.py rename to metricflow-semantics/tests_metricflow_semantics/collection_helpers/test_merger.py index c0d43abbf7..cce814af71 100644 --- a/tests/collection_helpers/test_merger.py +++ b/metricflow-semantics/tests_metricflow_semantics/collection_helpers/test_merger.py @@ -3,10 +3,9 @@ from dataclasses import dataclass, field from typing import List, Tuple +from metricflow_semantics.collection_helpers.merger import Mergeable from typing_extensions import override -from metricflow.collection_helpers.merger import Mergeable - @dataclass(frozen=True) class NumberTuple(Mergeable): # noqa: D101 diff --git a/tests/collection_helpers/test_pretty_print.py b/metricflow-semantics/tests_metricflow_semantics/collection_helpers/test_pretty_print.py similarity index 95% rename from tests/collection_helpers/test_pretty_print.py rename to metricflow-semantics/tests_metricflow_semantics/collection_helpers/test_pretty_print.py index 5fbacf5be1..462a7d4f7b 100644 --- a/tests/collection_helpers/test_pretty_print.py +++ b/metricflow-semantics/tests_metricflow_semantics/collection_helpers/test_pretty_print.py @@ -5,10 +5,9 @@ from dbt_semantic_interfaces.implementations.elements.dimension import PydanticDimension from dbt_semantic_interfaces.type_enums import DimensionType - -from metricflow.mf_logging.formatting import indent -from metricflow.mf_logging.pretty_print import mf_pformat, mf_pformat_many -from tests.time.metric_time_dimension import MTD_SPEC_DAY +from metricflow_semantics.mf_logging.formatting import indent +from metricflow_semantics.mf_logging.pretty_print import mf_pformat, mf_pformat_many +from metricflow_semantics.test_helpers.metric_time_dimension import MTD_SPEC_DAY logger = logging.getLogger(__name__) diff --git a/metricflow-semantics/tests_metricflow_semantics/conftest.py b/metricflow-semantics/tests_metricflow_semantics/conftest.py new file mode 100644 index 0000000000..1adfb60cd8 --- /dev/null +++ b/metricflow-semantics/tests_metricflow_semantics/conftest.py @@ -0,0 +1,6 @@ +# These imports are required to properly set up pytest fixtures. +from __future__ import annotations + +from tests_metricflow_semantics.fixtures.id_fixtures import * # noqa: F401, F403 +from tests_metricflow_semantics.fixtures.manifest_fixtures import * # noqa: F401, F403 +from tests_metricflow_semantics.fixtures.setup_fixtures import * # noqa: F401, F403 diff --git a/tests/execution/__init__.py b/metricflow-semantics/tests_metricflow_semantics/fixtures/__init__.py similarity index 100% rename from tests/execution/__init__.py rename to metricflow-semantics/tests_metricflow_semantics/fixtures/__init__.py diff --git a/metricflow-semantics/tests_metricflow_semantics/fixtures/id_fixtures.py b/metricflow-semantics/tests_metricflow_semantics/fixtures/id_fixtures.py new file mode 100644 index 0000000000..cec3c0131a --- /dev/null +++ b/metricflow-semantics/tests_metricflow_semantics/fixtures/id_fixtures.py @@ -0,0 +1,17 @@ +from __future__ import annotations + +from typing import Generator + +import pytest +from metricflow_semantics.test_helpers.id_helpers import IdNumberSpace, patch_id_generators_helper + + +@pytest.fixture(autouse=True, scope="function") +def patch_id_generators() -> Generator[None, None, None]: + """Patch ID generators with a new one to get repeatability in plan outputs before every test. + + Plan outputs contain IDs, so if the IDs are not consistent from run to run, there will be diffs in the actual vs. + expected outputs during a test. + """ + with patch_id_generators_helper(start_value=IdNumberSpace.for_test_start().start_value): + yield None diff --git a/metricflow-semantics/tests_metricflow_semantics/fixtures/manifest_fixtures.py b/metricflow-semantics/tests_metricflow_semantics/fixtures/manifest_fixtures.py new file mode 100644 index 0000000000..accd99015c --- /dev/null +++ b/metricflow-semantics/tests_metricflow_semantics/fixtures/manifest_fixtures.py @@ -0,0 +1,103 @@ +from __future__ import annotations + +import logging +from typing import Dict + +import pytest +from dbt_semantic_interfaces.implementations.semantic_manifest import PydanticSemanticManifest +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.specs.column_assoc import ColumnAssociationResolver +from metricflow_semantics.specs.dunder_column_association_resolver import DunderColumnAssociationResolver +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration +from metricflow_semantics.test_helpers.manifest_helpers import load_named_manifest + +logger = logging.getLogger(__name__) + + +@pytest.fixture(scope="session") +def template_mapping(mf_test_configuration: MetricFlowTestConfiguration) -> Dict[str, str]: + """Mapping for template variables in the model YAML files.""" + return {"source_schema": mf_test_configuration.mf_source_schema} + + +@pytest.fixture(scope="session") +def simple_semantic_manifest(template_mapping: Dict[str, str]) -> PydanticSemanticManifest: + """Manifest used for many tests.""" + return load_named_manifest(template_mapping, "simple_manifest") + + +@pytest.fixture(scope="session") +def simple_semantic_manifest_lookup( # noqa: D103 + simple_semantic_manifest: PydanticSemanticManifest, +) -> SemanticManifestLookup: + return SemanticManifestLookup(simple_semantic_manifest) + + +@pytest.fixture(scope="session") +def simple_multi_hop_join_manifest(template_mapping: Dict[str, str]) -> PydanticSemanticManifest: + """Manifest used for many tests.""" + return load_named_manifest(template_mapping, "simple_multi_hop_join_manifest") + + +@pytest.fixture(scope="session") +def simple_multi_hop_join_manifest_lookup( # noqa: D103 + simple_multi_hop_join_manifest: PydanticSemanticManifest, +) -> SemanticManifestLookup: + return SemanticManifestLookup(simple_multi_hop_join_manifest) + + +@pytest.fixture(scope="session") +def partitioned_multi_hop_join_semantic_manifest( # noqa: D103 + template_mapping: Dict[str, str] +) -> PydanticSemanticManifest: + return load_named_manifest(template_mapping, "partitioned_multi_hop_join_manifest") + + +@pytest.fixture(scope="session") +def partitioned_multi_hop_join_semantic_manifest_lookup( # noqa: D103 + partitioned_multi_hop_join_semantic_manifest: PydanticSemanticManifest, +) -> SemanticManifestLookup: + return SemanticManifestLookup(partitioned_multi_hop_join_semantic_manifest) + + +@pytest.fixture(scope="session") +def scd_semantic_manifest(template_mapping: Dict[str, str]) -> PydanticSemanticManifest: # noqa: D103 + return load_named_manifest(template_mapping, "scd_manifest") + + +@pytest.fixture(scope="session") +def scd_semantic_manifest_lookup( # noqa: D103 + scd_semantic_manifest: PydanticSemanticManifest, +) -> SemanticManifestLookup: + return SemanticManifestLookup(scd_semantic_manifest) + + +@pytest.fixture(scope="session") +def ambiguous_resolution_manifest(template_mapping: Dict[str, str]) -> PydanticSemanticManifest: # noqa: D103 + return load_named_manifest(template_mapping, "ambiguous_resolution_manifest") + + +@pytest.fixture(scope="session") +def ambiguous_resolution_manifest_lookup( # noqa: D103 + ambiguous_resolution_manifest: PydanticSemanticManifest, +) -> SemanticManifestLookup: + return SemanticManifestLookup(ambiguous_resolution_manifest) + + +@pytest.fixture(scope="session") +def cyclic_join_manifest(template_mapping: Dict[str, str]) -> PydanticSemanticManifest: # noqa: D103 + return load_named_manifest(template_mapping, "cyclic_join_manifest") + + +@pytest.fixture(scope="session") +def cyclic_join_semantic_manifest_lookup( # noqa: D103 + cyclic_join_manifest: PydanticSemanticManifest, +) -> SemanticManifestLookup: + return SemanticManifestLookup(cyclic_join_manifest) + + +@pytest.fixture(scope="session") +def column_association_resolver( # noqa: D103 + simple_semantic_manifest_lookup: SemanticManifestLookup, +) -> ColumnAssociationResolver: + return DunderColumnAssociationResolver(simple_semantic_manifest_lookup) diff --git a/metricflow-semantics/tests_metricflow_semantics/fixtures/setup_fixtures.py b/metricflow-semantics/tests_metricflow_semantics/fixtures/setup_fixtures.py new file mode 100644 index 0000000000..572536772e --- /dev/null +++ b/metricflow-semantics/tests_metricflow_semantics/fixtures/setup_fixtures.py @@ -0,0 +1,38 @@ +from __future__ import annotations + +import logging + +import _pytest.config +import pytest +from _pytest.fixtures import FixtureRequest +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration +from metricflow_semantics.test_helpers.snapshot_helpers import ( + DISPLAY_SNAPSHOTS_CLI_FLAG, + OVERWRITE_SNAPSHOTS_CLI_FLAG, + add_display_snapshots_cli_flag, + add_overwrite_snapshots_cli_flag, +) + +logger = logging.getLogger(__name__) + + +def pytest_addoption(parser: _pytest.config.argparsing.Parser) -> None: + """Add options for running pytest through the CLI.""" + add_overwrite_snapshots_cli_flag(parser) + add_display_snapshots_cli_flag(parser) + + +@pytest.fixture(scope="session") +def mf_test_configuration( # noqa: D103 + request: FixtureRequest, +) -> MetricFlowTestConfiguration: + return MetricFlowTestConfiguration( + sql_engine_url="N/A", + sql_engine_password="N/A", + mf_system_schema="N/A", + mf_source_schema="N/A", + display_snapshots=bool(request.config.getoption(DISPLAY_SNAPSHOTS_CLI_FLAG, default=False)), + display_graphs=False, + overwrite_snapshots=bool(request.config.getoption(OVERWRITE_SNAPSHOTS_CLI_FLAG, default=False)), + use_persistent_source_schema=False, + ) diff --git a/tests/fixtures/__init__.py b/metricflow-semantics/tests_metricflow_semantics/model/__init__.py similarity index 100% rename from tests/fixtures/__init__.py rename to metricflow-semantics/tests_metricflow_semantics/model/__init__.py diff --git a/tests/model/example_project_configuration.py b/metricflow-semantics/tests_metricflow_semantics/model/example_project_configuration.py similarity index 100% rename from tests/model/example_project_configuration.py rename to metricflow-semantics/tests_metricflow_semantics/model/example_project_configuration.py diff --git a/tests/fixtures/sql_clients/__init__.py b/metricflow-semantics/tests_metricflow_semantics/model/modify/__init__.py similarity index 100% rename from tests/fixtures/sql_clients/__init__.py rename to metricflow-semantics/tests_metricflow_semantics/model/modify/__init__.py diff --git a/tests/model/modify/modify_input_measure_filter.py b/metricflow-semantics/tests_metricflow_semantics/model/modify/modify_input_measure_filter.py similarity index 100% rename from tests/model/modify/modify_input_measure_filter.py rename to metricflow-semantics/tests_metricflow_semantics/model/modify/modify_input_measure_filter.py diff --git a/tests/model/modify/modify_input_metric_filter.py b/metricflow-semantics/tests_metricflow_semantics/model/modify/modify_input_metric_filter.py similarity index 100% rename from tests/model/modify/modify_input_metric_filter.py rename to metricflow-semantics/tests_metricflow_semantics/model/modify/modify_input_metric_filter.py diff --git a/tests/model/modify/modify_manifest.py b/metricflow-semantics/tests_metricflow_semantics/model/modify/modify_manifest.py similarity index 100% rename from tests/model/modify/modify_manifest.py rename to metricflow-semantics/tests_metricflow_semantics/model/modify/modify_manifest.py diff --git a/tests/model/modify/modify_metric_filter.py b/metricflow-semantics/tests_metricflow_semantics/model/modify/modify_metric_filter.py similarity index 100% rename from tests/model/modify/modify_metric_filter.py rename to metricflow-semantics/tests_metricflow_semantics/model/modify/modify_metric_filter.py diff --git a/tests/integration/__init__.py b/metricflow-semantics/tests_metricflow_semantics/model/semantics/__init__.py similarity index 100% rename from tests/integration/__init__.py rename to metricflow-semantics/tests_metricflow_semantics/model/semantics/__init__.py diff --git a/tests/model/semantics/test_linkable_element_set.py b/metricflow-semantics/tests_metricflow_semantics/model/semantics/test_linkable_element_set.py similarity index 99% rename from tests/model/semantics/test_linkable_element_set.py rename to metricflow-semantics/tests_metricflow_semantics/model/semantics/test_linkable_element_set.py index 578e5dcd8d..925e5ed8b7 100644 --- a/tests/model/semantics/test_linkable_element_set.py +++ b/metricflow-semantics/tests_metricflow_semantics/model/semantics/test_linkable_element_set.py @@ -20,16 +20,15 @@ TimeDimensionReference, ) from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity -from more_itertools import bucket - -from metricflow.model.semantics.linkable_element import ( +from metricflow_semantics.model.semantics.linkable_element import ( LinkableDimension, LinkableElementProperty, LinkableEntity, LinkableMetric, SemanticModelJoinPathElement, ) -from metricflow.model.semantics.linkable_element_set import LinkableElementSet +from metricflow_semantics.model.semantics.linkable_element_set import LinkableElementSet +from more_itertools import bucket AMBIGUOUS_NAME = "ambiguous" # Common references diff --git a/tests/model/semantics/test_linkable_spec_resolver.py b/metricflow-semantics/tests_metricflow_semantics/model/semantics/test_linkable_spec_resolver.py similarity index 93% rename from tests/model/semantics/test_linkable_spec_resolver.py rename to metricflow-semantics/tests_metricflow_semantics/model/semantics/test_linkable_spec_resolver.py index b6d26c141a..cce2e574c7 100644 --- a/tests/model/semantics/test_linkable_spec_resolver.py +++ b/metricflow-semantics/tests_metricflow_semantics/model/semantics/test_linkable_spec_resolver.py @@ -10,19 +10,21 @@ MetricReference, SemanticModelReference, ) - -from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup -from metricflow.model.semantics.linkable_element import ( +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.model.semantics.linkable_element import ( LinkableElementProperty, SemanticModelJoinPath, SemanticModelJoinPathElement, ) -from metricflow.model.semantics.linkable_spec_resolver import ( +from metricflow_semantics.model.semantics.linkable_spec_resolver import ( ValidLinkableSpecResolver, ) -from metricflow.model.semantics.semantic_model_join_evaluator import MAX_JOIN_HOPS -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.snapshot_utils import assert_linkable_element_set_snapshot_equal, assert_spec_set_snapshot_equal +from metricflow_semantics.model.semantics.semantic_model_join_evaluator import MAX_JOIN_HOPS +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration +from metricflow_semantics.test_helpers.snapshot_helpers import ( + assert_linkable_element_set_snapshot_equal, + assert_spec_set_snapshot_equal, +) logger = logging.getLogger(__name__) diff --git a/tests/model/semantics/test_semantic_model_join_evaluator.py b/metricflow-semantics/tests_metricflow_semantics/model/semantics/test_semantic_model_join_evaluator.py similarity index 67% rename from tests/model/semantics/test_semantic_model_join_evaluator.py rename to metricflow-semantics/tests_metricflow_semantics/model/semantics/test_semantic_model_join_evaluator.py index 27dc6be340..a54ccc3e67 100644 --- a/tests/model/semantics/test_semantic_model_join_evaluator.py +++ b/metricflow-semantics/tests_metricflow_semantics/model/semantics/test_semantic_model_join_evaluator.py @@ -1,19 +1,17 @@ from __future__ import annotations -from typing import Dict, Mapping, Sequence +from typing import Dict, Sequence from dbt_semantic_interfaces.enum_extension import assert_values_exhausted from dbt_semantic_interfaces.protocols.entity import EntityType from dbt_semantic_interfaces.references import EntityReference, SemanticModelReference - -from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup -from metricflow.model.semantics.semantic_model_join_evaluator import ( +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.model.semantics.semantic_model_join_evaluator import ( SemanticModelEntityJoin, SemanticModelEntityJoinType, SemanticModelJoinEvaluator, SemanticModelLink, ) -from tests.fixtures.manifest_fixtures import MetricFlowEngineTestFixture, SemanticManifestSetup def _get_join_types_for_entity_type(entity_type: EntityType) -> Sequence[SemanticModelEntityJoinType]: @@ -207,124 +205,6 @@ def test_semantic_model_join_validation_on_missing_entity( ) -def test_distinct_target_instance_set_join_validation( - mf_engine_test_fixture_mapping: Mapping[SemanticManifestSetup, MetricFlowEngineTestFixture], - simple_semantic_manifest_lookup: SemanticManifestLookup, -) -> None: - """Tests instance set join validation to a PRIMARY or UNIQUE entity.""" - foreign_user_instance_set = ( - mf_engine_test_fixture_mapping[SemanticManifestSetup.SIMPLE_MANIFEST] - .data_set_mapping["listings_latest"] - .instance_set - ) - primary_user_instance_set = ( - mf_engine_test_fixture_mapping[SemanticManifestSetup.SIMPLE_MANIFEST] - .data_set_mapping["users_latest"] - .instance_set - ) - unique_user_instance_set = ( - mf_engine_test_fixture_mapping[SemanticManifestSetup.SIMPLE_MANIFEST].data_set_mapping["companies"].instance_set - ) - user_entity_reference = EntityReference(element_name="user") - join_evaluator = SemanticModelJoinEvaluator( - semantic_model_lookup=simple_semantic_manifest_lookup.semantic_model_lookup - ) - - foreign_primary = join_evaluator.is_valid_instance_set_join( - left_instance_set=foreign_user_instance_set, - right_instance_set=primary_user_instance_set, - on_entity_reference=user_entity_reference, - ) - primary_primary = join_evaluator.is_valid_instance_set_join( - left_instance_set=primary_user_instance_set, - right_instance_set=primary_user_instance_set, - on_entity_reference=user_entity_reference, - ) - unique_primary = join_evaluator.is_valid_instance_set_join( - left_instance_set=unique_user_instance_set, - right_instance_set=primary_user_instance_set, - on_entity_reference=user_entity_reference, - ) - foreign_unique = join_evaluator.is_valid_instance_set_join( - left_instance_set=foreign_user_instance_set, - right_instance_set=unique_user_instance_set, - on_entity_reference=user_entity_reference, - ) - primary_unique = join_evaluator.is_valid_instance_set_join( - left_instance_set=primary_user_instance_set, - right_instance_set=unique_user_instance_set, - on_entity_reference=user_entity_reference, - ) - unique_unique = join_evaluator.is_valid_instance_set_join( - left_instance_set=unique_user_instance_set, - right_instance_set=unique_user_instance_set, - on_entity_reference=user_entity_reference, - ) - - results = { - "foreign to primary": foreign_primary, - "primary to primary": primary_primary, - "unique to primary": unique_primary, - "foreign to unique": foreign_unique, - "primary to unique": primary_unique, - "unique to unique": unique_unique, - } - assert all(results.values()), ( - f"All instance set level join types for primary and unique targets should be valid, but we found " - f"at least one that was not! Incorrectly failing types: {[k for k,v in results.items() if not v]}." - ) - - -def test_foreign_target_instance_set_join_validation( - mf_engine_test_fixture_mapping: Mapping[SemanticManifestSetup, MetricFlowEngineTestFixture], - simple_semantic_manifest_lookup: SemanticManifestLookup, -) -> None: - """Tests semantic model join validation to FOREIGN entity types.""" - foreign_user_instance_set = ( - mf_engine_test_fixture_mapping[SemanticManifestSetup.SIMPLE_MANIFEST] - .data_set_mapping["listings_latest"] - .instance_set - ) - primary_user_instance_set = ( - mf_engine_test_fixture_mapping[SemanticManifestSetup.SIMPLE_MANIFEST] - .data_set_mapping["users_latest"] - .instance_set - ) - unique_user_instance_set = ( - mf_engine_test_fixture_mapping[SemanticManifestSetup.SIMPLE_MANIFEST].data_set_mapping["companies"].instance_set - ) - user_entity_reference = EntityReference(element_name="user") - join_evaluator = SemanticModelJoinEvaluator( - semantic_model_lookup=simple_semantic_manifest_lookup.semantic_model_lookup - ) - - foreign_foreign = join_evaluator.is_valid_instance_set_join( - left_instance_set=foreign_user_instance_set, - right_instance_set=foreign_user_instance_set, - on_entity_reference=user_entity_reference, - ) - primary_foreign = join_evaluator.is_valid_instance_set_join( - left_instance_set=primary_user_instance_set, - right_instance_set=foreign_user_instance_set, - on_entity_reference=user_entity_reference, - ) - unique_foreign = join_evaluator.is_valid_instance_set_join( - left_instance_set=unique_user_instance_set, - right_instance_set=foreign_user_instance_set, - on_entity_reference=user_entity_reference, - ) - - results = { - "foreign to foreign": foreign_foreign, - "primary to foreign": primary_foreign, - "unique to foreign": unique_foreign, - } - assert not any(results.values()), ( - f"All semantic model level joins against foreign targets should be invalid, but we found at least one " - f"that was not! Incorrectly passing types: {[k for k,v in results.items() if v]}." - ) - - def test_get_joinable_semantic_models_single_hop( # noqa: D103 partitioned_multi_hop_join_semantic_manifest_lookup: SemanticManifestLookup, ) -> None: @@ -498,88 +378,3 @@ def test_natural_entity_semantic_model_validation(scd_semantic_manifest_lookup: f"joins marked invalid: {[k for k,v in valid_joins.items() if not v]}. Invalid joins marked valid: " f"{[k for k, v in invalid_joins.items() if v]}." ) - - -def test_natural_entity_instance_set_validation( - mf_engine_test_fixture_mapping: Mapping[SemanticManifestSetup, MetricFlowEngineTestFixture], - scd_semantic_manifest_lookup: SemanticManifestLookup, -) -> None: - """Tests instance set validation for NATURAL target entity types. - - These tests rely on the scd_semantic_manifest_lookup, which makes extensive use of NATURAL key types. - """ - natural_user_instance_set = ( - mf_engine_test_fixture_mapping[SemanticManifestSetup.SCD_MANIFEST] - .data_set_mapping["primary_accounts"] - .instance_set - ) - primary_user_instance_set = ( - mf_engine_test_fixture_mapping[SemanticManifestSetup.SCD_MANIFEST].data_set_mapping["users_latest"].instance_set - ) - foreign_user_instance_set = ( - mf_engine_test_fixture_mapping[SemanticManifestSetup.SCD_MANIFEST] - .data_set_mapping["bookings_source"] - .instance_set - ) - unique_user_instance_set = ( - mf_engine_test_fixture_mapping[SemanticManifestSetup.SCD_MANIFEST].data_set_mapping["companies"].instance_set - ) - user_entity_reference = EntityReference(element_name="user") - join_evaluator = SemanticModelJoinEvaluator( - semantic_model_lookup=scd_semantic_manifest_lookup.semantic_model_lookup - ) - - # Valid cases - natural_primary = join_evaluator.is_valid_instance_set_join( - left_instance_set=natural_user_instance_set, - right_instance_set=primary_user_instance_set, - on_entity_reference=user_entity_reference, - ) - natural_unique = join_evaluator.is_valid_instance_set_join( - left_instance_set=natural_user_instance_set, - right_instance_set=unique_user_instance_set, - on_entity_reference=user_entity_reference, - ) - foreign_natural = join_evaluator.is_valid_instance_set_join( - left_instance_set=foreign_user_instance_set, - right_instance_set=natural_user_instance_set, - on_entity_reference=user_entity_reference, - ) - primary_natural = join_evaluator.is_valid_instance_set_join( - left_instance_set=primary_user_instance_set, - right_instance_set=natural_user_instance_set, - on_entity_reference=user_entity_reference, - ) - unique_natural = join_evaluator.is_valid_instance_set_join( - left_instance_set=unique_user_instance_set, - right_instance_set=natural_user_instance_set, - on_entity_reference=user_entity_reference, - ) - # Invalid cases - natural_foreign = join_evaluator.is_valid_instance_set_join( - left_instance_set=natural_user_instance_set, - right_instance_set=foreign_user_instance_set, - on_entity_reference=user_entity_reference, - ) - natural_natural = join_evaluator.is_valid_instance_set_join( - left_instance_set=natural_user_instance_set, - right_instance_set=natural_user_instance_set, - on_entity_reference=user_entity_reference, - ) - - valid_joins = { - "natural to primary": natural_primary, - "natural to unique": natural_unique, - "foreign to natural": foreign_natural, - "primary to natural": primary_natural, - "unique to natural": unique_natural, - } - invalid_joins = { - "natural to foreign": natural_foreign, - "natural to natural": natural_natural, - } - assert all(valid_joins.values()) and not any(invalid_joins.values()), ( - f"Found unexpected join validator results when validating joins involving natural key comparisons! Valid " - f"joins marked invalid: {[k for k,v in valid_joins.items() if not v]}. Invalid joins marked valid: " - f"{[k for k, v in invalid_joins.items() if v]}." - ) diff --git a/tests/model/test_semantic_model_container.py b/metricflow-semantics/tests_metricflow_semantics/model/test_semantic_model_container.py similarity index 94% rename from tests/model/test_semantic_model_container.py rename to metricflow-semantics/tests_metricflow_semantics/model/test_semantic_model_container.py index 53b877c603..69f8c5ec0c 100644 --- a/tests/model/test_semantic_model_container.py +++ b/metricflow-semantics/tests_metricflow_semantics/model/test_semantic_model_container.py @@ -6,12 +6,14 @@ from _pytest.fixtures import FixtureRequest from dbt_semantic_interfaces.protocols.semantic_manifest import SemanticManifest from dbt_semantic_interfaces.references import EntityReference, MeasureReference, MetricReference - -from metricflow.model.semantics.linkable_element import LinkableElementProperty -from metricflow.model.semantics.metric_lookup import MetricLookup -from metricflow.model.semantics.semantic_model_lookup import SemanticModelLookup -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.snapshot_utils import assert_linkable_element_set_snapshot_equal, assert_object_snapshot_equal +from metricflow_semantics.model.semantics.linkable_element import LinkableElementProperty +from metricflow_semantics.model.semantics.metric_lookup import MetricLookup +from metricflow_semantics.model.semantics.semantic_model_lookup import SemanticModelLookup +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration +from metricflow_semantics.test_helpers.snapshot_helpers import ( + assert_linkable_element_set_snapshot_equal, + assert_object_snapshot_equal, +) logger = logging.getLogger(__name__) diff --git a/tests/model/test_where_filter_spec.py b/metricflow-semantics/tests_metricflow_semantics/model/test_where_filter_spec.py similarity index 95% rename from tests/model/test_where_filter_spec.py rename to metricflow-semantics/tests_metricflow_semantics/model/test_where_filter_spec.py index a4df031e72..5e234f104c 100644 --- a/tests/model/test_where_filter_spec.py +++ b/metricflow-semantics/tests_metricflow_semantics/model/test_where_filter_spec.py @@ -23,19 +23,18 @@ ) from dbt_semantic_interfaces.type_enums.date_part import DatePart from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity - -from metricflow.naming.object_builder_scheme import ObjectBuilderNamingScheme -from metricflow.query.group_by_item.filter_spec_resolution.filter_location import WhereFilterLocation -from metricflow.query.group_by_item.filter_spec_resolution.filter_spec_lookup import ( +from metricflow_semantics.naming.object_builder_scheme import ObjectBuilderNamingScheme +from metricflow_semantics.query.group_by_item.filter_spec_resolution.filter_location import WhereFilterLocation +from metricflow_semantics.query.group_by_item.filter_spec_resolution.filter_spec_lookup import ( CallParameterSet, FilterSpecResolution, FilterSpecResolutionLookUp, ResolvedSpecLookUpKey, ) -from metricflow.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath -from metricflow.query.issues.issues_base import MetricFlowQueryResolutionIssueSet -from metricflow.specs.column_assoc import ColumnAssociationResolver -from metricflow.specs.specs import ( +from metricflow_semantics.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath +from metricflow_semantics.query.issues.issues_base import MetricFlowQueryResolutionIssueSet +from metricflow_semantics.specs.column_assoc import ColumnAssociationResolver +from metricflow_semantics.specs.spec_classes import ( DimensionSpec, EntitySpec, GroupByMetricSpec, @@ -44,8 +43,9 @@ TimeDimensionSpec, WhereFilterSpec, ) -from metricflow.specs.where_filter_transform import WhereSpecFactory -from tests.specs.conftest import EXAMPLE_FILTER_LOCATION +from metricflow_semantics.specs.where_filter_transform import WhereSpecFactory + +from tests_metricflow_semantics.specs.conftest import EXAMPLE_FILTER_LOCATION logger = logging.getLogger(__name__) diff --git a/tests/integration/query_output/__init__.py b/metricflow-semantics/tests_metricflow_semantics/naming/__init__.py similarity index 100% rename from tests/integration/query_output/__init__.py rename to metricflow-semantics/tests_metricflow_semantics/naming/__init__.py diff --git a/tests/naming/conftest.py b/metricflow-semantics/tests_metricflow_semantics/naming/conftest.py similarity index 86% rename from tests/naming/conftest.py rename to metricflow-semantics/tests_metricflow_semantics/naming/conftest.py index 5bd2701b22..3dac120add 100644 --- a/tests/naming/conftest.py +++ b/metricflow-semantics/tests_metricflow_semantics/naming/conftest.py @@ -6,9 +6,14 @@ from dbt_semantic_interfaces.references import EntityReference from dbt_semantic_interfaces.type_enums import TimeGranularity from dbt_semantic_interfaces.type_enums.date_part import DatePart - -from metricflow.specs.specs import DimensionSpec, EntitySpec, GroupByMetricSpec, LinkableInstanceSpec, TimeDimensionSpec -from tests.time.metric_time_dimension import MTD_SPEC_MONTH, MTD_SPEC_WEEK, MTD_SPEC_YEAR +from metricflow_semantics.specs.spec_classes import ( + DimensionSpec, + EntitySpec, + GroupByMetricSpec, + LinkableInstanceSpec, + TimeDimensionSpec, +) +from metricflow_semantics.test_helpers.metric_time_dimension import MTD_SPEC_MONTH, MTD_SPEC_WEEK, MTD_SPEC_YEAR @pytest.fixture(scope="session") diff --git a/tests/naming/test_dunder_naming_scheme.py b/metricflow-semantics/tests_metricflow_semantics/naming/test_dunder_naming_scheme.py similarity index 92% rename from tests/naming/test_dunder_naming_scheme.py rename to metricflow-semantics/tests_metricflow_semantics/naming/test_dunder_naming_scheme.py index b3c206fa26..99c329f034 100644 --- a/tests/naming/test_dunder_naming_scheme.py +++ b/metricflow-semantics/tests_metricflow_semantics/naming/test_dunder_naming_scheme.py @@ -6,10 +6,9 @@ from dbt_semantic_interfaces.references import EntityReference from dbt_semantic_interfaces.type_enums import TimeGranularity from dbt_semantic_interfaces.type_enums.date_part import DatePart - -from metricflow.naming.dunder_scheme import DunderNamingScheme -from metricflow.specs.specs import DimensionSpec, EntitySpec, LinkableInstanceSpec, TimeDimensionSpec -from tests.time.metric_time_dimension import MTD_SPEC_MONTH, MTD_SPEC_WEEK, MTD_SPEC_YEAR +from metricflow_semantics.naming.dunder_scheme import DunderNamingScheme +from metricflow_semantics.specs.spec_classes import DimensionSpec, EntitySpec, LinkableInstanceSpec, TimeDimensionSpec +from metricflow_semantics.test_helpers.metric_time_dimension import MTD_SPEC_MONTH, MTD_SPEC_WEEK, MTD_SPEC_YEAR @pytest.fixture(scope="session") diff --git a/tests/naming/test_metric_name_scheme.py b/metricflow-semantics/tests_metricflow_semantics/naming/test_metric_name_scheme.py similarity index 87% rename from tests/naming/test_metric_name_scheme.py rename to metricflow-semantics/tests_metricflow_semantics/naming/test_metric_name_scheme.py index 03ac5086d0..6912c306a2 100644 --- a/tests/naming/test_metric_name_scheme.py +++ b/metricflow-semantics/tests_metricflow_semantics/naming/test_metric_name_scheme.py @@ -3,9 +3,8 @@ from typing import Sequence import pytest - -from metricflow.naming.metric_scheme import MetricNamingScheme -from metricflow.specs.specs import DimensionSpec, InstanceSpec, MetricSpec +from metricflow_semantics.naming.metric_scheme import MetricNamingScheme +from metricflow_semantics.specs.spec_classes import DimensionSpec, InstanceSpec, MetricSpec @pytest.fixture(scope="session") diff --git a/tests/naming/test_object_builder_naming_scheme.py b/metricflow-semantics/tests_metricflow_semantics/naming/test_object_builder_naming_scheme.py similarity index 92% rename from tests/naming/test_object_builder_naming_scheme.py rename to metricflow-semantics/tests_metricflow_semantics/naming/test_object_builder_naming_scheme.py index 2bebc6c5b5..d5abdfcb27 100644 --- a/tests/naming/test_object_builder_naming_scheme.py +++ b/metricflow-semantics/tests_metricflow_semantics/naming/test_object_builder_naming_scheme.py @@ -6,10 +6,15 @@ from dbt_semantic_interfaces.references import EntityReference from dbt_semantic_interfaces.type_enums import TimeGranularity from dbt_semantic_interfaces.type_enums.date_part import DatePart - -from metricflow.naming.object_builder_scheme import ObjectBuilderNamingScheme -from metricflow.specs.specs import DimensionSpec, EntitySpec, GroupByMetricSpec, LinkableInstanceSpec, TimeDimensionSpec -from tests.time.metric_time_dimension import MTD_SPEC_MONTH, MTD_SPEC_WEEK, MTD_SPEC_YEAR +from metricflow_semantics.naming.object_builder_scheme import ObjectBuilderNamingScheme +from metricflow_semantics.specs.spec_classes import ( + DimensionSpec, + EntitySpec, + GroupByMetricSpec, + LinkableInstanceSpec, + TimeDimensionSpec, +) +from metricflow_semantics.test_helpers.metric_time_dimension import MTD_SPEC_MONTH, MTD_SPEC_WEEK, MTD_SPEC_YEAR @pytest.fixture(scope="session") diff --git a/tests/mf_logging/__init__.py b/metricflow-semantics/tests_metricflow_semantics/query/__init__.py similarity index 100% rename from tests/mf_logging/__init__.py rename to metricflow-semantics/tests_metricflow_semantics/query/__init__.py diff --git a/tests/model/__init__.py b/metricflow-semantics/tests_metricflow_semantics/query/group_by_item/__init__.py similarity index 100% rename from tests/model/__init__.py rename to metricflow-semantics/tests_metricflow_semantics/query/group_by_item/__init__.py diff --git a/tests/query/group_by_item/ambiguous_resolution_query_id.py b/metricflow-semantics/tests_metricflow_semantics/query/group_by_item/ambiguous_resolution_query_id.py similarity index 100% rename from tests/query/group_by_item/ambiguous_resolution_query_id.py rename to metricflow-semantics/tests_metricflow_semantics/query/group_by_item/ambiguous_resolution_query_id.py diff --git a/tests/query/group_by_item/conftest.py b/metricflow-semantics/tests_metricflow_semantics/query/group_by_item/conftest.py similarity index 84% rename from tests/query/group_by_item/conftest.py rename to metricflow-semantics/tests_metricflow_semantics/query/group_by_item/conftest.py index b70cb6d770..280c18d3eb 100644 --- a/tests/query/group_by_item/conftest.py +++ b/metricflow-semantics/tests_metricflow_semantics/query/group_by_item/conftest.py @@ -10,14 +10,14 @@ from dbt_semantic_interfaces.naming.keywords import METRIC_TIME_ELEMENT_NAME from dbt_semantic_interfaces.protocols import WhereFilterIntersection from dbt_semantic_interfaces.references import MetricReference - -from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup -from metricflow.naming.naming_scheme import QueryItemNamingScheme -from metricflow.naming.object_builder_scheme import ObjectBuilderNamingScheme -from metricflow.query.group_by_item.resolution_dag.dag import GroupByItemResolutionDag -from metricflow.query.group_by_item.resolution_dag.dag_builder import GroupByItemResolutionDagBuilder -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.query.group_by_item.ambiguous_resolution_query_id import AmbiguousResolutionQueryId +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.naming.naming_scheme import QueryItemNamingScheme +from metricflow_semantics.naming.object_builder_scheme import ObjectBuilderNamingScheme +from metricflow_semantics.query.group_by_item.resolution_dag.dag import GroupByItemResolutionDag +from metricflow_semantics.query.group_by_item.resolution_dag.dag_builder import GroupByItemResolutionDagBuilder +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration + +from tests_metricflow_semantics.query.group_by_item.ambiguous_resolution_query_id import AmbiguousResolutionQueryId def _build_resolution_dag( diff --git a/tests/model/modify/__init__.py b/metricflow-semantics/tests_metricflow_semantics/query/group_by_item/filter_spec_resolution/__init__.py similarity index 100% rename from tests/model/modify/__init__.py rename to metricflow-semantics/tests_metricflow_semantics/query/group_by_item/filter_spec_resolution/__init__.py diff --git a/tests/query/group_by_item/filter_spec_resolution/test_spec_lookup.py b/metricflow-semantics/tests_metricflow_semantics/query/group_by_item/filter_spec_resolution/test_spec_lookup.py similarity index 88% rename from tests/query/group_by_item/filter_spec_resolution/test_spec_lookup.py rename to metricflow-semantics/tests_metricflow_semantics/query/group_by_item/filter_spec_resolution/test_spec_lookup.py index c38fbf1178..e77068305c 100644 --- a/tests/query/group_by_item/filter_spec_resolution/test_spec_lookup.py +++ b/metricflow-semantics/tests_metricflow_semantics/query/group_by_item/filter_spec_resolution/test_spec_lookup.py @@ -19,24 +19,24 @@ from dbt_semantic_interfaces.naming.keywords import METRIC_TIME_ELEMENT_NAME from dbt_semantic_interfaces.references import MetricReference from dbt_semantic_interfaces.transformations.transform_rule import SemanticManifestTransformRule - -from metricflow.mf_logging.pretty_print import mf_pformat -from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup -from metricflow.naming.naming_scheme import QueryItemNamingScheme -from metricflow.query.group_by_item.filter_spec_resolution.filter_pattern_factory import ( +from metricflow_semantics.mf_logging.pretty_print import mf_pformat +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.naming.naming_scheme import QueryItemNamingScheme +from metricflow_semantics.query.group_by_item.filter_spec_resolution.filter_pattern_factory import ( DefaultWhereFilterPatternFactory, ) -from metricflow.query.group_by_item.filter_spec_resolution.filter_spec_lookup import ( +from metricflow_semantics.query.group_by_item.filter_spec_resolution.filter_spec_lookup import ( FilterSpecResolutionLookUp, ) -from metricflow.query.group_by_item.filter_spec_resolution.filter_spec_resolver import WhereFilterSpecResolver -from metricflow.query.group_by_item.resolution_dag.dag import GroupByItemResolutionDag -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.model.modify.modify_input_metric_filter import ModifyInputMetricFilterTransform -from tests.model.modify.modify_manifest import modify_manifest -from tests.model.modify.modify_metric_filter import ModifyMetricFilterTransform -from tests.query.group_by_item.conftest import AmbiguousResolutionQueryId, _build_resolution_dag -from tests.snapshot_utils import assert_str_snapshot_equal +from metricflow_semantics.query.group_by_item.filter_spec_resolution.filter_spec_resolver import WhereFilterSpecResolver +from metricflow_semantics.query.group_by_item.resolution_dag.dag import GroupByItemResolutionDag +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration +from metricflow_semantics.test_helpers.snapshot_helpers import assert_str_snapshot_equal + +from tests_metricflow_semantics.model.modify.modify_input_metric_filter import ModifyInputMetricFilterTransform +from tests_metricflow_semantics.model.modify.modify_manifest import modify_manifest +from tests_metricflow_semantics.model.modify.modify_metric_filter import ModifyMetricFilterTransform +from tests_metricflow_semantics.query.group_by_item.conftest import AmbiguousResolutionQueryId, _build_resolution_dag logger = logging.getLogger(__name__) diff --git a/tests/model/semantics/__init__.py b/metricflow-semantics/tests_metricflow_semantics/query/group_by_item/resolution_dag/__init__.py similarity index 100% rename from tests/model/semantics/__init__.py rename to metricflow-semantics/tests_metricflow_semantics/query/group_by_item/resolution_dag/__init__.py diff --git a/tests/query/group_by_item/resolution_dag/test_resolution_dags.py b/metricflow-semantics/tests_metricflow_semantics/query/group_by_item/resolution_dag/test_resolution_dags.py similarity index 66% rename from tests/query/group_by_item/resolution_dag/test_resolution_dags.py rename to metricflow-semantics/tests_metricflow_semantics/query/group_by_item/resolution_dag/test_resolution_dags.py index e9f2e3deb5..e0f27e02c1 100644 --- a/tests/query/group_by_item/resolution_dag/test_resolution_dags.py +++ b/metricflow-semantics/tests_metricflow_semantics/query/group_by_item/resolution_dag/test_resolution_dags.py @@ -5,12 +5,12 @@ import pytest from _pytest.fixtures import FixtureRequest +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.query.group_by_item.resolution_dag.dag import GroupByItemResolutionDag +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration +from metricflow_semantics.test_helpers.snapshot_helpers import assert_plan_snapshot_text_equal -from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup -from metricflow.query.group_by_item.resolution_dag.dag import GroupByItemResolutionDag -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.query.group_by_item.ambiguous_resolution_query_id import AmbiguousResolutionQueryId -from tests.snapshot_utils import assert_plan_snapshot_text_equal +from tests_metricflow_semantics.query.group_by_item.ambiguous_resolution_query_id import AmbiguousResolutionQueryId logger = logging.getLogger(__name__) diff --git a/tests/query/group_by_item/test_available_group_by_items.py b/metricflow-semantics/tests_metricflow_semantics/query/group_by_item/test_available_group_by_items.py similarity index 63% rename from tests/query/group_by_item/test_available_group_by_items.py rename to metricflow-semantics/tests_metricflow_semantics/query/group_by_item/test_available_group_by_items.py index 711ffc1c50..ffb7af27ff 100644 --- a/tests/query/group_by_item/test_available_group_by_items.py +++ b/metricflow-semantics/tests_metricflow_semantics/query/group_by_item/test_available_group_by_items.py @@ -5,14 +5,14 @@ import pytest from _pytest.fixtures import FixtureRequest +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.query.group_by_item.group_by_item_resolver import GroupByItemResolver +from metricflow_semantics.query.group_by_item.resolution_dag.dag import GroupByItemResolutionDag +from metricflow_semantics.specs.spec_classes import LinkableSpecSet +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration +from metricflow_semantics.test_helpers.snapshot_helpers import assert_linkable_spec_set_snapshot_equal -from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup -from metricflow.query.group_by_item.group_by_item_resolver import GroupByItemResolver -from metricflow.query.group_by_item.resolution_dag.dag import GroupByItemResolutionDag -from metricflow.specs.specs import LinkableSpecSet -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.query.group_by_item.conftest import AmbiguousResolutionQueryId -from tests.snapshot_utils import assert_linkable_spec_set_snapshot_equal +from tests_metricflow_semantics.query.group_by_item.conftest import AmbiguousResolutionQueryId logger = logging.getLogger(__name__) diff --git a/tests/query/group_by_item/test_matching_item_for_filters.py b/metricflow-semantics/tests_metricflow_semantics/query/group_by_item/test_matching_item_for_filters.py similarity index 67% rename from tests/query/group_by_item/test_matching_item_for_filters.py rename to metricflow-semantics/tests_metricflow_semantics/query/group_by_item/test_matching_item_for_filters.py index e2b0f11e2a..76b5f61169 100644 --- a/tests/query/group_by_item/test_matching_item_for_filters.py +++ b/metricflow-semantics/tests_metricflow_semantics/query/group_by_item/test_matching_item_for_filters.py @@ -6,15 +6,15 @@ import pytest from _pytest.fixtures import FixtureRequest from dbt_semantic_interfaces.naming.keywords import METRIC_TIME_ELEMENT_NAME - -from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup -from metricflow.naming.naming_scheme import QueryItemNamingScheme -from metricflow.naming.object_builder_scheme import ObjectBuilderNamingScheme -from metricflow.query.group_by_item.group_by_item_resolver import GroupByItemResolver -from metricflow.query.group_by_item.resolution_dag.dag import GroupByItemResolutionDag -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.query.group_by_item.conftest import AmbiguousResolutionQueryId -from tests.snapshot_utils import assert_object_snapshot_equal +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.naming.naming_scheme import QueryItemNamingScheme +from metricflow_semantics.naming.object_builder_scheme import ObjectBuilderNamingScheme +from metricflow_semantics.query.group_by_item.group_by_item_resolver import GroupByItemResolver +from metricflow_semantics.query.group_by_item.resolution_dag.dag import GroupByItemResolutionDag +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration +from metricflow_semantics.test_helpers.snapshot_helpers import assert_object_snapshot_equal + +from tests_metricflow_semantics.query.group_by_item.conftest import AmbiguousResolutionQueryId logger = logging.getLogger(__name__) diff --git a/tests/query/group_by_item/test_matching_item_for_querying.py b/metricflow-semantics/tests_metricflow_semantics/query/group_by_item/test_matching_item_for_querying.py similarity index 85% rename from tests/query/group_by_item/test_matching_item_for_querying.py rename to metricflow-semantics/tests_metricflow_semantics/query/group_by_item/test_matching_item_for_querying.py index 8626bf3eaa..41c0cf6afc 100644 --- a/tests/query/group_by_item/test_matching_item_for_querying.py +++ b/metricflow-semantics/tests_metricflow_semantics/query/group_by_item/test_matching_item_for_querying.py @@ -8,19 +8,19 @@ from dbt_semantic_interfaces.enum_extension import assert_values_exhausted from dbt_semantic_interfaces.naming.keywords import METRIC_TIME_ELEMENT_NAME from dbt_semantic_interfaces.references import MetricReference - -from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup -from metricflow.naming.naming_scheme import QueryItemNamingScheme -from metricflow.naming.object_builder_scheme import ObjectBuilderNamingScheme -from metricflow.query.group_by_item.group_by_item_resolver import GroupByItemResolver -from metricflow.query.group_by_item.resolution_dag.dag import GroupByItemResolutionDag -from metricflow.query.group_by_item.resolution_dag.resolution_nodes.metric_resolution_node import ( +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.naming.naming_scheme import QueryItemNamingScheme +from metricflow_semantics.naming.object_builder_scheme import ObjectBuilderNamingScheme +from metricflow_semantics.query.group_by_item.group_by_item_resolver import GroupByItemResolver +from metricflow_semantics.query.group_by_item.resolution_dag.dag import GroupByItemResolutionDag +from metricflow_semantics.query.group_by_item.resolution_dag.resolution_nodes.metric_resolution_node import ( MetricGroupByItemResolutionNode, ) -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.query.group_by_item.conftest import AmbiguousResolutionQueryId -from tests.snapshot_utils import assert_object_snapshot_equal -from tests.time.metric_time_dimension import MTD_SPEC_DAY, MTD_SPEC_MONTH, MTD_SPEC_YEAR +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration +from metricflow_semantics.test_helpers.metric_time_dimension import MTD_SPEC_DAY, MTD_SPEC_MONTH, MTD_SPEC_YEAR +from metricflow_semantics.test_helpers.snapshot_helpers import assert_object_snapshot_equal + +from tests_metricflow_semantics.query.group_by_item.conftest import AmbiguousResolutionQueryId logger = logging.getLogger(__name__) diff --git a/tests/query/test_ambiguous_entity_path.py b/metricflow-semantics/tests_metricflow_semantics/query/test_ambiguous_entity_path.py similarity index 86% rename from tests/query/test_ambiguous_entity_path.py rename to metricflow-semantics/tests_metricflow_semantics/query/test_ambiguous_entity_path.py index b9a08a87f4..e4b6caa1cc 100644 --- a/tests/query/test_ambiguous_entity_path.py +++ b/metricflow-semantics/tests_metricflow_semantics/query/test_ambiguous_entity_path.py @@ -4,15 +4,14 @@ import pytest from _pytest.fixtures import FixtureRequest - -from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup -from metricflow.query.group_by_item.filter_spec_resolution.filter_pattern_factory import ( +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.query.group_by_item.filter_spec_resolution.filter_pattern_factory import ( DefaultWhereFilterPatternFactory, ) -from metricflow.query.query_exceptions import InvalidQueryException -from metricflow.query.query_parser import MetricFlowQueryParser -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.snapshot_utils import assert_object_snapshot_equal, assert_str_snapshot_equal +from metricflow_semantics.query.query_exceptions import InvalidQueryException +from metricflow_semantics.query.query_parser import MetricFlowQueryParser +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration +from metricflow_semantics.test_helpers.snapshot_helpers import assert_object_snapshot_equal, assert_str_snapshot_equal logger = logging.getLogger(__name__) diff --git a/tests/query/test_query_parser.py b/metricflow-semantics/tests_metricflow_semantics/query/test_query_parser.py similarity index 97% rename from tests/query/test_query_parser.py rename to metricflow-semantics/tests_metricflow_semantics/query/test_query_parser.py index 0fc888e68f..d5f82d4927 100644 --- a/tests/query/test_query_parser.py +++ b/metricflow-semantics/tests_metricflow_semantics/query/test_query_parser.py @@ -13,26 +13,28 @@ from dbt_semantic_interfaces.type_enums.date_part import DatePart from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity from dbt_semantic_interfaces.validations.semantic_manifest_validator import SemanticManifestValidator - -from metricflow.filters.time_constraint import TimeRangeConstraint -from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup -from metricflow.query.query_exceptions import InvalidQueryException -from metricflow.query.query_parser import MetricFlowQueryParser -from metricflow.specs.query_param_implementations import ( +from metricflow_semantics.filters.time_constraint import TimeRangeConstraint +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.query.query_exceptions import InvalidQueryException +from metricflow_semantics.query.query_parser import MetricFlowQueryParser +from metricflow_semantics.specs.query_param_implementations import ( DimensionOrEntityParameter, MetricParameter, OrderByParameter, TimeDimensionParameter, ) -from metricflow.specs.specs import ( +from metricflow_semantics.specs.spec_classes import ( DimensionSpec, EntitySpec, MetricSpec, OrderBySpec, TimeDimensionSpec, ) -from tests.model.example_project_configuration import EXAMPLE_PROJECT_CONFIGURATION_YAML_CONFIG_FILE -from tests.time.metric_time_dimension import MTD +from metricflow_semantics.test_helpers.metric_time_dimension import MTD + +from tests_metricflow_semantics.model.example_project_configuration import ( + EXAMPLE_PROJECT_CONFIGURATION_YAML_CONFIG_FILE, +) logger = logging.getLogger(__name__) diff --git a/tests/query/test_suggestions.py b/metricflow-semantics/tests_metricflow_semantics/query/test_suggestions.py similarity index 86% rename from tests/query/test_suggestions.py rename to metricflow-semantics/tests_metricflow_semantics/query/test_suggestions.py index 6200e38461..8ab94aa9c5 100644 --- a/tests/query/test_suggestions.py +++ b/metricflow-semantics/tests_metricflow_semantics/query/test_suggestions.py @@ -11,19 +11,23 @@ from dbt_semantic_interfaces.implementations.semantic_manifest import PydanticSemanticManifest from dbt_semantic_interfaces.naming.keywords import METRIC_TIME_ELEMENT_NAME from dbt_semantic_interfaces.references import MetricReference +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.query.query_exceptions import InvalidQueryException +from metricflow_semantics.query.query_parser import MetricFlowQueryParser +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration +from metricflow_semantics.test_helpers.snapshot_helpers import assert_str_snapshot_equal -from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup -from metricflow.plan_conversion.column_resolver import DunderColumnAssociationResolver -from metricflow.query.query_exceptions import InvalidQueryException -from metricflow.query.query_parser import MetricFlowQueryParser -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.model.modify.modify_manifest import modify_manifest -from tests.model.modify.modify_metric_filter import ModifyMetricFilterTransform -from tests.snapshot_utils import assert_str_snapshot_equal +from tests_metricflow_semantics.model.modify.modify_manifest import modify_manifest +from tests_metricflow_semantics.model.modify.modify_metric_filter import ModifyMetricFilterTransform logger = logging.getLogger(__name__) +@pytest.fixture +def query_parser(simple_semantic_manifest_lookup: SemanticManifestLookup) -> MetricFlowQueryParser: # noqa: D103 + return MetricFlowQueryParser(simple_semantic_manifest_lookup) + + def test_suggestions_for_group_by_item( # noqa: D103 request: FixtureRequest, mf_test_configuration: MetricFlowTestConfiguration, query_parser: MetricFlowQueryParser ) -> None: @@ -130,7 +134,6 @@ def test_suggestions_for_defined_filters_in_multi_metric_query( ) semantic_manifest_lookup = SemanticManifestLookup(modified_manifest) - DunderColumnAssociationResolver(modified_manifest) query_parser = MetricFlowQueryParser( semantic_manifest_lookup=semantic_manifest_lookup, diff --git a/tests/snapshots/test_ambiguous_entity_path.py/MetricFlowQuerySpec/test_ambiguous_entity_path_resolves_to_shortest_entity_path_item__result_0.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_ambiguous_entity_path.py/MetricFlowQuerySpec/test_ambiguous_entity_path_resolves_to_shortest_entity_path_item__result_0.txt similarity index 100% rename from tests/snapshots/test_ambiguous_entity_path.py/MetricFlowQuerySpec/test_ambiguous_entity_path_resolves_to_shortest_entity_path_item__result_0.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_ambiguous_entity_path.py/MetricFlowQuerySpec/test_ambiguous_entity_path_resolves_to_shortest_entity_path_item__result_0.txt diff --git a/tests/snapshots/test_ambiguous_entity_path.py/MetricFlowQuerySpec/test_resolvable_ambiguous_entity_path__result_0.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_ambiguous_entity_path.py/MetricFlowQuerySpec/test_resolvable_ambiguous_entity_path__result_0.txt similarity index 100% rename from tests/snapshots/test_ambiguous_entity_path.py/MetricFlowQuerySpec/test_resolvable_ambiguous_entity_path__result_0.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_ambiguous_entity_path.py/MetricFlowQuerySpec/test_resolvable_ambiguous_entity_path__result_0.txt diff --git a/tests/snapshots/test_ambiguous_entity_path.py/str/test_non_resolvable_ambiguous_entity_path_due_to_mismatch__result_0.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_ambiguous_entity_path.py/str/test_non_resolvable_ambiguous_entity_path_due_to_mismatch__result_0.txt similarity index 100% rename from tests/snapshots/test_ambiguous_entity_path.py/str/test_non_resolvable_ambiguous_entity_path_due_to_mismatch__result_0.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_ambiguous_entity_path.py/str/test_non_resolvable_ambiguous_entity_path_due_to_mismatch__result_0.txt diff --git a/tests/snapshots/test_ambiguous_entity_path.py/str/test_non_resolvable_ambiguous_entity_path_due_to_multiple_matches__result_0.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_ambiguous_entity_path.py/str/test_non_resolvable_ambiguous_entity_path_due_to_multiple_matches__result_0.txt similarity index 100% rename from tests/snapshots/test_ambiguous_entity_path.py/str/test_non_resolvable_ambiguous_entity_path_due_to_multiple_matches__result_0.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_ambiguous_entity_path.py/str/test_non_resolvable_ambiguous_entity_path_due_to_multiple_matches__result_0.txt diff --git a/tests/snapshots/test_available_group_by_items.py/LinkableSpecSet/test_available_group_by_items__accumulate_last_2_months_metric__set0.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_available_group_by_items.py/LinkableSpecSet/test_available_group_by_items__accumulate_last_2_months_metric__set0.txt similarity index 100% rename from tests/snapshots/test_available_group_by_items.py/LinkableSpecSet/test_available_group_by_items__accumulate_last_2_months_metric__set0.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_available_group_by_items.py/LinkableSpecSet/test_available_group_by_items__accumulate_last_2_months_metric__set0.txt diff --git a/tests/snapshots/test_available_group_by_items.py/LinkableSpecSet/test_available_group_by_items__derived_metric_with_different_parent_time_grains__set0.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_available_group_by_items.py/LinkableSpecSet/test_available_group_by_items__derived_metric_with_different_parent_time_grains__set0.txt similarity index 100% rename from tests/snapshots/test_available_group_by_items.py/LinkableSpecSet/test_available_group_by_items__derived_metric_with_different_parent_time_grains__set0.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_available_group_by_items.py/LinkableSpecSet/test_available_group_by_items__derived_metric_with_different_parent_time_grains__set0.txt diff --git a/tests/snapshots/test_available_group_by_items.py/LinkableSpecSet/test_available_group_by_items__derived_metric_with_same_parent_time_grains__set0.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_available_group_by_items.py/LinkableSpecSet/test_available_group_by_items__derived_metric_with_same_parent_time_grains__set0.txt similarity index 100% rename from tests/snapshots/test_available_group_by_items.py/LinkableSpecSet/test_available_group_by_items__derived_metric_with_same_parent_time_grains__set0.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_available_group_by_items.py/LinkableSpecSet/test_available_group_by_items__derived_metric_with_same_parent_time_grains__set0.txt diff --git a/tests/snapshots/test_available_group_by_items.py/LinkableSpecSet/test_available_group_by_items__metrics_with_different_time_grains__set0.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_available_group_by_items.py/LinkableSpecSet/test_available_group_by_items__metrics_with_different_time_grains__set0.txt similarity index 100% rename from tests/snapshots/test_available_group_by_items.py/LinkableSpecSet/test_available_group_by_items__metrics_with_different_time_grains__set0.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_available_group_by_items.py/LinkableSpecSet/test_available_group_by_items__metrics_with_different_time_grains__set0.txt diff --git a/tests/snapshots/test_available_group_by_items.py/LinkableSpecSet/test_available_group_by_items__metrics_with_same_time_grains__set0.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_available_group_by_items.py/LinkableSpecSet/test_available_group_by_items__metrics_with_same_time_grains__set0.txt similarity index 100% rename from tests/snapshots/test_available_group_by_items.py/LinkableSpecSet/test_available_group_by_items__metrics_with_same_time_grains__set0.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_available_group_by_items.py/LinkableSpecSet/test_available_group_by_items__metrics_with_same_time_grains__set0.txt diff --git a/tests/snapshots/test_available_group_by_items.py/LinkableSpecSet/test_available_group_by_items__no_metrics__set0.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_available_group_by_items.py/LinkableSpecSet/test_available_group_by_items__no_metrics__set0.txt similarity index 100% rename from tests/snapshots/test_available_group_by_items.py/LinkableSpecSet/test_available_group_by_items__no_metrics__set0.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_available_group_by_items.py/LinkableSpecSet/test_available_group_by_items__no_metrics__set0.txt diff --git a/tests/snapshots/test_available_group_by_items.py/LinkableSpecSet/test_available_group_by_items__simple_metric__set0.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_available_group_by_items.py/LinkableSpecSet/test_available_group_by_items__simple_metric__set0.txt similarity index 100% rename from tests/snapshots/test_available_group_by_items.py/LinkableSpecSet/test_available_group_by_items__simple_metric__set0.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_available_group_by_items.py/LinkableSpecSet/test_available_group_by_items__simple_metric__set0.txt diff --git a/tests/snapshots/test_linkable_spec_resolver.py/list/test_linkable_element_set_as_spec_set__set0.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_linkable_spec_resolver.py/list/test_linkable_element_set_as_spec_set__set0.txt similarity index 100% rename from tests/snapshots/test_linkable_spec_resolver.py/list/test_linkable_element_set_as_spec_set__set0.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_linkable_spec_resolver.py/list/test_linkable_element_set_as_spec_set__set0.txt diff --git a/tests/snapshots/test_linkable_spec_resolver.py/str/test_all_properties__result0.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_linkable_spec_resolver.py/str/test_all_properties__result0.txt similarity index 100% rename from tests/snapshots/test_linkable_spec_resolver.py/str/test_all_properties__result0.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_linkable_spec_resolver.py/str/test_all_properties__result0.txt diff --git a/tests/snapshots/test_linkable_spec_resolver.py/str/test_create_linkable_element_set_from_join_path__result0.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_linkable_spec_resolver.py/str/test_create_linkable_element_set_from_join_path__result0.txt similarity index 100% rename from tests/snapshots/test_linkable_spec_resolver.py/str/test_create_linkable_element_set_from_join_path__result0.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_linkable_spec_resolver.py/str/test_create_linkable_element_set_from_join_path__result0.txt diff --git a/tests/snapshots/test_linkable_spec_resolver.py/str/test_create_linkable_element_set_from_join_path_multi_hop__result0.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_linkable_spec_resolver.py/str/test_create_linkable_element_set_from_join_path_multi_hop__result0.txt similarity index 100% rename from tests/snapshots/test_linkable_spec_resolver.py/str/test_create_linkable_element_set_from_join_path_multi_hop__result0.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_linkable_spec_resolver.py/str/test_create_linkable_element_set_from_join_path_multi_hop__result0.txt diff --git a/tests/snapshots/test_linkable_spec_resolver.py/str/test_cyclic_join_manifest__result0.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_linkable_spec_resolver.py/str/test_cyclic_join_manifest__result0.txt similarity index 100% rename from tests/snapshots/test_linkable_spec_resolver.py/str/test_cyclic_join_manifest__result0.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_linkable_spec_resolver.py/str/test_cyclic_join_manifest__result0.txt diff --git a/tests/snapshots/test_linkable_spec_resolver.py/str/test_metric_time_property_for_cumulative_metric__result0.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_linkable_spec_resolver.py/str/test_metric_time_property_for_cumulative_metric__result0.txt similarity index 100% rename from tests/snapshots/test_linkable_spec_resolver.py/str/test_metric_time_property_for_cumulative_metric__result0.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_linkable_spec_resolver.py/str/test_metric_time_property_for_cumulative_metric__result0.txt diff --git a/tests/snapshots/test_linkable_spec_resolver.py/str/test_metric_time_property_for_derived_metrics__result0.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_linkable_spec_resolver.py/str/test_metric_time_property_for_derived_metrics__result0.txt similarity index 100% rename from tests/snapshots/test_linkable_spec_resolver.py/str/test_metric_time_property_for_derived_metrics__result0.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_linkable_spec_resolver.py/str/test_metric_time_property_for_derived_metrics__result0.txt diff --git a/tests/snapshots/test_linkable_spec_resolver.py/str/test_one_property__result0.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_linkable_spec_resolver.py/str/test_one_property__result0.txt similarity index 100% rename from tests/snapshots/test_linkable_spec_resolver.py/str/test_one_property__result0.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_linkable_spec_resolver.py/str/test_one_property__result0.txt diff --git a/tests/snapshots/test_matching_item_for_filters.py/GroupByItemResolution/test_ambiguous_metric_time_in_query_filter__accumulate_last_2_months_metric__result.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_matching_item_for_filters.py/GroupByItemResolution/test_ambiguous_metric_time_in_query_filter__accumulate_last_2_months_metric__result.txt similarity index 100% rename from tests/snapshots/test_matching_item_for_filters.py/GroupByItemResolution/test_ambiguous_metric_time_in_query_filter__accumulate_last_2_months_metric__result.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_matching_item_for_filters.py/GroupByItemResolution/test_ambiguous_metric_time_in_query_filter__accumulate_last_2_months_metric__result.txt diff --git a/tests/snapshots/test_matching_item_for_filters.py/GroupByItemResolution/test_ambiguous_metric_time_in_query_filter__derived_metric_with_different_parent_time_grains__result.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_matching_item_for_filters.py/GroupByItemResolution/test_ambiguous_metric_time_in_query_filter__derived_metric_with_different_parent_time_grains__result.txt similarity index 100% rename from tests/snapshots/test_matching_item_for_filters.py/GroupByItemResolution/test_ambiguous_metric_time_in_query_filter__derived_metric_with_different_parent_time_grains__result.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_matching_item_for_filters.py/GroupByItemResolution/test_ambiguous_metric_time_in_query_filter__derived_metric_with_different_parent_time_grains__result.txt diff --git a/tests/snapshots/test_matching_item_for_filters.py/GroupByItemResolution/test_ambiguous_metric_time_in_query_filter__derived_metric_with_same_parent_time_grains__result.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_matching_item_for_filters.py/GroupByItemResolution/test_ambiguous_metric_time_in_query_filter__derived_metric_with_same_parent_time_grains__result.txt similarity index 100% rename from tests/snapshots/test_matching_item_for_filters.py/GroupByItemResolution/test_ambiguous_metric_time_in_query_filter__derived_metric_with_same_parent_time_grains__result.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_matching_item_for_filters.py/GroupByItemResolution/test_ambiguous_metric_time_in_query_filter__derived_metric_with_same_parent_time_grains__result.txt diff --git a/tests/snapshots/test_matching_item_for_filters.py/GroupByItemResolution/test_ambiguous_metric_time_in_query_filter__metrics_with_different_time_grains__result.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_matching_item_for_filters.py/GroupByItemResolution/test_ambiguous_metric_time_in_query_filter__metrics_with_different_time_grains__result.txt similarity index 100% rename from tests/snapshots/test_matching_item_for_filters.py/GroupByItemResolution/test_ambiguous_metric_time_in_query_filter__metrics_with_different_time_grains__result.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_matching_item_for_filters.py/GroupByItemResolution/test_ambiguous_metric_time_in_query_filter__metrics_with_different_time_grains__result.txt diff --git a/tests/snapshots/test_matching_item_for_filters.py/GroupByItemResolution/test_ambiguous_metric_time_in_query_filter__metrics_with_same_time_grains__result.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_matching_item_for_filters.py/GroupByItemResolution/test_ambiguous_metric_time_in_query_filter__metrics_with_same_time_grains__result.txt similarity index 100% rename from tests/snapshots/test_matching_item_for_filters.py/GroupByItemResolution/test_ambiguous_metric_time_in_query_filter__metrics_with_same_time_grains__result.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_matching_item_for_filters.py/GroupByItemResolution/test_ambiguous_metric_time_in_query_filter__metrics_with_same_time_grains__result.txt diff --git a/tests/snapshots/test_matching_item_for_filters.py/GroupByItemResolution/test_ambiguous_metric_time_in_query_filter__no_metrics__result.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_matching_item_for_filters.py/GroupByItemResolution/test_ambiguous_metric_time_in_query_filter__no_metrics__result.txt similarity index 100% rename from tests/snapshots/test_matching_item_for_filters.py/GroupByItemResolution/test_ambiguous_metric_time_in_query_filter__no_metrics__result.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_matching_item_for_filters.py/GroupByItemResolution/test_ambiguous_metric_time_in_query_filter__no_metrics__result.txt diff --git a/tests/snapshots/test_matching_item_for_filters.py/GroupByItemResolution/test_ambiguous_metric_time_in_query_filter__simple_metric__result.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_matching_item_for_filters.py/GroupByItemResolution/test_ambiguous_metric_time_in_query_filter__simple_metric__result.txt similarity index 100% rename from tests/snapshots/test_matching_item_for_filters.py/GroupByItemResolution/test_ambiguous_metric_time_in_query_filter__simple_metric__result.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_matching_item_for_filters.py/GroupByItemResolution/test_ambiguous_metric_time_in_query_filter__simple_metric__result.txt diff --git a/tests/snapshots/test_matching_item_for_querying.py/AvailableGroupByItemsResolution/test_missing_parent_for_metric__result.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_matching_item_for_querying.py/AvailableGroupByItemsResolution/test_missing_parent_for_metric__result.txt similarity index 100% rename from tests/snapshots/test_matching_item_for_querying.py/AvailableGroupByItemsResolution/test_missing_parent_for_metric__result.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_matching_item_for_querying.py/AvailableGroupByItemsResolution/test_missing_parent_for_metric__result.txt diff --git a/tests/snapshots/test_matching_item_for_querying.py/GroupByItemResolution/test_invalid_group_by_item__result.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_matching_item_for_querying.py/GroupByItemResolution/test_invalid_group_by_item__result.txt similarity index 100% rename from tests/snapshots/test_matching_item_for_querying.py/GroupByItemResolution/test_invalid_group_by_item__result.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_matching_item_for_querying.py/GroupByItemResolution/test_invalid_group_by_item__result.txt diff --git a/tests/snapshots/test_matching_item_for_querying.py/GroupByItemResolution/test_unavailable_group_by_item_in_derived_metric_parent__result.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_matching_item_for_querying.py/GroupByItemResolution/test_unavailable_group_by_item_in_derived_metric_parent__result.txt similarity index 100% rename from tests/snapshots/test_matching_item_for_querying.py/GroupByItemResolution/test_unavailable_group_by_item_in_derived_metric_parent__result.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_matching_item_for_querying.py/GroupByItemResolution/test_unavailable_group_by_item_in_derived_metric_parent__result.txt diff --git a/tests/snapshots/test_resolution_dags.py/GroupByItemResolutionDag/test_snapshot__accumulate_last_2_months_metric__gbir_6.xml b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_resolution_dags.py/GroupByItemResolutionDag/test_snapshot__accumulate_last_2_months_metric__gbir_6.xml similarity index 100% rename from tests/snapshots/test_resolution_dags.py/GroupByItemResolutionDag/test_snapshot__accumulate_last_2_months_metric__gbir_6.xml rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_resolution_dags.py/GroupByItemResolutionDag/test_snapshot__accumulate_last_2_months_metric__gbir_6.xml diff --git a/tests/snapshots/test_resolution_dags.py/GroupByItemResolutionDag/test_snapshot__derived_metric_with_different_parent_time_grains__gbir_5.xml b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_resolution_dags.py/GroupByItemResolutionDag/test_snapshot__derived_metric_with_different_parent_time_grains__gbir_5.xml similarity index 100% rename from tests/snapshots/test_resolution_dags.py/GroupByItemResolutionDag/test_snapshot__derived_metric_with_different_parent_time_grains__gbir_5.xml rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_resolution_dags.py/GroupByItemResolutionDag/test_snapshot__derived_metric_with_different_parent_time_grains__gbir_5.xml diff --git a/tests/snapshots/test_resolution_dags.py/GroupByItemResolutionDag/test_snapshot__derived_metric_with_same_parent_time_grains__gbir_4.xml b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_resolution_dags.py/GroupByItemResolutionDag/test_snapshot__derived_metric_with_same_parent_time_grains__gbir_4.xml similarity index 100% rename from tests/snapshots/test_resolution_dags.py/GroupByItemResolutionDag/test_snapshot__derived_metric_with_same_parent_time_grains__gbir_4.xml rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_resolution_dags.py/GroupByItemResolutionDag/test_snapshot__derived_metric_with_same_parent_time_grains__gbir_4.xml diff --git a/tests/snapshots/test_resolution_dags.py/GroupByItemResolutionDag/test_snapshot__metrics_with_different_time_grains__gbir_3.xml b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_resolution_dags.py/GroupByItemResolutionDag/test_snapshot__metrics_with_different_time_grains__gbir_3.xml similarity index 100% rename from tests/snapshots/test_resolution_dags.py/GroupByItemResolutionDag/test_snapshot__metrics_with_different_time_grains__gbir_3.xml rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_resolution_dags.py/GroupByItemResolutionDag/test_snapshot__metrics_with_different_time_grains__gbir_3.xml diff --git a/tests/snapshots/test_resolution_dags.py/GroupByItemResolutionDag/test_snapshot__metrics_with_same_time_grains__gbir_2.xml b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_resolution_dags.py/GroupByItemResolutionDag/test_snapshot__metrics_with_same_time_grains__gbir_2.xml similarity index 100% rename from tests/snapshots/test_resolution_dags.py/GroupByItemResolutionDag/test_snapshot__metrics_with_same_time_grains__gbir_2.xml rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_resolution_dags.py/GroupByItemResolutionDag/test_snapshot__metrics_with_same_time_grains__gbir_2.xml diff --git a/tests/snapshots/test_resolution_dags.py/GroupByItemResolutionDag/test_snapshot__no_metrics__gbir_0.xml b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_resolution_dags.py/GroupByItemResolutionDag/test_snapshot__no_metrics__gbir_0.xml similarity index 100% rename from tests/snapshots/test_resolution_dags.py/GroupByItemResolutionDag/test_snapshot__no_metrics__gbir_0.xml rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_resolution_dags.py/GroupByItemResolutionDag/test_snapshot__no_metrics__gbir_0.xml diff --git a/tests/snapshots/test_resolution_dags.py/GroupByItemResolutionDag/test_snapshot__simple_metric__gbir_1.xml b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_resolution_dags.py/GroupByItemResolutionDag/test_snapshot__simple_metric__gbir_1.xml similarity index 100% rename from tests/snapshots/test_resolution_dags.py/GroupByItemResolutionDag/test_snapshot__simple_metric__gbir_1.xml rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_resolution_dags.py/GroupByItemResolutionDag/test_snapshot__simple_metric__gbir_1.xml diff --git a/tests/snapshots/test_semantic_model_container.py/dict/test_get_names__result0.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_semantic_model_container.py/dict/test_get_names__result0.txt similarity index 100% rename from tests/snapshots/test_semantic_model_container.py/dict/test_get_names__result0.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_semantic_model_container.py/dict/test_get_names__result0.txt diff --git a/tests/snapshots/test_semantic_model_container.py/str/test_linkable_elements_for_measure__result0.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_semantic_model_container.py/str/test_linkable_elements_for_measure__result0.txt similarity index 100% rename from tests/snapshots/test_semantic_model_container.py/str/test_linkable_elements_for_measure__result0.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_semantic_model_container.py/str/test_linkable_elements_for_measure__result0.txt diff --git a/tests/snapshots/test_semantic_model_container.py/str/test_linkable_elements_for_metrics__result0.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_semantic_model_container.py/str/test_linkable_elements_for_metrics__result0.txt similarity index 100% rename from tests/snapshots/test_semantic_model_container.py/str/test_linkable_elements_for_metrics__result0.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_semantic_model_container.py/str/test_linkable_elements_for_metrics__result0.txt diff --git a/tests/snapshots/test_semantic_model_container.py/str/test_linkable_set_for_common_dimensions_in_different_models__result0.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_semantic_model_container.py/str/test_linkable_set_for_common_dimensions_in_different_models__result0.txt similarity index 100% rename from tests/snapshots/test_semantic_model_container.py/str/test_linkable_set_for_common_dimensions_in_different_models__result0.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_semantic_model_container.py/str/test_linkable_set_for_common_dimensions_in_different_models__result0.txt diff --git a/tests/snapshots/test_semantic_model_container.py/tuple/test_linkable_elements_for_no_metrics_query__result0.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_semantic_model_container.py/tuple/test_linkable_elements_for_no_metrics_query__result0.txt similarity index 100% rename from tests/snapshots/test_semantic_model_container.py/tuple/test_linkable_elements_for_no_metrics_query__result0.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_semantic_model_container.py/tuple/test_linkable_elements_for_no_metrics_query__result0.txt diff --git a/tests/snapshots/test_semantic_model_container.py/tuple/test_local_linked_elements_for_metric__result0.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_semantic_model_container.py/tuple/test_local_linked_elements_for_metric__result0.txt similarity index 100% rename from tests/snapshots/test_semantic_model_container.py/tuple/test_local_linked_elements_for_metric__result0.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_semantic_model_container.py/tuple/test_local_linked_elements_for_metric__result0.txt diff --git a/tests/snapshots/test_spec_lookup.py/str/test_filter_resolution_for_derived_metrics_with_common_filtered_metric__result.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_spec_lookup.py/str/test_filter_resolution_for_derived_metrics_with_common_filtered_metric__result.txt similarity index 100% rename from tests/snapshots/test_spec_lookup.py/str/test_filter_resolution_for_derived_metrics_with_common_filtered_metric__result.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_spec_lookup.py/str/test_filter_resolution_for_derived_metrics_with_common_filtered_metric__result.txt diff --git a/tests/snapshots/test_spec_lookup.py/str/test_filter_resolution_for_invalid_metric_filter__result.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_spec_lookup.py/str/test_filter_resolution_for_invalid_metric_filter__result.txt similarity index 100% rename from tests/snapshots/test_spec_lookup.py/str/test_filter_resolution_for_invalid_metric_filter__result.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_spec_lookup.py/str/test_filter_resolution_for_invalid_metric_filter__result.txt diff --git a/tests/snapshots/test_spec_lookup.py/str/test_filter_resolution_for_invalid_metric_input_filter__result.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_spec_lookup.py/str/test_filter_resolution_for_invalid_metric_input_filter__result.txt similarity index 100% rename from tests/snapshots/test_spec_lookup.py/str/test_filter_resolution_for_invalid_metric_input_filter__result.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_spec_lookup.py/str/test_filter_resolution_for_invalid_metric_input_filter__result.txt diff --git a/tests/snapshots/test_spec_lookup.py/str/test_filter_resolution_for_valid_metric_filter__result.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_spec_lookup.py/str/test_filter_resolution_for_valid_metric_filter__result.txt similarity index 100% rename from tests/snapshots/test_spec_lookup.py/str/test_filter_resolution_for_valid_metric_filter__result.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_spec_lookup.py/str/test_filter_resolution_for_valid_metric_filter__result.txt diff --git a/tests/snapshots/test_spec_lookup.py/str/test_filter_resolution_for_valid_metric_input_filter__result.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_spec_lookup.py/str/test_filter_resolution_for_valid_metric_input_filter__result.txt similarity index 100% rename from tests/snapshots/test_spec_lookup.py/str/test_filter_resolution_for_valid_metric_input_filter__result.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_spec_lookup.py/str/test_filter_resolution_for_valid_metric_input_filter__result.txt diff --git a/tests/snapshots/test_spec_lookup.py/str/test_filter_spec_resolution__accumulate_last_2_months_metric__result.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_spec_lookup.py/str/test_filter_spec_resolution__accumulate_last_2_months_metric__result.txt similarity index 100% rename from tests/snapshots/test_spec_lookup.py/str/test_filter_spec_resolution__accumulate_last_2_months_metric__result.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_spec_lookup.py/str/test_filter_spec_resolution__accumulate_last_2_months_metric__result.txt diff --git a/tests/snapshots/test_spec_lookup.py/str/test_filter_spec_resolution__derived_metric_with_different_parent_time_grains__result.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_spec_lookup.py/str/test_filter_spec_resolution__derived_metric_with_different_parent_time_grains__result.txt similarity index 100% rename from tests/snapshots/test_spec_lookup.py/str/test_filter_spec_resolution__derived_metric_with_different_parent_time_grains__result.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_spec_lookup.py/str/test_filter_spec_resolution__derived_metric_with_different_parent_time_grains__result.txt diff --git a/tests/snapshots/test_spec_lookup.py/str/test_filter_spec_resolution__derived_metric_with_same_parent_time_grains__result.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_spec_lookup.py/str/test_filter_spec_resolution__derived_metric_with_same_parent_time_grains__result.txt similarity index 100% rename from tests/snapshots/test_spec_lookup.py/str/test_filter_spec_resolution__derived_metric_with_same_parent_time_grains__result.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_spec_lookup.py/str/test_filter_spec_resolution__derived_metric_with_same_parent_time_grains__result.txt diff --git a/tests/snapshots/test_spec_lookup.py/str/test_filter_spec_resolution__metrics_with_different_time_grains__result.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_spec_lookup.py/str/test_filter_spec_resolution__metrics_with_different_time_grains__result.txt similarity index 100% rename from tests/snapshots/test_spec_lookup.py/str/test_filter_spec_resolution__metrics_with_different_time_grains__result.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_spec_lookup.py/str/test_filter_spec_resolution__metrics_with_different_time_grains__result.txt diff --git a/tests/snapshots/test_spec_lookup.py/str/test_filter_spec_resolution__metrics_with_same_time_grains__result.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_spec_lookup.py/str/test_filter_spec_resolution__metrics_with_same_time_grains__result.txt similarity index 100% rename from tests/snapshots/test_spec_lookup.py/str/test_filter_spec_resolution__metrics_with_same_time_grains__result.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_spec_lookup.py/str/test_filter_spec_resolution__metrics_with_same_time_grains__result.txt diff --git a/tests/snapshots/test_spec_lookup.py/str/test_filter_spec_resolution__no_metrics__result.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_spec_lookup.py/str/test_filter_spec_resolution__no_metrics__result.txt similarity index 100% rename from tests/snapshots/test_spec_lookup.py/str/test_filter_spec_resolution__no_metrics__result.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_spec_lookup.py/str/test_filter_spec_resolution__no_metrics__result.txt diff --git a/tests/snapshots/test_spec_lookup.py/str/test_filter_spec_resolution__simple_metric__result.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_spec_lookup.py/str/test_filter_spec_resolution__simple_metric__result.txt similarity index 100% rename from tests/snapshots/test_spec_lookup.py/str/test_filter_spec_resolution__simple_metric__result.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_spec_lookup.py/str/test_filter_spec_resolution__simple_metric__result.txt diff --git a/tests/snapshots/test_suggestions.py/str/test_suggestions_for_defined_filters_in_multi_metric_query__result_0.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_suggestions.py/str/test_suggestions_for_defined_filters_in_multi_metric_query__result_0.txt similarity index 100% rename from tests/snapshots/test_suggestions.py/str/test_suggestions_for_defined_filters_in_multi_metric_query__result_0.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_suggestions.py/str/test_suggestions_for_defined_filters_in_multi_metric_query__result_0.txt diff --git a/tests/snapshots/test_suggestions.py/str/test_suggestions_for_defined_where_filter__result_0.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_suggestions.py/str/test_suggestions_for_defined_where_filter__result_0.txt similarity index 100% rename from tests/snapshots/test_suggestions.py/str/test_suggestions_for_defined_where_filter__result_0.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_suggestions.py/str/test_suggestions_for_defined_where_filter__result_0.txt diff --git a/tests/snapshots/test_suggestions.py/str/test_suggestions_for_group_by_item__result_0.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_suggestions.py/str/test_suggestions_for_group_by_item__result_0.txt similarity index 100% rename from tests/snapshots/test_suggestions.py/str/test_suggestions_for_group_by_item__result_0.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_suggestions.py/str/test_suggestions_for_group_by_item__result_0.txt diff --git a/tests/snapshots/test_suggestions.py/str/test_suggestions_for_metric__result_0.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_suggestions.py/str/test_suggestions_for_metric__result_0.txt similarity index 100% rename from tests/snapshots/test_suggestions.py/str/test_suggestions_for_metric__result_0.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_suggestions.py/str/test_suggestions_for_metric__result_0.txt diff --git a/tests/snapshots/test_suggestions.py/str/test_suggestions_for_multiple_metrics__result_0.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_suggestions.py/str/test_suggestions_for_multiple_metrics__result_0.txt similarity index 100% rename from tests/snapshots/test_suggestions.py/str/test_suggestions_for_multiple_metrics__result_0.txt rename to metricflow-semantics/tests_metricflow_semantics/snapshots/test_suggestions.py/str/test_suggestions_for_multiple_metrics__result_0.txt diff --git a/tests/naming/__init__.py b/metricflow-semantics/tests_metricflow_semantics/specs/__init__.py similarity index 100% rename from tests/naming/__init__.py rename to metricflow-semantics/tests_metricflow_semantics/specs/__init__.py diff --git a/tests/specs/conftest.py b/metricflow-semantics/tests_metricflow_semantics/specs/conftest.py similarity index 63% rename from tests/specs/conftest.py rename to metricflow-semantics/tests_metricflow_semantics/specs/conftest.py index 41d99423ce..c5d20ec3a2 100644 --- a/tests/specs/conftest.py +++ b/metricflow-semantics/tests_metricflow_semantics/specs/conftest.py @@ -1,7 +1,6 @@ from __future__ import annotations from dbt_semantic_interfaces.references import MetricReference - -from metricflow.query.group_by_item.filter_spec_resolution.filter_location import WhereFilterLocation +from metricflow_semantics.query.group_by_item.filter_spec_resolution.filter_location import WhereFilterLocation EXAMPLE_FILTER_LOCATION = WhereFilterLocation.for_metric(MetricReference("example_metric")) diff --git a/tests/plan_conversion/__init__.py b/metricflow-semantics/tests_metricflow_semantics/specs/patterns/__init__.py similarity index 100% rename from tests/plan_conversion/__init__.py rename to metricflow-semantics/tests_metricflow_semantics/specs/patterns/__init__.py diff --git a/tests/specs/patterns/test_entity_link_pattern.py b/metricflow-semantics/tests_metricflow_semantics/specs/patterns/test_entity_link_pattern.py similarity index 95% rename from tests/specs/patterns/test_entity_link_pattern.py rename to metricflow-semantics/tests_metricflow_semantics/specs/patterns/test_entity_link_pattern.py index aea60bc2c0..cfb1c4da16 100644 --- a/tests/specs/patterns/test_entity_link_pattern.py +++ b/metricflow-semantics/tests_metricflow_semantics/specs/patterns/test_entity_link_pattern.py @@ -9,14 +9,19 @@ from dbt_semantic_interfaces.references import EntityReference from dbt_semantic_interfaces.type_enums import TimeGranularity from dbt_semantic_interfaces.type_enums.date_part import DatePart - -from metricflow.specs.patterns.entity_link_pattern import ( +from metricflow_semantics.specs.patterns.entity_link_pattern import ( EntityLinkPattern, EntityLinkPatternParameterSet, ParameterSetField, ) -from metricflow.specs.specs import DimensionSpec, EntitySpec, GroupByMetricSpec, LinkableInstanceSpec, TimeDimensionSpec -from tests.time.metric_time_dimension import MTD_SPEC_MONTH, MTD_SPEC_WEEK, MTD_SPEC_YEAR +from metricflow_semantics.specs.spec_classes import ( + DimensionSpec, + EntitySpec, + GroupByMetricSpec, + LinkableInstanceSpec, + TimeDimensionSpec, +) +from metricflow_semantics.test_helpers.metric_time_dimension import MTD_SPEC_MONTH, MTD_SPEC_WEEK, MTD_SPEC_YEAR logger = logging.getLogger(__name__) diff --git a/tests/specs/patterns/test_typed_patterns.py b/metricflow-semantics/tests_metricflow_semantics/specs/patterns/test_typed_patterns.py similarity index 95% rename from tests/specs/patterns/test_typed_patterns.py rename to metricflow-semantics/tests_metricflow_semantics/specs/patterns/test_typed_patterns.py index 754a06d660..4c16d8f016 100644 --- a/tests/specs/patterns/test_typed_patterns.py +++ b/metricflow-semantics/tests_metricflow_semantics/specs/patterns/test_typed_patterns.py @@ -18,14 +18,19 @@ ) from dbt_semantic_interfaces.type_enums import TimeGranularity from dbt_semantic_interfaces.type_enums.date_part import DatePart - -from metricflow.specs.patterns.typed_patterns import ( +from metricflow_semantics.specs.patterns.typed_patterns import ( DimensionPattern, EntityPattern, GroupByMetricPattern, TimeDimensionPattern, ) -from metricflow.specs.specs import DimensionSpec, EntitySpec, GroupByMetricSpec, LinkableInstanceSpec, TimeDimensionSpec +from metricflow_semantics.specs.spec_classes import ( + DimensionSpec, + EntitySpec, + GroupByMetricSpec, + LinkableInstanceSpec, + TimeDimensionSpec, +) logger = logging.getLogger(__name__) diff --git a/tests/specs/test_time_dimension_spec.py b/metricflow-semantics/tests_metricflow_semantics/specs/test_time_dimension_spec.py similarity index 93% rename from tests/specs/test_time_dimension_spec.py rename to metricflow-semantics/tests_metricflow_semantics/specs/test_time_dimension_spec.py index 9939458891..7bcba39570 100644 --- a/tests/specs/test_time_dimension_spec.py +++ b/metricflow-semantics/tests_metricflow_semantics/specs/test_time_dimension_spec.py @@ -4,8 +4,7 @@ from dbt_semantic_interfaces.references import EntityReference from dbt_semantic_interfaces.type_enums import TimeGranularity - -from metricflow.specs.specs import TimeDimensionSpec, TimeDimensionSpecField +from metricflow_semantics.specs.spec_classes import TimeDimensionSpec, TimeDimensionSpecField logger = logging.getLogger(__name__) diff --git a/tests/specs/test_where_filter_entity.py b/metricflow-semantics/tests_metricflow_semantics/specs/test_where_filter_entity.py similarity index 53% rename from tests/specs/test_where_filter_entity.py rename to metricflow-semantics/tests_metricflow_semantics/specs/test_where_filter_entity.py index 1e7606554c..21890fcb8b 100644 --- a/tests/specs/test_where_filter_entity.py +++ b/metricflow-semantics/tests_metricflow_semantics/specs/test_where_filter_entity.py @@ -1,13 +1,15 @@ from __future__ import annotations import pytest +from metricflow_semantics.errors.error_classes import InvalidQuerySyntax +from metricflow_semantics.query.group_by_item.filter_spec_resolution.filter_spec_lookup import ( + FilterSpecResolutionLookUp, +) +from metricflow_semantics.specs.column_assoc import ColumnAssociationResolver +from metricflow_semantics.specs.rendered_spec_tracker import RenderedSpecTracker +from metricflow_semantics.specs.where_filter_entity import WhereFilterEntity -from metricflow.errors.errors import InvalidQuerySyntax -from metricflow.query.group_by_item.filter_spec_resolution.filter_spec_lookup import FilterSpecResolutionLookUp -from metricflow.specs.column_assoc import ColumnAssociationResolver -from metricflow.specs.rendered_spec_tracker import RenderedSpecTracker -from metricflow.specs.where_filter_entity import WhereFilterEntity -from tests.specs.conftest import EXAMPLE_FILTER_LOCATION +from tests_metricflow_semantics.specs.conftest import EXAMPLE_FILTER_LOCATION def test_descending_cannot_be_set( # noqa diff --git a/tests/plan_conversion/dataflow_to_sql/__init__.py b/metricflow-semantics/tests_metricflow_semantics/sql/__init__.py similarity index 100% rename from tests/plan_conversion/dataflow_to_sql/__init__.py rename to metricflow-semantics/tests_metricflow_semantics/sql/__init__.py diff --git a/tests/sql/test_bind_parameter_serialization.py b/metricflow-semantics/tests_metricflow_semantics/sql/test_bind_parameter_serialization.py similarity index 89% rename from tests/sql/test_bind_parameter_serialization.py rename to metricflow-semantics/tests_metricflow_semantics/sql/test_bind_parameter_serialization.py index 9d0c4d9a81..7d4d8b3953 100644 --- a/tests/sql/test_bind_parameter_serialization.py +++ b/metricflow-semantics/tests_metricflow_semantics/sql/test_bind_parameter_serialization.py @@ -2,8 +2,7 @@ import pytest from dbt_semantic_interfaces.dataclass_serialization import DataClassDeserializer, DataclassSerializer - -from metricflow.sql.sql_bind_parameters import SqlBindParameter, SqlBindParameters, SqlBindParameterValue +from metricflow_semantics.sql.sql_bind_parameters import SqlBindParameter, SqlBindParameters, SqlBindParameterValue @pytest.fixture diff --git a/tests/test_specs.py b/metricflow-semantics/tests_metricflow_semantics/test_specs.py similarity index 99% rename from tests/test_specs.py rename to metricflow-semantics/tests_metricflow_semantics/test_specs.py index da922e61c9..41ffb13ba7 100644 --- a/tests/test_specs.py +++ b/metricflow-semantics/tests_metricflow_semantics/test_specs.py @@ -4,8 +4,7 @@ import pytest from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity - -from metricflow.specs.specs import ( +from metricflow_semantics.specs.spec_classes import ( DimensionSpec, EntityReference, EntitySpec, diff --git a/metricflow/dataflow/builder/dataflow_plan_builder.py b/metricflow/dataflow/builder/dataflow_plan_builder.py index d825701242..6f87ce0636 100644 --- a/metricflow/dataflow/builder/dataflow_plan_builder.py +++ b/metricflow/dataflow/builder/dataflow_plan_builder.py @@ -21,9 +21,41 @@ ) from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity from dbt_semantic_interfaces.validations.unique_valid_name import MetricFlowReservedKeywords +from metricflow_semantics.dag.id_prefix import StaticIdPrefix +from metricflow_semantics.dag.mf_dag import DagId +from metricflow_semantics.errors.error_classes import UnableToSatisfyQueryError +from metricflow_semantics.filters.time_constraint import TimeRangeConstraint +from metricflow_semantics.mf_logging.formatting import indent +from metricflow_semantics.mf_logging.pretty_print import mf_pformat +from metricflow_semantics.mf_logging.runtime import log_runtime +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.query.group_by_item.filter_spec_resolution.filter_location import WhereFilterLocation +from metricflow_semantics.query.group_by_item.filter_spec_resolution.filter_spec_lookup import ( + FilterSpecResolutionLookUp, +) +from metricflow_semantics.specs.column_assoc import ColumnAssociationResolver +from metricflow_semantics.specs.spec_classes import ( + ConstantPropertySpec, + CumulativeMeasureDescription, + EntitySpec, + InstanceSpecSet, + JoinToTimeSpineDescription, + LinkableInstanceSpec, + LinkableSpecSet, + LinklessEntitySpec, + MeasureSpec, + MetadataSpec, + MetricFlowQuerySpec, + MetricInputMeasureSpec, + MetricSpec, + NonAdditiveDimensionSpec, + OrderBySpec, + TimeDimensionSpec, + WhereFilterSpec, +) +from metricflow_semantics.specs.where_filter_transform import WhereSpecFactory +from metricflow_semantics.sql.sql_join_type import SqlJoinType -from metricflow.dag.id_prefix import StaticIdPrefix -from metricflow.dag.mf_dag import DagId from metricflow.dataflow.builder.node_data_set import DataflowPlanNodeOutputDataSetResolver from metricflow.dataflow.builder.node_evaluator import ( JoinLinkableInstancesRecipe, @@ -53,38 +85,8 @@ from metricflow.dataflow.nodes.write_to_dataframe import WriteToResultDataframeNode from metricflow.dataflow.nodes.write_to_table import WriteToResultTableNode from metricflow.dataflow.optimizer.dataflow_plan_optimizer import DataflowPlanOptimizer -from metricflow.dataset.dataset import DataSet -from metricflow.errors.errors import UnableToSatisfyQueryError -from metricflow.filters.time_constraint import TimeRangeConstraint -from metricflow.mf_logging.formatting import indent -from metricflow.mf_logging.pretty_print import mf_pformat -from metricflow.mf_logging.runtime import log_runtime -from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow.dataset.dataset_classes import DataSet from metricflow.plan_conversion.node_processor import PreJoinNodeProcessor -from metricflow.query.group_by_item.filter_spec_resolution.filter_location import WhereFilterLocation -from metricflow.query.group_by_item.filter_spec_resolution.filter_spec_lookup import FilterSpecResolutionLookUp -from metricflow.specs.column_assoc import ColumnAssociationResolver -from metricflow.specs.specs import ( - ConstantPropertySpec, - CumulativeMeasureDescription, - EntitySpec, - InstanceSpecSet, - JoinToTimeSpineDescription, - LinkableInstanceSpec, - LinkableSpecSet, - LinklessEntitySpec, - MeasureSpec, - MetadataSpec, - MetricFlowQuerySpec, - MetricInputMeasureSpec, - MetricSpec, - NonAdditiveDimensionSpec, - OrderBySpec, - TimeDimensionSpec, - WhereFilterSpec, -) -from metricflow.specs.where_filter_transform import WhereSpecFactory -from metricflow.sql.sql_plan import SqlJoinType from metricflow.sql.sql_table import SqlTable logger = logging.getLogger(__name__) diff --git a/metricflow/dataflow/builder/measure_additiveness.py b/metricflow/dataflow/builder/measure_additiveness.py index ad805870bf..2eb0c9a877 100644 --- a/metricflow/dataflow/builder/measure_additiveness.py +++ b/metricflow/dataflow/builder/measure_additiveness.py @@ -4,7 +4,7 @@ from dataclasses import dataclass from typing import Dict, Optional, Sequence, Tuple -from metricflow.specs.specs import MeasureSpec, NonAdditiveDimensionSpec +from metricflow_semantics.specs.spec_classes import MeasureSpec, NonAdditiveDimensionSpec @dataclass(frozen=True) diff --git a/metricflow/dataflow/builder/node_data_set.py b/metricflow/dataflow/builder/node_data_set.py index 303a1a6e35..46e7d80921 100644 --- a/metricflow/dataflow/builder/node_data_set.py +++ b/metricflow/dataflow/builder/node_data_set.py @@ -2,16 +2,17 @@ from typing import TYPE_CHECKING, Dict, Optional, Sequence +from metricflow_semantics.mf_logging.runtime import log_block_runtime +from metricflow_semantics.specs.column_assoc import ColumnAssociationResolver + from metricflow.dataflow.dataflow_plan import ( DataflowPlanNode, ) from metricflow.dataset.sql_dataset import SqlDataSet -from metricflow.mf_logging.runtime import log_block_runtime from metricflow.plan_conversion.dataflow_to_sql import DataflowToSqlQueryPlanConverter -from metricflow.specs.column_assoc import ColumnAssociationResolver if TYPE_CHECKING: - from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup + from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup class DataflowPlanNodeOutputDataSetResolver(DataflowToSqlQueryPlanConverter): diff --git a/metricflow/dataflow/builder/node_evaluator.py b/metricflow/dataflow/builder/node_evaluator.py index 995d7fca29..858f320059 100644 --- a/metricflow/dataflow/builder/node_evaluator.py +++ b/metricflow/dataflow/builder/node_evaluator.py @@ -22,6 +22,17 @@ from typing import List, Optional, Sequence, Tuple from dbt_semantic_interfaces.naming.keywords import METRIC_TIME_ELEMENT_NAME +from metricflow_semantics.instances import InstanceSet +from metricflow_semantics.mf_logging.pretty_print import mf_pformat +from metricflow_semantics.model.semantics.semantic_model_join_evaluator import SemanticModelJoinEvaluator +from metricflow_semantics.model.semantics.semantic_model_lookup import SemanticModelLookup +from metricflow_semantics.specs.spec_classes import ( + InstanceSpecSet, + LinkableInstanceSpec, + LinkableSpecSet, + LinklessEntitySpec, +) +from metricflow_semantics.sql.sql_join_type import SqlJoinType from metricflow.dataflow.builder.node_data_set import DataflowPlanNodeOutputDataSetResolver from metricflow.dataflow.builder.partitions import ( @@ -34,15 +45,9 @@ from metricflow.dataflow.nodes.filter_elements import FilterElementsNode from metricflow.dataflow.nodes.join_to_base import JoinDescription, ValidityWindowJoinDescription from metricflow.dataflow.nodes.metric_time_transform import MetricTimeDimensionTransformNode -from metricflow.dataset.dataset import DataSet +from metricflow.dataset.dataset_classes import DataSet from metricflow.dataset.sql_dataset import SqlDataSet -from metricflow.instances import InstanceSet -from metricflow.mf_logging.pretty_print import mf_pformat -from metricflow.model.semantics.semantic_model_join_evaluator import SemanticModelJoinEvaluator -from metricflow.model.semantics.semantic_model_lookup import SemanticModelLookup from metricflow.plan_conversion.instance_converters import CreateValidityWindowJoinDescription -from metricflow.specs.specs import InstanceSpecSet, LinkableInstanceSpec, LinkableSpecSet, LinklessEntitySpec -from metricflow.sql.sql_plan import SqlJoinType logger = logging.getLogger(__name__) diff --git a/metricflow/dataflow/builder/partitions.py b/metricflow/dataflow/builder/partitions.py index 00c7d0bd66..0d65e7f76f 100644 --- a/metricflow/dataflow/builder/partitions.py +++ b/metricflow/dataflow/builder/partitions.py @@ -4,15 +4,16 @@ from dataclasses import dataclass from typing import List, Sequence, Tuple -from metricflow.dataset.dataset import DataSet -from metricflow.model.semantics.semantic_model_lookup import SemanticModelLookup -from metricflow.specs.specs import ( +from metricflow_semantics.model.semantics.semantic_model_lookup import SemanticModelLookup +from metricflow_semantics.specs.spec_classes import ( DimensionSpec, InstanceSpecSet, PartitionSpecSet, TimeDimensionSpec, ) +from metricflow.dataset.dataset_classes import DataSet + @dataclass(frozen=True) class PartitionDimensionJoinDescription: diff --git a/metricflow/dataflow/builder/source_node.py b/metricflow/dataflow/builder/source_node.py index b893518cbd..0777cf000b 100644 --- a/metricflow/dataflow/builder/source_node.py +++ b/metricflow/dataflow/builder/source_node.py @@ -4,6 +4,8 @@ from typing import List, Sequence, Tuple from dbt_semantic_interfaces.references import TimeDimensionReference +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.specs.column_assoc import ColumnAssociationResolver from metricflow.dataflow.dataflow_plan import ( BaseOutput, @@ -12,8 +14,7 @@ from metricflow.dataflow.nodes.read_sql_source import ReadSqlSourceNode from metricflow.dataset.convert_semantic_model import SemanticModelToDataSetConverter from metricflow.dataset.semantic_model_adapter import SemanticModelDataSet -from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup -from metricflow.specs.column_assoc import ColumnAssociationResolver +from metricflow.plan_conversion.time_spine import TimeSpineSource @dataclass(frozen=True) @@ -54,7 +55,7 @@ def __init__( # noqa: D107 ) -> None: self._semantic_manifest_lookup = semantic_manifest_lookup data_set_converter = SemanticModelToDataSetConverter(column_association_resolver) - time_spine_source = self._semantic_manifest_lookup.time_spine_source + time_spine_source = TimeSpineSource.create_from_manifest(semantic_manifest_lookup.semantic_manifest) time_spine_data_set = data_set_converter.build_time_spine_source_data_set(time_spine_source) time_dim_reference = TimeDimensionReference(element_name=time_spine_source.time_column_name) self._time_spine_source_node = MetricTimeDimensionTransformNode( diff --git a/metricflow/dataflow/dataflow_plan.py b/metricflow/dataflow/dataflow_plan.py index fcfa0d6b24..6032012948 100644 --- a/metricflow/dataflow/dataflow_plan.py +++ b/metricflow/dataflow/dataflow_plan.py @@ -7,9 +7,9 @@ from abc import ABC, abstractmethod from typing import Generic, Optional, Sequence, Type, TypeVar -from metricflow.dag.id_prefix import StaticIdPrefix -from metricflow.dag.mf_dag import DagId, DagNode, MetricFlowDag, NodeId -from metricflow.visitor import Visitable, VisitorOutputT +from metricflow_semantics.dag.id_prefix import StaticIdPrefix +from metricflow_semantics.dag.mf_dag import DagId, DagNode, MetricFlowDag, NodeId +from metricflow_semantics.visitor import Visitable, VisitorOutputT if typing.TYPE_CHECKING: from metricflow.dataflow.nodes.add_generated_uuid import AddGeneratedUuidColumnNode diff --git a/metricflow/dataflow/nodes/add_generated_uuid.py b/metricflow/dataflow/nodes/add_generated_uuid.py index cebb7bdcd4..eb39bed52f 100644 --- a/metricflow/dataflow/nodes/add_generated_uuid.py +++ b/metricflow/dataflow/nodes/add_generated_uuid.py @@ -2,10 +2,11 @@ from typing import Sequence -from metricflow.dag.id_prefix import IdPrefix, StaticIdPrefix -from metricflow.dag.mf_dag import DisplayedProperty +from metricflow_semantics.dag.id_prefix import IdPrefix, StaticIdPrefix +from metricflow_semantics.dag.mf_dag import DisplayedProperty +from metricflow_semantics.visitor import VisitorOutputT + from metricflow.dataflow.dataflow_plan import BaseOutput, DataflowPlanNode, DataflowPlanNodeVisitor -from metricflow.visitor import VisitorOutputT class AddGeneratedUuidColumnNode(BaseOutput): diff --git a/metricflow/dataflow/nodes/aggregate_measures.py b/metricflow/dataflow/nodes/aggregate_measures.py index cacaa13800..ea567fb16b 100644 --- a/metricflow/dataflow/nodes/aggregate_measures.py +++ b/metricflow/dataflow/nodes/aggregate_measures.py @@ -3,10 +3,11 @@ from abc import ABC from typing import Sequence, Tuple -from metricflow.dag.id_prefix import IdPrefix, StaticIdPrefix +from metricflow_semantics.dag.id_prefix import IdPrefix, StaticIdPrefix +from metricflow_semantics.specs.spec_classes import MetricInputMeasureSpec +from metricflow_semantics.visitor import VisitorOutputT + from metricflow.dataflow.dataflow_plan import BaseOutput, DataflowPlanNode, DataflowPlanNodeVisitor -from metricflow.specs.specs import MetricInputMeasureSpec -from metricflow.visitor import VisitorOutputT class AggregatedMeasuresOutput(BaseOutput, ABC): diff --git a/metricflow/dataflow/nodes/combine_aggregated_outputs.py b/metricflow/dataflow/nodes/combine_aggregated_outputs.py index ffbe66cbe4..e9fc415e42 100644 --- a/metricflow/dataflow/nodes/combine_aggregated_outputs.py +++ b/metricflow/dataflow/nodes/combine_aggregated_outputs.py @@ -2,14 +2,15 @@ from typing import Sequence, Union -from metricflow.dag.id_prefix import IdPrefix, StaticIdPrefix +from metricflow_semantics.dag.id_prefix import IdPrefix, StaticIdPrefix +from metricflow_semantics.visitor import VisitorOutputT + from metricflow.dataflow.dataflow_plan import ( BaseOutput, ComputedMetricsOutput, DataflowPlanNode, DataflowPlanNodeVisitor, ) -from metricflow.visitor import VisitorOutputT class CombineAggregatedOutputsNode(ComputedMetricsOutput): diff --git a/metricflow/dataflow/nodes/compute_metrics.py b/metricflow/dataflow/nodes/compute_metrics.py index ab36ad9e1c..873816b2d2 100644 --- a/metricflow/dataflow/nodes/compute_metrics.py +++ b/metricflow/dataflow/nodes/compute_metrics.py @@ -2,16 +2,17 @@ from typing import Sequence -from metricflow.dag.id_prefix import IdPrefix, StaticIdPrefix -from metricflow.dag.mf_dag import DisplayedProperty +from metricflow_semantics.dag.id_prefix import IdPrefix, StaticIdPrefix +from metricflow_semantics.dag.mf_dag import DisplayedProperty +from metricflow_semantics.specs.spec_classes import MetricSpec +from metricflow_semantics.visitor import VisitorOutputT + from metricflow.dataflow.dataflow_plan import ( BaseOutput, ComputedMetricsOutput, DataflowPlanNode, DataflowPlanNodeVisitor, ) -from metricflow.specs.specs import MetricSpec -from metricflow.visitor import VisitorOutputT class ComputeMetricsNode(ComputedMetricsOutput): diff --git a/metricflow/dataflow/nodes/constrain_time.py b/metricflow/dataflow/nodes/constrain_time.py index 6a0ddbc16f..66711a1b14 100644 --- a/metricflow/dataflow/nodes/constrain_time.py +++ b/metricflow/dataflow/nodes/constrain_time.py @@ -2,12 +2,13 @@ from typing import Sequence -from metricflow.dag.id_prefix import IdPrefix, StaticIdPrefix -from metricflow.dag.mf_dag import DisplayedProperty +from metricflow_semantics.dag.id_prefix import IdPrefix, StaticIdPrefix +from metricflow_semantics.dag.mf_dag import DisplayedProperty +from metricflow_semantics.filters.time_constraint import TimeRangeConstraint +from metricflow_semantics.visitor import VisitorOutputT + from metricflow.dataflow.dataflow_plan import BaseOutput, DataflowPlanNode, DataflowPlanNodeVisitor from metricflow.dataflow.nodes.aggregate_measures import AggregatedMeasuresOutput -from metricflow.filters.time_constraint import TimeRangeConstraint -from metricflow.visitor import VisitorOutputT class ConstrainTimeRangeNode(AggregatedMeasuresOutput, BaseOutput): diff --git a/metricflow/dataflow/nodes/filter_elements.py b/metricflow/dataflow/nodes/filter_elements.py index aff60197c0..3d110e7e9f 100644 --- a/metricflow/dataflow/nodes/filter_elements.py +++ b/metricflow/dataflow/nodes/filter_elements.py @@ -2,12 +2,13 @@ from typing import Optional, Sequence, Tuple -from metricflow.dag.id_prefix import IdPrefix, StaticIdPrefix -from metricflow.dag.mf_dag import DisplayedProperty +from metricflow_semantics.dag.id_prefix import IdPrefix, StaticIdPrefix +from metricflow_semantics.dag.mf_dag import DisplayedProperty +from metricflow_semantics.mf_logging.pretty_print import mf_pformat +from metricflow_semantics.specs.spec_classes import InstanceSpecSet +from metricflow_semantics.visitor import VisitorOutputT + from metricflow.dataflow.dataflow_plan import BaseOutput, DataflowPlanNode, DataflowPlanNodeVisitor -from metricflow.mf_logging.pretty_print import mf_pformat -from metricflow.specs.specs import InstanceSpecSet -from metricflow.visitor import VisitorOutputT class FilterElementsNode(BaseOutput): diff --git a/metricflow/dataflow/nodes/join_conversion_events.py b/metricflow/dataflow/nodes/join_conversion_events.py index 825005dbc8..fe029a4b05 100644 --- a/metricflow/dataflow/nodes/join_conversion_events.py +++ b/metricflow/dataflow/nodes/join_conversion_events.py @@ -3,12 +3,18 @@ from typing import Optional, Sequence from dbt_semantic_interfaces.protocols import MetricTimeWindow +from metricflow_semantics.dag.id_prefix import IdPrefix, StaticIdPrefix +from metricflow_semantics.dag.mf_dag import DisplayedProperty +from metricflow_semantics.specs.spec_classes import ( + ConstantPropertySpec, + EntitySpec, + InstanceSpec, + MeasureSpec, + TimeDimensionSpec, +) +from metricflow_semantics.visitor import VisitorOutputT -from metricflow.dag.id_prefix import IdPrefix, StaticIdPrefix -from metricflow.dag.mf_dag import DisplayedProperty from metricflow.dataflow.dataflow_plan import BaseOutput, DataflowPlanNode, DataflowPlanNodeVisitor -from metricflow.specs.specs import ConstantPropertySpec, EntitySpec, InstanceSpec, MeasureSpec, TimeDimensionSpec -from metricflow.visitor import VisitorOutputT class JoinConversionEventsNode(BaseOutput): diff --git a/metricflow/dataflow/nodes/join_over_time.py b/metricflow/dataflow/nodes/join_over_time.py index 7e6736a7ec..3b2b51f0b2 100644 --- a/metricflow/dataflow/nodes/join_over_time.py +++ b/metricflow/dataflow/nodes/join_over_time.py @@ -4,13 +4,13 @@ from dbt_semantic_interfaces.protocols import MetricTimeWindow from dbt_semantic_interfaces.type_enums import TimeGranularity +from metricflow_semantics.dag.id_prefix import IdPrefix, StaticIdPrefix +from metricflow_semantics.dag.mf_dag import DisplayedProperty, NodeId +from metricflow_semantics.filters.time_constraint import TimeRangeConstraint +from metricflow_semantics.specs.spec_classes import TimeDimensionSpec +from metricflow_semantics.visitor import VisitorOutputT -from metricflow.dag.id_prefix import IdPrefix, StaticIdPrefix -from metricflow.dag.mf_dag import DisplayedProperty, NodeId from metricflow.dataflow.dataflow_plan import BaseOutput, DataflowPlanNode, DataflowPlanNodeVisitor -from metricflow.filters.time_constraint import TimeRangeConstraint -from metricflow.specs.specs import TimeDimensionSpec -from metricflow.visitor import VisitorOutputT class JoinOverTimeRangeNode(BaseOutput): diff --git a/metricflow/dataflow/nodes/join_to_base.py b/metricflow/dataflow/nodes/join_to_base.py index 751159dcc0..870fe3fb38 100644 --- a/metricflow/dataflow/nodes/join_to_base.py +++ b/metricflow/dataflow/nodes/join_to_base.py @@ -3,16 +3,17 @@ from dataclasses import dataclass from typing import List, Optional, Sequence, Tuple -from metricflow.dag.id_prefix import IdPrefix, StaticIdPrefix -from metricflow.dag.mf_dag import DisplayedProperty, NodeId +from metricflow_semantics.dag.id_prefix import IdPrefix, StaticIdPrefix +from metricflow_semantics.dag.mf_dag import DisplayedProperty, NodeId +from metricflow_semantics.specs.spec_classes import LinklessEntitySpec, TimeDimensionSpec +from metricflow_semantics.sql.sql_join_type import SqlJoinType +from metricflow_semantics.visitor import VisitorOutputT + from metricflow.dataflow.builder.partitions import ( PartitionDimensionJoinDescription, PartitionTimeDimensionJoinDescription, ) from metricflow.dataflow.dataflow_plan import BaseOutput, DataflowPlanNode, DataflowPlanNodeVisitor -from metricflow.specs.specs import LinklessEntitySpec, TimeDimensionSpec -from metricflow.sql.sql_plan import SqlJoinType -from metricflow.visitor import VisitorOutputT @dataclass(frozen=True) diff --git a/metricflow/dataflow/nodes/join_to_time_spine.py b/metricflow/dataflow/nodes/join_to_time_spine.py index 0ec4daec3f..309320a1d3 100644 --- a/metricflow/dataflow/nodes/join_to_time_spine.py +++ b/metricflow/dataflow/nodes/join_to_time_spine.py @@ -5,14 +5,14 @@ from dbt_semantic_interfaces.protocols import MetricTimeWindow from dbt_semantic_interfaces.type_enums import TimeGranularity +from metricflow_semantics.dag.id_prefix import IdPrefix, StaticIdPrefix +from metricflow_semantics.dag.mf_dag import DisplayedProperty +from metricflow_semantics.filters.time_constraint import TimeRangeConstraint +from metricflow_semantics.specs.spec_classes import TimeDimensionSpec +from metricflow_semantics.sql.sql_join_type import SqlJoinType +from metricflow_semantics.visitor import VisitorOutputT -from metricflow.dag.id_prefix import IdPrefix, StaticIdPrefix -from metricflow.dag.mf_dag import DisplayedProperty from metricflow.dataflow.dataflow_plan import BaseOutput, DataflowPlanNode, DataflowPlanNodeVisitor -from metricflow.filters.time_constraint import TimeRangeConstraint -from metricflow.specs.specs import TimeDimensionSpec -from metricflow.sql.sql_plan import SqlJoinType -from metricflow.visitor import VisitorOutputT class JoinToTimeSpineNode(BaseOutput, ABC): diff --git a/metricflow/dataflow/nodes/metric_time_transform.py b/metricflow/dataflow/nodes/metric_time_transform.py index 882f1e11fb..08e46336e3 100644 --- a/metricflow/dataflow/nodes/metric_time_transform.py +++ b/metricflow/dataflow/nodes/metric_time_transform.py @@ -3,11 +3,11 @@ from typing import Sequence from dbt_semantic_interfaces.references import TimeDimensionReference +from metricflow_semantics.dag.id_prefix import IdPrefix, StaticIdPrefix +from metricflow_semantics.dag.mf_dag import DisplayedProperty +from metricflow_semantics.visitor import VisitorOutputT -from metricflow.dag.id_prefix import IdPrefix, StaticIdPrefix -from metricflow.dag.mf_dag import DisplayedProperty from metricflow.dataflow.dataflow_plan import BaseOutput, DataflowPlanNode, DataflowPlanNodeVisitor -from metricflow.visitor import VisitorOutputT class MetricTimeDimensionTransformNode(BaseOutput): diff --git a/metricflow/dataflow/nodes/min_max.py b/metricflow/dataflow/nodes/min_max.py index 08e54b718c..6825175e2a 100644 --- a/metricflow/dataflow/nodes/min_max.py +++ b/metricflow/dataflow/nodes/min_max.py @@ -2,9 +2,10 @@ from typing import Sequence -from metricflow.dag.id_prefix import IdPrefix, StaticIdPrefix +from metricflow_semantics.dag.id_prefix import IdPrefix, StaticIdPrefix +from metricflow_semantics.visitor import VisitorOutputT + from metricflow.dataflow.dataflow_plan import BaseOutput, DataflowPlanNode, DataflowPlanNodeVisitor -from metricflow.visitor import VisitorOutputT class MinMaxNode(BaseOutput): diff --git a/metricflow/dataflow/nodes/order_by_limit.py b/metricflow/dataflow/nodes/order_by_limit.py index 8e838a773f..be4643e773 100644 --- a/metricflow/dataflow/nodes/order_by_limit.py +++ b/metricflow/dataflow/nodes/order_by_limit.py @@ -2,16 +2,17 @@ from typing import Optional, Sequence, Union -from metricflow.dag.id_prefix import IdPrefix, StaticIdPrefix -from metricflow.dag.mf_dag import DisplayedProperty +from metricflow_semantics.dag.id_prefix import IdPrefix, StaticIdPrefix +from metricflow_semantics.dag.mf_dag import DisplayedProperty +from metricflow_semantics.specs.spec_classes import OrderBySpec +from metricflow_semantics.visitor import VisitorOutputT + from metricflow.dataflow.dataflow_plan import ( BaseOutput, ComputedMetricsOutput, DataflowPlanNode, DataflowPlanNodeVisitor, ) -from metricflow.specs.specs import OrderBySpec -from metricflow.visitor import VisitorOutputT class OrderByLimitNode(ComputedMetricsOutput): diff --git a/metricflow/dataflow/nodes/read_sql_source.py b/metricflow/dataflow/nodes/read_sql_source.py index 9c6233f374..8c0ce2cc5d 100644 --- a/metricflow/dataflow/nodes/read_sql_source.py +++ b/metricflow/dataflow/nodes/read_sql_source.py @@ -4,12 +4,12 @@ from typing import Sequence import jinja2 +from metricflow_semantics.dag.id_prefix import IdPrefix, StaticIdPrefix +from metricflow_semantics.dag.mf_dag import DisplayedProperty +from metricflow_semantics.visitor import VisitorOutputT -from metricflow.dag.id_prefix import IdPrefix, StaticIdPrefix -from metricflow.dag.mf_dag import DisplayedProperty from metricflow.dataflow.dataflow_plan import BaseOutput, DataflowPlanNode, DataflowPlanNodeVisitor from metricflow.dataset.sql_dataset import SqlDataSet -from metricflow.visitor import VisitorOutputT class ReadSqlSourceNode(BaseOutput): diff --git a/metricflow/dataflow/nodes/semi_additive_join.py b/metricflow/dataflow/nodes/semi_additive_join.py index 5e4822d951..3641e7f813 100644 --- a/metricflow/dataflow/nodes/semi_additive_join.py +++ b/metricflow/dataflow/nodes/semi_additive_join.py @@ -3,12 +3,12 @@ from typing import Optional, Sequence from dbt_semantic_interfaces.type_enums import AggregationType +from metricflow_semantics.dag.id_prefix import IdPrefix, StaticIdPrefix +from metricflow_semantics.dag.mf_dag import DisplayedProperty +from metricflow_semantics.specs.spec_classes import LinklessEntitySpec, TimeDimensionSpec +from metricflow_semantics.visitor import VisitorOutputT -from metricflow.dag.id_prefix import IdPrefix, StaticIdPrefix -from metricflow.dag.mf_dag import DisplayedProperty from metricflow.dataflow.dataflow_plan import BaseOutput, DataflowPlanNode, DataflowPlanNodeVisitor -from metricflow.specs.specs import LinklessEntitySpec, TimeDimensionSpec -from metricflow.visitor import VisitorOutputT class SemiAdditiveJoinNode(BaseOutput): diff --git a/metricflow/dataflow/nodes/where_filter.py b/metricflow/dataflow/nodes/where_filter.py index 679f3ec6b3..e76d67bca4 100644 --- a/metricflow/dataflow/nodes/where_filter.py +++ b/metricflow/dataflow/nodes/where_filter.py @@ -2,12 +2,13 @@ from typing import Sequence -from metricflow.dag.id_prefix import IdPrefix, StaticIdPrefix -from metricflow.dag.mf_dag import DisplayedProperty +from metricflow_semantics.dag.id_prefix import IdPrefix, StaticIdPrefix +from metricflow_semantics.dag.mf_dag import DisplayedProperty +from metricflow_semantics.specs.spec_classes import WhereFilterSpec +from metricflow_semantics.visitor import VisitorOutputT + from metricflow.dataflow.dataflow_plan import BaseOutput, DataflowPlanNode, DataflowPlanNodeVisitor from metricflow.dataflow.nodes.aggregate_measures import AggregatedMeasuresOutput -from metricflow.specs.specs import WhereFilterSpec -from metricflow.visitor import VisitorOutputT class WhereConstraintNode(AggregatedMeasuresOutput): diff --git a/metricflow/dataflow/nodes/write_to_dataframe.py b/metricflow/dataflow/nodes/write_to_dataframe.py index 867523bde7..f3de8050c4 100644 --- a/metricflow/dataflow/nodes/write_to_dataframe.py +++ b/metricflow/dataflow/nodes/write_to_dataframe.py @@ -2,7 +2,9 @@ from typing import Sequence -from metricflow.dag.id_prefix import IdPrefix, StaticIdPrefix +from metricflow_semantics.dag.id_prefix import IdPrefix, StaticIdPrefix +from metricflow_semantics.visitor import VisitorOutputT + from metricflow.dataflow.dataflow_plan import ( BaseOutput, DataflowPlanNode, @@ -10,7 +12,6 @@ SinkNodeVisitor, SinkOutput, ) -from metricflow.visitor import VisitorOutputT class WriteToResultDataframeNode(SinkOutput): diff --git a/metricflow/dataflow/nodes/write_to_table.py b/metricflow/dataflow/nodes/write_to_table.py index d62647cfc2..72860e946e 100644 --- a/metricflow/dataflow/nodes/write_to_table.py +++ b/metricflow/dataflow/nodes/write_to_table.py @@ -2,7 +2,9 @@ from typing import Sequence -from metricflow.dag.id_prefix import IdPrefix, StaticIdPrefix +from metricflow_semantics.dag.id_prefix import IdPrefix, StaticIdPrefix +from metricflow_semantics.visitor import VisitorOutputT + from metricflow.dataflow.dataflow_plan import ( BaseOutput, DataflowPlanNode, @@ -11,7 +13,6 @@ SinkOutput, ) from metricflow.sql.sql_table import SqlTable -from metricflow.visitor import VisitorOutputT class WriteToResultTableNode(SinkOutput): diff --git a/metricflow/dataflow/optimizer/source_scan/cm_branch_combiner.py b/metricflow/dataflow/optimizer/source_scan/cm_branch_combiner.py index d7a9b89a82..f21f984514 100644 --- a/metricflow/dataflow/optimizer/source_scan/cm_branch_combiner.py +++ b/metricflow/dataflow/optimizer/source_scan/cm_branch_combiner.py @@ -4,6 +4,8 @@ from dataclasses import dataclass from typing import List, Optional, Sequence +from metricflow_semantics.specs.spec_classes import MetricSpec + from metricflow.dataflow.dataflow_plan import ( BaseOutput, DataflowPlanNode, @@ -28,7 +30,6 @@ from metricflow.dataflow.nodes.write_to_dataframe import WriteToResultDataframeNode from metricflow.dataflow.nodes.write_to_table import WriteToResultTableNode from metricflow.dataflow.optimizer.source_scan.matching_linkable_specs import MatchingLinkableSpecsTransform -from metricflow.specs.specs import MetricSpec logger = logging.getLogger(__name__) diff --git a/metricflow/dataflow/optimizer/source_scan/matching_linkable_specs.py b/metricflow/dataflow/optimizer/source_scan/matching_linkable_specs.py index f3292eaeab..e5b3c7da47 100644 --- a/metricflow/dataflow/optimizer/source_scan/matching_linkable_specs.py +++ b/metricflow/dataflow/optimizer/source_scan/matching_linkable_specs.py @@ -1,6 +1,6 @@ from __future__ import annotations -from metricflow.specs.specs import InstanceSpecSet, InstanceSpecSetTransform +from metricflow_semantics.specs.spec_classes import InstanceSpecSet, InstanceSpecSetTransform class MatchingLinkableSpecsTransform(InstanceSpecSetTransform[bool]): diff --git a/metricflow/dataflow/optimizer/source_scan/source_scan_optimizer.py b/metricflow/dataflow/optimizer/source_scan/source_scan_optimizer.py index 6d604e0fbb..640f0735bd 100644 --- a/metricflow/dataflow/optimizer/source_scan/source_scan_optimizer.py +++ b/metricflow/dataflow/optimizer/source_scan/source_scan_optimizer.py @@ -4,8 +4,9 @@ from dataclasses import dataclass from typing import List, Optional, Sequence -from metricflow.dag.id_prefix import StaticIdPrefix -from metricflow.dag.mf_dag import DagId +from metricflow_semantics.dag.id_prefix import StaticIdPrefix +from metricflow_semantics.dag.mf_dag import DagId + from metricflow.dataflow.dataflow_plan import ( BaseOutput, DataflowPlan, diff --git a/metricflow/dataset/convert_semantic_model.py b/metricflow/dataset/convert_semantic_model.py index d384c79636..964d0d4b50 100644 --- a/metricflow/dataset/convert_semantic_model.py +++ b/metricflow/dataset/convert_semantic_model.py @@ -15,30 +15,30 @@ ) from dbt_semantic_interfaces.type_enums.date_part import DatePart from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity - -from metricflow.aggregation_properties import AggregationState -from metricflow.dag.id_prefix import DynamicIdPrefix, StaticIdPrefix -from metricflow.dag.sequential_id import SequentialIdGenerator -from metricflow.dataset.semantic_model_adapter import SemanticModelDataSet -from metricflow.dataset.sql_dataset import SqlDataSet -from metricflow.instances import ( +from metricflow_semantics.aggregation_properties import AggregationState +from metricflow_semantics.dag.id_prefix import DynamicIdPrefix, StaticIdPrefix +from metricflow_semantics.dag.sequential_id import SequentialIdGenerator +from metricflow_semantics.instances import ( DimensionInstance, EntityInstance, InstanceSet, MeasureInstance, TimeDimensionInstance, ) -from metricflow.model.semantics.semantic_model_lookup import SemanticModelLookup -from metricflow.model.spec_converters import MeasureConverter -from metricflow.plan_conversion.time_spine import TIME_SPINE_DATA_SET_DESCRIPTION, TimeSpineSource -from metricflow.specs.column_assoc import ColumnAssociationResolver -from metricflow.specs.specs import ( +from metricflow_semantics.model.semantics.semantic_model_lookup import SemanticModelLookup +from metricflow_semantics.model.spec_converters import MeasureConverter +from metricflow_semantics.specs.column_assoc import ColumnAssociationResolver +from metricflow_semantics.specs.spec_classes import ( DEFAULT_TIME_GRANULARITY, DimensionSpec, EntityReference, EntitySpec, TimeDimensionSpec, ) + +from metricflow.dataset.semantic_model_adapter import SemanticModelDataSet +from metricflow.dataset.sql_dataset import SqlDataSet +from metricflow.plan_conversion.time_spine import TIME_SPINE_DATA_SET_DESCRIPTION, TimeSpineSource from metricflow.sql.sql_exprs import ( SqlColumnReference, SqlColumnReferenceExpression, diff --git a/metricflow/dataset/dataset.py b/metricflow/dataset/dataset_classes.py similarity index 95% rename from metricflow/dataset/dataset.py rename to metricflow/dataset/dataset_classes.py index 2d7b2fd86e..2a7ab1bbfe 100644 --- a/metricflow/dataset/dataset.py +++ b/metricflow/dataset/dataset_classes.py @@ -8,9 +8,8 @@ from dbt_semantic_interfaces.type_enums.date_part import DatePart from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity from dbt_semantic_interfaces.validations.unique_valid_name import MetricFlowReservedKeywords - -from metricflow.instances import InstanceSet, TimeDimensionInstance -from metricflow.specs.specs import TimeDimensionSpec +from metricflow_semantics.instances import InstanceSet, TimeDimensionInstance +from metricflow_semantics.specs.spec_classes import TimeDimensionSpec logger = logging.getLogger(__name__) diff --git a/metricflow/dataset/semantic_model_adapter.py b/metricflow/dataset/semantic_model_adapter.py index efe24dc035..bb3a54142d 100644 --- a/metricflow/dataset/semantic_model_adapter.py +++ b/metricflow/dataset/semantic_model_adapter.py @@ -1,10 +1,10 @@ from __future__ import annotations from dbt_semantic_interfaces.references import SemanticModelReference +from metricflow_semantics.instances import InstanceSet from typing_extensions import override from metricflow.dataset.sql_dataset import SqlDataSet -from metricflow.instances import InstanceSet from metricflow.sql.sql_plan import SqlSelectStatementNode diff --git a/metricflow/dataset/sql_dataset.py b/metricflow/dataset/sql_dataset.py index c59b1c48f4..ed358cb138 100644 --- a/metricflow/dataset/sql_dataset.py +++ b/metricflow/dataset/sql_dataset.py @@ -3,15 +3,15 @@ from typing import Optional, Sequence from dbt_semantic_interfaces.references import SemanticModelReference -from typing_extensions import override - -from metricflow.assert_one_arg import assert_exactly_one_arg_set -from metricflow.dataset.dataset import DataSet -from metricflow.instances import ( +from metricflow_semantics.assert_one_arg import assert_exactly_one_arg_set +from metricflow_semantics.instances import ( InstanceSet, ) -from metricflow.specs.column_assoc import ColumnAssociation -from metricflow.specs.specs import DimensionSpec, EntitySpec, TimeDimensionSpec +from metricflow_semantics.specs.column_assoc import ColumnAssociation +from metricflow_semantics.specs.spec_classes import DimensionSpec, EntitySpec, TimeDimensionSpec +from typing_extensions import override + +from metricflow.dataset.dataset_classes import DataSet from metricflow.sql.sql_plan import ( SqlQueryPlanNode, SqlSelectStatementNode, diff --git a/metricflow/engine/metricflow_engine.py b/metricflow/engine/metricflow_engine.py index 24318affe9..eb0e011623 100644 --- a/metricflow/engine/metricflow_engine.py +++ b/metricflow/engine/metricflow_engine.py @@ -12,8 +12,28 @@ from dbt_semantic_interfaces.implementations.filters.where_filter import PydanticWhereFilter from dbt_semantic_interfaces.references import EntityReference, MeasureReference, MetricReference from dbt_semantic_interfaces.type_enums import DimensionType +from metricflow_semantics.dag.sequential_id import SequentialIdGenerator +from metricflow_semantics.errors.error_classes import ExecutionException +from metricflow_semantics.filters.time_constraint import TimeRangeConstraint +from metricflow_semantics.mf_logging.formatting import indent +from metricflow_semantics.mf_logging.pretty_print import mf_pformat +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.model.semantics.linkable_element import ( + LinkableDimension, + LinkableElementProperty, +) +from metricflow_semantics.model.semantics.semantic_model_lookup import SemanticModelLookup +from metricflow_semantics.naming.linkable_spec_name import StructuredLinkableSpecName +from metricflow_semantics.protocols.query_parameter import GroupByParameter, MetricQueryParameter, OrderByQueryParameter +from metricflow_semantics.query.query_exceptions import InvalidQueryException +from metricflow_semantics.query.query_parser import MetricFlowQueryParser +from metricflow_semantics.random_id import random_id +from metricflow_semantics.specs.column_assoc import ColumnAssociationResolver +from metricflow_semantics.specs.dunder_column_association_resolver import DunderColumnAssociationResolver +from metricflow_semantics.specs.query_param_implementations import SavedQueryParameter +from metricflow_semantics.specs.spec_classes import InstanceSpecSet, MetricFlowQuerySpec +from metricflow_semantics.time.time_source import TimeSource -from metricflow.dag.sequential_id import SequentialIdGenerator from metricflow.dataflow.builder.dataflow_plan_builder import DataflowPlanBuilder from metricflow.dataflow.builder.node_data_set import DataflowPlanNodeOutputDataSetResolver from metricflow.dataflow.builder.source_node import SourceNodeBuilder @@ -22,42 +42,23 @@ SourceScanOptimizer, ) from metricflow.dataset.convert_semantic_model import SemanticModelToDataSetConverter -from metricflow.dataset.dataset import DataSet +from metricflow.dataset.dataset_classes import DataSet from metricflow.dataset.semantic_model_adapter import SemanticModelDataSet from metricflow.engine.models import Dimension, Entity, Measure, Metric, SavedQuery from metricflow.engine.time_source import ServerTimeSource -from metricflow.errors.errors import ExecutionException -from metricflow.execution.execution_plan import ExecutionPlan, SqlQuery -from metricflow.execution.executor import SequentialPlanExecutor -from metricflow.filters.time_constraint import TimeRangeConstraint -from metricflow.mf_logging.formatting import indent -from metricflow.mf_logging.pretty_print import mf_pformat -from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup -from metricflow.model.semantics.linkable_element import ( - LinkableDimension, - LinkableElementProperty, -) -from metricflow.model.semantics.semantic_model_lookup import SemanticModelLookup -from metricflow.naming.linkable_spec_name import StructuredLinkableSpecName -from metricflow.plan_conversion.column_resolver import DunderColumnAssociationResolver -from metricflow.plan_conversion.convert_to_execution_plan import ConvertToExecutionPlanResult -from metricflow.plan_conversion.dataflow_to_execution import ( +from metricflow.execution.convert_to_execution_plan import ConvertToExecutionPlanResult +from metricflow.execution.dataflow_to_execution import ( DataflowToExecutionPlanConverter, ) +from metricflow.execution.execution_plan import ExecutionPlan, SqlQuery +from metricflow.execution.executor import SequentialPlanExecutor from metricflow.plan_conversion.dataflow_to_sql import DataflowToSqlQueryPlanConverter -from metricflow.protocols.query_parameter import GroupByParameter, MetricQueryParameter, OrderByQueryParameter +from metricflow.plan_conversion.time_spine import TimeSpineSource from metricflow.protocols.sql_client import SqlClient -from metricflow.query.query_exceptions import InvalidQueryException -from metricflow.query.query_parser import MetricFlowQueryParser -from metricflow.random_id import random_id -from metricflow.specs.column_assoc import ColumnAssociationResolver -from metricflow.specs.query_param_implementations import SavedQueryParameter -from metricflow.specs.specs import InstanceSpecSet, MetricFlowQuerySpec from metricflow.sql.optimizer.optimization_levels import SqlQueryOptimizationLevel from metricflow.sql.sql_table import SqlTable from metricflow.telemetry.models import TelemetryLevel from metricflow.telemetry.reporter import TelemetryReporter, log_call -from metricflow.time.time_source import TimeSource logger = logging.getLogger(__name__) _telemetry_reporter = TelemetryReporter(report_levels_higher_or_equal_to=TelemetryLevel.USAGE) @@ -365,7 +366,7 @@ def __init__( DunderColumnAssociationResolver(semantic_manifest_lookup) ) self._time_source = time_source - self._time_spine_source = semantic_manifest_lookup.time_spine_source + self._time_spine_source = TimeSpineSource.create_from_manifest(semantic_manifest_lookup.semantic_manifest) self._source_data_sets: List[SemanticModelDataSet] = [] converter = SemanticModelToDataSetConverter(column_association_resolver=self._column_association_resolver) for semantic_model in sorted( diff --git a/metricflow/engine/models.py b/metricflow/engine/models.py index 6586d508d2..40aa85c45b 100644 --- a/metricflow/engine/models.py +++ b/metricflow/engine/models.py @@ -27,9 +27,8 @@ from dbt_semantic_interfaces.transformations.add_input_metric_measures import AddInputMetricMeasuresRule from dbt_semantic_interfaces.type_enums.aggregation_type import AggregationType from dbt_semantic_interfaces.type_enums.entity_type import EntityType - -from metricflow.naming.linkable_spec_name import StructuredLinkableSpecName -from metricflow.specs.specs import DimensionSpec, EntityReference +from metricflow_semantics.naming.linkable_spec_name import StructuredLinkableSpecName +from metricflow_semantics.specs.spec_classes import DimensionSpec, EntityReference @dataclass(frozen=True) diff --git a/metricflow/engine/time_source.py b/metricflow/engine/time_source.py index 7b021f2736..a8f0171dd8 100644 --- a/metricflow/engine/time_source.py +++ b/metricflow/engine/time_source.py @@ -2,7 +2,7 @@ import datetime as dt -from metricflow.time.time_source import TimeSource +from metricflow_semantics.time.time_source import TimeSource class ServerTimeSource(TimeSource): diff --git a/metricflow/plan_conversion/convert_to_execution_plan.py b/metricflow/execution/convert_to_execution_plan.py similarity index 100% rename from metricflow/plan_conversion/convert_to_execution_plan.py rename to metricflow/execution/convert_to_execution_plan.py diff --git a/metricflow/plan_conversion/dataflow_to_execution.py b/metricflow/execution/dataflow_to_execution.py similarity index 97% rename from metricflow/plan_conversion/dataflow_to_execution.py rename to metricflow/execution/dataflow_to_execution.py index f0c83b0481..1773e0ce39 100644 --- a/metricflow/plan_conversion/dataflow_to_execution.py +++ b/metricflow/execution/dataflow_to_execution.py @@ -11,12 +11,12 @@ ) from metricflow.dataflow.nodes.write_to_dataframe import WriteToResultDataframeNode from metricflow.dataflow.nodes.write_to_table import WriteToResultTableNode +from metricflow.execution.convert_to_execution_plan import ConvertToExecutionPlanResult from metricflow.execution.execution_plan import ( ExecutionPlan, SelectSqlQueryToDataFrameTask, SelectSqlQueryToTableTask, ) -from metricflow.plan_conversion.convert_to_execution_plan import ConvertToExecutionPlanResult from metricflow.plan_conversion.convert_to_sql_plan import ConvertToSqlPlanResult from metricflow.plan_conversion.dataflow_to_sql import DataflowToSqlQueryPlanConverter from metricflow.protocols.sql_client import SqlClient diff --git a/metricflow/execution/execution_plan.py b/metricflow/execution/execution_plan.py index 6f8e973706..0f03c25834 100644 --- a/metricflow/execution/execution_plan.py +++ b/metricflow/execution/execution_plan.py @@ -7,13 +7,13 @@ from typing import List, Optional, Sequence, Tuple import pandas as pd +from metricflow_semantics.dag.id_prefix import IdPrefix, StaticIdPrefix +from metricflow_semantics.dag.mf_dag import DagId, DagNode, DisplayedProperty, MetricFlowDag, NodeId +from metricflow_semantics.sql.sql_bind_parameters import SqlBindParameters +from metricflow_semantics.visitor import Visitable -from metricflow.dag.id_prefix import IdPrefix, StaticIdPrefix -from metricflow.dag.mf_dag import DagId, DagNode, DisplayedProperty, MetricFlowDag, NodeId from metricflow.protocols.sql_client import SqlClient -from metricflow.sql.sql_bind_parameters import SqlBindParameters from metricflow.sql.sql_table import SqlTable -from metricflow.visitor import Visitable logger = logging.getLogger(__name__) diff --git a/metricflow/execution/executor.py b/metricflow/execution/executor.py index 2663019120..ea8ba04595 100644 --- a/metricflow/execution/executor.py +++ b/metricflow/execution/executor.py @@ -5,7 +5,8 @@ from collections import OrderedDict from typing import Dict -from metricflow.dag.mf_dag import NodeId +from metricflow_semantics.dag.mf_dag import NodeId + from metricflow.execution.execution_plan import ExecutionPlan, ExecutionPlanTask, TaskExecutionResult logger = logging.getLogger(__name__) diff --git a/tests/plan_conversion/instance_converters/__init__.py b/metricflow/inference/rule/__init__.py similarity index 100% rename from tests/plan_conversion/instance_converters/__init__.py rename to metricflow/inference/rule/__init__.py diff --git a/metricflow/mf_logging/__init__.py b/metricflow/mf_logging/__init__.py deleted file mode 100644 index 482d894b76..0000000000 --- a/metricflow/mf_logging/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -"""Contains logging-related classes / functions. - -Named with the 'mf_' prefix to avoid collision with the built-in module. -""" diff --git a/metricflow/model/semantic_manifest_lookup.py b/metricflow/model/semantic_manifest_lookup.py deleted file mode 100644 index 6d47938975..0000000000 --- a/metricflow/model/semantic_manifest_lookup.py +++ /dev/null @@ -1,58 +0,0 @@ -from __future__ import annotations - -import logging - -from dbt_semantic_interfaces.protocols.semantic_manifest import SemanticManifest -from dbt_semantic_interfaces.type_enums import TimeGranularity - -from metricflow.mf_logging.pretty_print import mf_pformat -from metricflow.model.semantics.metric_lookup import MetricLookup -from metricflow.model.semantics.semantic_model_lookup import SemanticModelLookup -from metricflow.plan_conversion.time_spine import TimeSpineSource -from metricflow.sql.sql_table import SqlTable - -logger = logging.getLogger(__name__) - - -class SemanticManifestLookup: - """Adds semantics information to the user configured model.""" - - def __init__(self, semantic_manifest: SemanticManifest) -> None: # noqa: D107 - self._semantic_manifest = semantic_manifest - self._semantic_model_lookup = SemanticModelLookup(semantic_manifest) - self._metric_lookup = MetricLookup(self._semantic_manifest, self._semantic_model_lookup) - - @property - def semantic_manifest(self) -> SemanticManifest: # noqa: D102 - return self._semantic_manifest - - @property - def semantic_model_lookup(self) -> SemanticModelLookup: # noqa: D102 - return self._semantic_model_lookup - - @property - def metric_lookup(self) -> MetricLookup: # noqa: D102 - return self._metric_lookup - - @property - def time_spine_source(self) -> TimeSpineSource: # noqa: D102 - time_spine_table_configurations = self._semantic_manifest.project_configuration.time_spine_table_configurations - - if not ( - len(time_spine_table_configurations) == 1 - and time_spine_table_configurations[0].grain == TimeGranularity.DAY - ): - raise NotImplementedError( - f"Only a single time spine table configuration with {TimeGranularity.DAY} is currently " - f"supported. Got:\n" - f"{mf_pformat(time_spine_table_configurations)}" - ) - - time_spine_table_configuration = time_spine_table_configurations[0] - time_spine_table = SqlTable.from_string(time_spine_table_configuration.location) - return TimeSpineSource( - schema_name=time_spine_table.schema_name, - table_name=time_spine_table.table_name, - time_column_name=time_spine_table_configuration.column_name, - time_column_granularity=time_spine_table_configuration.grain, - ) diff --git a/metricflow/plan_conversion/convert_to_sql_plan.py b/metricflow/plan_conversion/convert_to_sql_plan.py index ae36364572..7b9eacfbb6 100644 --- a/metricflow/plan_conversion/convert_to_sql_plan.py +++ b/metricflow/plan_conversion/convert_to_sql_plan.py @@ -2,7 +2,8 @@ from dataclasses import dataclass -from metricflow.instances import InstanceSet +from metricflow_semantics.instances import InstanceSet + from metricflow.sql.sql_plan import SqlQueryPlan diff --git a/metricflow/plan_conversion/dataflow_to_sql.py b/metricflow/plan_conversion/dataflow_to_sql.py index 05ff5212e4..c4cacfd692 100644 --- a/metricflow/plan_conversion/dataflow_to_sql.py +++ b/metricflow/plan_conversion/dataflow_to_sql.py @@ -11,11 +11,36 @@ from dbt_semantic_interfaces.type_enums.aggregation_type import AggregationType from dbt_semantic_interfaces.type_enums.conversion_calculation_type import ConversionCalculationType from dbt_semantic_interfaces.validations.unique_valid_name import MetricFlowReservedKeywords +from metricflow_semantics.aggregation_properties import AggregationState +from metricflow_semantics.dag.id_prefix import StaticIdPrefix +from metricflow_semantics.dag.mf_dag import DagId +from metricflow_semantics.dag.sequential_id import SequentialIdGenerator +from metricflow_semantics.filters.time_constraint import TimeRangeConstraint +from metricflow_semantics.instances import ( + GroupByMetricInstance, + InstanceSet, + MetadataInstance, + MetricInstance, + TimeDimensionInstance, +) +from metricflow_semantics.mf_logging.formatting import indent +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.specs.column_assoc import ( + ColumnAssociation, + ColumnAssociationResolver, + SingleColumnCorrelationKey, +) +from metricflow_semantics.specs.spec_classes import ( + GroupByMetricSpec, + InstanceSpecSet, + MeasureSpec, + MetadataSpec, + MetricSpec, + TimeDimensionSpec, +) +from metricflow_semantics.sql.sql_join_type import SqlJoinType +from metricflow_semantics.time.time_constants import ISO8601_PYTHON_FORMAT -from metricflow.aggregation_properties import AggregationState -from metricflow.dag.id_prefix import StaticIdPrefix -from metricflow.dag.mf_dag import DagId -from metricflow.dag.sequential_id import SequentialIdGenerator from metricflow.dataflow.dataflow_plan import ( BaseOutput, DataflowPlanNode, @@ -39,18 +64,8 @@ from metricflow.dataflow.nodes.where_filter import WhereConstraintNode from metricflow.dataflow.nodes.write_to_dataframe import WriteToResultDataframeNode from metricflow.dataflow.nodes.write_to_table import WriteToResultTableNode -from metricflow.dataset.dataset import DataSet +from metricflow.dataset.dataset_classes import DataSet from metricflow.dataset.sql_dataset import SqlDataSet -from metricflow.filters.time_constraint import TimeRangeConstraint -from metricflow.instances import ( - GroupByMetricInstance, - InstanceSet, - MetadataInstance, - MetricInstance, - TimeDimensionInstance, -) -from metricflow.mf_logging.formatting import indent -from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup from metricflow.plan_conversion.convert_to_sql_plan import ConvertToSqlPlanResult from metricflow.plan_conversion.instance_converters import ( AddGroupByMetrics, @@ -87,15 +102,6 @@ ) from metricflow.plan_conversion.time_spine import TIME_SPINE_DATA_SET_DESCRIPTION, TimeSpineSource from metricflow.protocols.sql_client import SqlEngine -from metricflow.specs.column_assoc import ColumnAssociation, ColumnAssociationResolver, SingleColumnCorrelationKey -from metricflow.specs.specs import ( - GroupByMetricSpec, - InstanceSpecSet, - MeasureSpec, - MetadataSpec, - MetricSpec, - TimeDimensionSpec, -) from metricflow.sql.optimizer.optimization_levels import ( SqlQueryOptimizationLevel, SqlQueryOptimizerConfiguration, @@ -125,7 +131,6 @@ from metricflow.sql.sql_plan import ( SqlCreateTableAsNode, SqlJoinDescription, - SqlJoinType, SqlOrderByDescription, SqlQueryPlan, SqlQueryPlanNode, @@ -133,7 +138,6 @@ SqlSelectStatementNode, SqlTableFromClauseNode, ) -from metricflow.time.time_constants import ISO8601_PYTHON_FORMAT logger = logging.getLogger(__name__) @@ -178,7 +182,7 @@ def __init__( self._semantic_manifest_lookup = semantic_manifest_lookup self._metric_lookup = semantic_manifest_lookup.metric_lookup self._semantic_model_lookup = semantic_manifest_lookup.semantic_model_lookup - self._time_spine_source = semantic_manifest_lookup.time_spine_source + self._time_spine_source = TimeSpineSource.create_from_manifest(semantic_manifest_lookup.semantic_manifest) @property def column_association_resolver(self) -> ColumnAssociationResolver: # noqa: D102 diff --git a/metricflow/plan_conversion/instance_converters.py b/metricflow/plan_conversion/instance_converters.py index c60fba87be..1139d07831 100644 --- a/metricflow/plan_conversion/instance_converters.py +++ b/metricflow/plan_conversion/instance_converters.py @@ -12,12 +12,9 @@ from dbt_semantic_interfaces.type_enums.aggregation_type import AggregationType from dbt_semantic_interfaces.type_enums.date_part import DatePart from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity -from more_itertools import bucket - -from metricflow.aggregation_properties import AggregationState -from metricflow.assert_one_arg import assert_exactly_one_arg_set -from metricflow.dataflow.nodes.join_to_base import ValidityWindowJoinDescription -from metricflow.instances import ( +from metricflow_semantics.aggregation_properties import AggregationState +from metricflow_semantics.assert_one_arg import assert_exactly_one_arg_set +from metricflow_semantics.instances import ( DimensionInstance, EntityInstance, GroupByMetricInstance, @@ -29,11 +26,10 @@ MetricInstance, TimeDimensionInstance, ) -from metricflow.model.semantics.metric_lookup import MetricLookup -from metricflow.model.semantics.semantic_model_lookup import SemanticModelLookup -from metricflow.plan_conversion.select_column_gen import SelectColumnSet -from metricflow.specs.column_assoc import ColumnAssociationResolver -from metricflow.specs.specs import ( +from metricflow_semantics.model.semantics.metric_lookup import MetricLookup +from metricflow_semantics.model.semantics.semantic_model_lookup import SemanticModelLookup +from metricflow_semantics.specs.column_assoc import ColumnAssociationResolver +from metricflow_semantics.specs.spec_classes import ( DimensionSpec, EntityReference, EntitySpec, @@ -46,6 +42,10 @@ MetricInputMeasureSpec, TimeDimensionSpec, ) +from more_itertools import bucket + +from metricflow.dataflow.nodes.join_to_base import ValidityWindowJoinDescription +from metricflow.plan_conversion.select_column_gen import SelectColumnSet from metricflow.sql.sql_exprs import ( SqlAggregateFunctionExpression, SqlColumnReference, diff --git a/metricflow/plan_conversion/node_processor.py b/metricflow/plan_conversion/node_processor.py index d3bdcd5afe..f58756542d 100644 --- a/metricflow/plan_conversion/node_processor.py +++ b/metricflow/plan_conversion/node_processor.py @@ -5,6 +5,13 @@ from typing import List, Optional, Sequence, Set from dbt_semantic_interfaces.references import EntityReference, TimeDimensionReference +from metricflow_semantics.filters.time_constraint import TimeRangeConstraint +from metricflow_semantics.mf_logging.pretty_print import mf_pformat +from metricflow_semantics.model.semantics.semantic_model_join_evaluator import MAX_JOIN_HOPS +from metricflow_semantics.model.semantics.semantic_model_lookup import SemanticModelLookup +from metricflow_semantics.specs.spec_classes import InstanceSpecSet, LinkableInstanceSpec, LinklessEntitySpec +from metricflow_semantics.specs.spec_set_transforms import ToElementNameSet +from metricflow_semantics.sql.sql_join_type import SqlJoinType from metricflow.dataflow.builder.node_data_set import DataflowPlanNodeOutputDataSetResolver from metricflow.dataflow.builder.partitions import PartitionJoinResolver @@ -15,13 +22,7 @@ from metricflow.dataflow.nodes.filter_elements import FilterElementsNode from metricflow.dataflow.nodes.join_to_base import JoinDescription, JoinToBaseOutputNode from metricflow.dataflow.nodes.metric_time_transform import MetricTimeDimensionTransformNode -from metricflow.filters.time_constraint import TimeRangeConstraint -from metricflow.mf_logging.pretty_print import mf_pformat -from metricflow.model.semantics.semantic_model_join_evaluator import MAX_JOIN_HOPS, SemanticModelJoinEvaluator -from metricflow.model.semantics.semantic_model_lookup import SemanticModelLookup -from metricflow.specs.spec_set_transforms import ToElementNameSet -from metricflow.specs.specs import InstanceSpecSet, LinkableInstanceSpec, LinklessEntitySpec -from metricflow.sql.sql_plan import SqlJoinType +from metricflow.validation.dataflow_join_validator import JoinDataflowOutputValidator logger = logging.getLogger(__name__) @@ -84,7 +85,7 @@ def __init__( # noqa: D107 self._node_data_set_resolver = node_data_set_resolver self._partition_resolver = PartitionJoinResolver(semantic_model_lookup) self._semantic_model_lookup = semantic_model_lookup - self._join_evaluator = SemanticModelJoinEvaluator(semantic_model_lookup) + self._join_evaluator = JoinDataflowOutputValidator(semantic_model_lookup) def add_time_range_constraint( self, diff --git a/metricflow/plan_conversion/spec_transforms.py b/metricflow/plan_conversion/spec_transforms.py index ec562ec7c5..9cdab81984 100644 --- a/metricflow/plan_conversion/spec_transforms.py +++ b/metricflow/plan_conversion/spec_transforms.py @@ -2,13 +2,14 @@ from typing import List, Sequence -from metricflow.plan_conversion.select_column_gen import SelectColumnSet -from metricflow.plan_conversion.sql_expression_builders import make_coalesced_expr -from metricflow.specs.column_assoc import ColumnAssociation, ColumnAssociationResolver -from metricflow.specs.specs import ( +from metricflow_semantics.specs.column_assoc import ColumnAssociation, ColumnAssociationResolver +from metricflow_semantics.specs.spec_classes import ( InstanceSpecSet, InstanceSpecSetTransform, ) + +from metricflow.plan_conversion.select_column_gen import SelectColumnSet +from metricflow.plan_conversion.sql_expression_builders import make_coalesced_expr from metricflow.sql.sql_plan import SqlSelectColumn diff --git a/metricflow/plan_conversion/sql_join_builder.py b/metricflow/plan_conversion/sql_join_builder.py index 5407f0c98a..7a58689b67 100644 --- a/metricflow/plan_conversion/sql_join_builder.py +++ b/metricflow/plan_conversion/sql_join_builder.py @@ -5,8 +5,9 @@ from dbt_semantic_interfaces.protocols.metric import MetricTimeWindow from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity +from metricflow_semantics.assert_one_arg import assert_exactly_one_arg_set +from metricflow_semantics.sql.sql_join_type import SqlJoinType -from metricflow.assert_one_arg import assert_exactly_one_arg_set from metricflow.dataflow.nodes.join_conversion_events import JoinConversionEventsNode from metricflow.dataflow.nodes.join_over_time import JoinOverTimeRangeNode from metricflow.dataflow.nodes.join_to_base import JoinDescription @@ -24,7 +25,7 @@ SqlLogicalOperator, SqlSubtractTimeIntervalExpression, ) -from metricflow.sql.sql_plan import SqlExpressionNode, SqlJoinDescription, SqlJoinType, SqlSelectStatementNode +from metricflow.sql.sql_plan import SqlExpressionNode, SqlJoinDescription, SqlSelectStatementNode @dataclass(frozen=True) diff --git a/metricflow/plan_conversion/time_spine.py b/metricflow/plan_conversion/time_spine.py index 927753a058..38669b4e3e 100644 --- a/metricflow/plan_conversion/time_spine.py +++ b/metricflow/plan_conversion/time_spine.py @@ -3,7 +3,9 @@ import logging from dataclasses import dataclass +from dbt_semantic_interfaces.protocols import SemanticManifest from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity +from metricflow_semantics.mf_logging.pretty_print import mf_pformat from metricflow.sql.sql_table import SqlTable @@ -27,3 +29,27 @@ class TimeSpineSource: def spine_table(self) -> SqlTable: """Table containing all dates.""" return SqlTable(schema_name=self.schema_name, table_name=self.table_name) + + @staticmethod + def create_from_manifest(semantic_manifest: SemanticManifest) -> TimeSpineSource: + """Creates a time spine source based on what's in the manifest.""" + time_spine_table_configurations = semantic_manifest.project_configuration.time_spine_table_configurations + + if not ( + len(time_spine_table_configurations) == 1 + and time_spine_table_configurations[0].grain == TimeGranularity.DAY + ): + raise NotImplementedError( + f"Only a single time spine table configuration with {TimeGranularity.DAY} is currently " + f"supported. Got:\n" + f"{mf_pformat(time_spine_table_configurations)}" + ) + + time_spine_table_configuration = time_spine_table_configurations[0] + time_spine_table = SqlTable.from_string(time_spine_table_configuration.location) + return TimeSpineSource( + schema_name=time_spine_table.schema_name, + table_name=time_spine_table.table_name, + time_column_name=time_spine_table_configuration.column_name, + time_column_granularity=time_spine_table_configuration.grain, + ) diff --git a/metricflow/protocols/sql_client.py b/metricflow/protocols/sql_client.py index 6f026eff21..06ca36b350 100644 --- a/metricflow/protocols/sql_client.py +++ b/metricflow/protocols/sql_client.py @@ -4,10 +4,10 @@ from enum import Enum from typing import Protocol +from metricflow_semantics.sql.sql_bind_parameters import SqlBindParameters from pandas import DataFrame from metricflow.sql.render.sql_plan_renderer import SqlQueryPlanRenderer -from metricflow.sql.sql_bind_parameters import SqlBindParameters class SqlEngine(Enum): diff --git a/metricflow/sql/optimizer/rewriting_sub_query_reducer.py b/metricflow/sql/optimizer/rewriting_sub_query_reducer.py index 5e2056820b..5f14734b4c 100644 --- a/metricflow/sql/optimizer/rewriting_sub_query_reducer.py +++ b/metricflow/sql/optimizer/rewriting_sub_query_reducer.py @@ -4,7 +4,8 @@ from dataclasses import dataclass from typing import List, Optional, Sequence, Tuple -from metricflow.mf_logging.formatting import indent +from metricflow_semantics.mf_logging.formatting import indent + from metricflow.sql.optimizer.sql_query_plan_optimizer import SqlQueryPlanOptimizer from metricflow.sql.sql_exprs import ( SqlColumnAliasReferenceExpression, diff --git a/metricflow/sql/render/big_query.py b/metricflow/sql/render/big_query.py index 7b78bad9ed..0bc4222e66 100644 --- a/metricflow/sql/render/big_query.py +++ b/metricflow/sql/render/big_query.py @@ -6,16 +6,16 @@ from dbt_semantic_interfaces.enum_extension import assert_values_exhausted from dbt_semantic_interfaces.type_enums.date_part import DatePart from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity +from metricflow_semantics.errors.error_classes import UnsupportedEngineFeatureError +from metricflow_semantics.sql.sql_bind_parameters import SqlBindParameters from typing_extensions import override -from metricflow.errors.errors import UnsupportedEngineFeatureError from metricflow.sql.render.expr_renderer import ( DefaultSqlExpressionRenderer, SqlExpressionRenderer, SqlExpressionRenderResult, ) from metricflow.sql.render.sql_plan_renderer import DefaultSqlQueryPlanRenderer -from metricflow.sql.sql_bind_parameters import SqlBindParameters from metricflow.sql.sql_exprs import ( SqlCastToTimestampExpression, SqlDateTruncExpression, diff --git a/metricflow/sql/render/databricks.py b/metricflow/sql/render/databricks.py index 0a9d2de899..01ffd9d219 100644 --- a/metricflow/sql/render/databricks.py +++ b/metricflow/sql/render/databricks.py @@ -4,9 +4,9 @@ from dbt_semantic_interfaces.enum_extension import assert_values_exhausted from dbt_semantic_interfaces.type_enums.date_part import DatePart +from metricflow_semantics.errors.error_classes import UnsupportedEngineFeatureError from typing_extensions import override -from metricflow.errors.errors import UnsupportedEngineFeatureError from metricflow.sql.render.expr_renderer import ( DefaultSqlExpressionRenderer, SqlExpressionRenderer, diff --git a/metricflow/sql/render/duckdb_renderer.py b/metricflow/sql/render/duckdb_renderer.py index 451fb05398..ad90f2c53d 100644 --- a/metricflow/sql/render/duckdb_renderer.py +++ b/metricflow/sql/render/duckdb_renderer.py @@ -4,6 +4,7 @@ from dbt_semantic_interfaces.enum_extension import assert_values_exhausted from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity +from metricflow_semantics.sql.sql_bind_parameters import SqlBindParameters from typing_extensions import override from metricflow.sql.render.expr_renderer import ( @@ -12,7 +13,6 @@ SqlExpressionRenderResult, ) from metricflow.sql.render.sql_plan_renderer import DefaultSqlQueryPlanRenderer -from metricflow.sql.sql_bind_parameters import SqlBindParameters from metricflow.sql.sql_exprs import ( SqlGenerateUuidExpression, SqlPercentileExpression, diff --git a/metricflow/sql/render/expr_renderer.py b/metricflow/sql/render/expr_renderer.py index 96661841ac..795ea02b9e 100644 --- a/metricflow/sql/render/expr_renderer.py +++ b/metricflow/sql/render/expr_renderer.py @@ -10,11 +10,11 @@ import jinja2 from dbt_semantic_interfaces.type_enums.date_part import DatePart from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity +from metricflow_semantics.mf_logging.formatting import indent +from metricflow_semantics.sql.sql_bind_parameters import SqlBindParameters from typing_extensions import override -from metricflow.mf_logging.formatting import indent from metricflow.sql.render.rendering_constants import SqlRenderingConstants -from metricflow.sql.sql_bind_parameters import SqlBindParameters from metricflow.sql.sql_exprs import ( SqlAggregateFunctionExpression, SqlBetweenExpression, diff --git a/metricflow/sql/render/postgres.py b/metricflow/sql/render/postgres.py index 9ffc08dbf1..57dbf1dfd2 100644 --- a/metricflow/sql/render/postgres.py +++ b/metricflow/sql/render/postgres.py @@ -4,16 +4,16 @@ from dbt_semantic_interfaces.enum_extension import assert_values_exhausted from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity +from metricflow_semantics.errors.error_classes import UnsupportedEngineFeatureError +from metricflow_semantics.sql.sql_bind_parameters import SqlBindParameters from typing_extensions import override -from metricflow.errors.errors import UnsupportedEngineFeatureError from metricflow.sql.render.expr_renderer import ( DefaultSqlExpressionRenderer, SqlExpressionRenderer, SqlExpressionRenderResult, ) from metricflow.sql.render.sql_plan_renderer import DefaultSqlQueryPlanRenderer -from metricflow.sql.sql_bind_parameters import SqlBindParameters from metricflow.sql.sql_exprs import ( SqlGenerateUuidExpression, SqlPercentileExpression, diff --git a/metricflow/sql/render/redshift.py b/metricflow/sql/render/redshift.py index 251227c209..1306c5080b 100644 --- a/metricflow/sql/render/redshift.py +++ b/metricflow/sql/render/redshift.py @@ -4,16 +4,16 @@ from dbt_semantic_interfaces.enum_extension import assert_values_exhausted from dbt_semantic_interfaces.type_enums.date_part import DatePart +from metricflow_semantics.errors.error_classes import UnsupportedEngineFeatureError +from metricflow_semantics.sql.sql_bind_parameters import SqlBindParameters from typing_extensions import override -from metricflow.errors.errors import UnsupportedEngineFeatureError from metricflow.sql.render.expr_renderer import ( DefaultSqlExpressionRenderer, SqlExpressionRenderer, SqlExpressionRenderResult, ) from metricflow.sql.render.sql_plan_renderer import DefaultSqlQueryPlanRenderer -from metricflow.sql.sql_bind_parameters import SqlBindParameters from metricflow.sql.sql_exprs import ( SqlExtractExpression, SqlGenerateUuidExpression, diff --git a/metricflow/sql/render/snowflake.py b/metricflow/sql/render/snowflake.py index c6328feefe..402aff0a45 100644 --- a/metricflow/sql/render/snowflake.py +++ b/metricflow/sql/render/snowflake.py @@ -4,17 +4,21 @@ from dbt_semantic_interfaces.enum_extension import assert_values_exhausted from dbt_semantic_interfaces.type_enums.date_part import DatePart +from metricflow_semantics.errors.error_classes import UnsupportedEngineFeatureError +from metricflow_semantics.sql.sql_bind_parameters import SqlBindParameters from typing_extensions import override -from metricflow.errors.errors import UnsupportedEngineFeatureError from metricflow.sql.render.expr_renderer import ( DefaultSqlExpressionRenderer, SqlExpressionRenderer, SqlExpressionRenderResult, ) from metricflow.sql.render.sql_plan_renderer import DefaultSqlQueryPlanRenderer -from metricflow.sql.sql_bind_parameters import SqlBindParameters -from metricflow.sql.sql_exprs import SqlGenerateUuidExpression, SqlPercentileExpression, SqlPercentileFunctionType +from metricflow.sql.sql_exprs import ( + SqlGenerateUuidExpression, + SqlPercentileExpression, + SqlPercentileFunctionType, +) class SnowflakeSqlExpressionRenderer(DefaultSqlExpressionRenderer): diff --git a/metricflow/sql/render/sql_plan_renderer.py b/metricflow/sql/render/sql_plan_renderer.py index fcfbfe40b3..6ee1d34d07 100644 --- a/metricflow/sql/render/sql_plan_renderer.py +++ b/metricflow/sql/render/sql_plan_renderer.py @@ -7,14 +7,15 @@ from string import Template from typing import List, Optional, Sequence, Tuple -from metricflow.mf_logging.formatting import indent +from metricflow_semantics.mf_logging.formatting import indent +from metricflow_semantics.sql.sql_bind_parameters import SqlBindParameters + from metricflow.sql.render.expr_renderer import ( DefaultSqlExpressionRenderer, SqlExpressionRenderer, SqlExpressionRenderResult, ) from metricflow.sql.render.rendering_constants import SqlRenderingConstants -from metricflow.sql.sql_bind_parameters import SqlBindParameters from metricflow.sql.sql_plan import ( SqlCreateTableAsNode, SqlJoinDescription, diff --git a/metricflow/sql/render/trino.py b/metricflow/sql/render/trino.py index b767240f21..8445b294ea 100644 --- a/metricflow/sql/render/trino.py +++ b/metricflow/sql/render/trino.py @@ -6,6 +6,7 @@ from dbt_semantic_interfaces.enum_extension import assert_values_exhausted from dbt_semantic_interfaces.type_enums.date_part import DatePart from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity +from metricflow_semantics.sql.sql_bind_parameters import SqlBindParameters from typing_extensions import override from metricflow.sql.render.expr_renderer import ( @@ -14,7 +15,6 @@ SqlExpressionRenderResult, ) from metricflow.sql.render.sql_plan_renderer import DefaultSqlQueryPlanRenderer -from metricflow.sql.sql_bind_parameters import SqlBindParameters from metricflow.sql.sql_exprs import ( SqlBetweenExpression, SqlGenerateUuidExpression, diff --git a/metricflow/sql/sql_exprs.py b/metricflow/sql/sql_exprs.py index 778d40836b..481be5123d 100644 --- a/metricflow/sql/sql_exprs.py +++ b/metricflow/sql/sql_exprs.py @@ -14,11 +14,10 @@ from dbt_semantic_interfaces.type_enums.aggregation_type import AggregationType from dbt_semantic_interfaces.type_enums.date_part import DatePart from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity - -from metricflow.dag.id_prefix import IdPrefix, StaticIdPrefix -from metricflow.dag.mf_dag import DagNode, DisplayedProperty, NodeId -from metricflow.sql.sql_bind_parameters import SqlBindParameters -from metricflow.visitor import Visitable, VisitorOutputT +from metricflow_semantics.dag.id_prefix import IdPrefix, StaticIdPrefix +from metricflow_semantics.dag.mf_dag import DagNode, DisplayedProperty, NodeId +from metricflow_semantics.sql.sql_bind_parameters import SqlBindParameters +from metricflow_semantics.visitor import Visitable, VisitorOutputT class SqlExpressionNode(DagNode, Visitable, ABC): diff --git a/metricflow/sql/sql_plan.py b/metricflow/sql/sql_plan.py index 9031819e2d..b2aa434900 100644 --- a/metricflow/sql/sql_plan.py +++ b/metricflow/sql/sql_plan.py @@ -5,16 +5,16 @@ import logging from abc import ABC, abstractmethod from dataclasses import dataclass -from enum import Enum from typing import Generic, List, Optional, Sequence, Tuple +from metricflow_semantics.dag.id_prefix import IdPrefix, StaticIdPrefix +from metricflow_semantics.dag.mf_dag import DagId, DagNode, DisplayedProperty, MetricFlowDag, NodeId +from metricflow_semantics.sql.sql_join_type import SqlJoinType +from metricflow_semantics.visitor import VisitorOutputT from typing_extensions import override -from metricflow.dag.id_prefix import IdPrefix, StaticIdPrefix -from metricflow.dag.mf_dag import DagId, DagNode, DisplayedProperty, MetricFlowDag, NodeId from metricflow.sql.sql_exprs import SqlExpressionNode from metricflow.sql.sql_table import SqlTable -from metricflow.visitor import VisitorOutputT logger = logging.getLogger(__name__) @@ -91,21 +91,6 @@ class SqlSelectColumn: column_alias: str -class SqlJoinType(Enum): - """Enumerates the different kinds of SQL joins. - - The value is the SQL string to be used when rendering the join. - """ - - LEFT_OUTER = "LEFT OUTER JOIN" - FULL_OUTER = "FULL OUTER JOIN" - INNER = "INNER JOIN" - CROSS_JOIN = "CROSS JOIN" - - def __repr__(self) -> str: # noqa: D105 - return f"{self.__class__.__name__}.{self.name}" - - @dataclass(frozen=True) class SqlJoinDescription: """Describes how sources should be joined together.""" diff --git a/metricflow/telemetry/handlers/python_log.py b/metricflow/telemetry/handlers/python_log.py index a9664178e2..5f9af25a05 100644 --- a/metricflow/telemetry/handlers/python_log.py +++ b/metricflow/telemetry/handlers/python_log.py @@ -3,7 +3,8 @@ import logging import textwrap -from metricflow.mf_logging.pretty_print import mf_pformat +from metricflow_semantics.mf_logging.pretty_print import mf_pformat + from metricflow.telemetry.handlers.handlers import PayloadType, TelemetryHandler logger = logging.getLogger(__name__) diff --git a/metricflow/telemetry/reporter.py b/metricflow/telemetry/reporter.py index 8f4ffa9fe6..bcd325526d 100644 --- a/metricflow/telemetry/reporter.py +++ b/metricflow/telemetry/reporter.py @@ -12,9 +12,9 @@ from hashlib import sha256 from typing import Callable, List, Optional, TypeVar +from metricflow_semantics.random_id import random_id from typing_extensions import ParamSpec -from metricflow.random_id import random_id from metricflow.telemetry.handlers.handlers import ( TelemetryHandler, ToMemoryTelemetryHandler, diff --git a/metricflow/test_helpers.py b/metricflow/test_helpers.py deleted file mode 100644 index fd0386c392..0000000000 --- a/metricflow/test_helpers.py +++ /dev/null @@ -1,204 +0,0 @@ -from __future__ import annotations - -import datetime -import difflib -import logging -import os -import re -import webbrowser -from dataclasses import dataclass -from typing import Callable, List, Optional, Tuple - -import _pytest -import _pytest.fixtures - -from metricflow.time.time_source import TimeSource - -logger = logging.getLogger(__name__) - -DISPLAY_SNAPSHOTS_CLI_FLAG = "--display-snapshots" -OVERWRITE_SNAPSHOTS_CLI_FLAG = "--overwrite-snapshots" - - -def add_display_snapshots_cli_flag(parser: _pytest.config.argparsing.Parser) -> None: # noqa: D103 - parser.addoption(DISPLAY_SNAPSHOTS_CLI_FLAG, action="store_true", help="Displays snapshots in a browser if set") - - -def add_overwrite_snapshots_cli_flag(parser: _pytest.config.argparsing.Parser) -> None: # noqa: D103 - parser.addoption( - OVERWRITE_SNAPSHOTS_CLI_FLAG, - action="store_true", - help="Overwrites existing snapshots by ones generated during this testing session", - ) - - -@dataclass(frozen=True) -class SnapshotConfiguration: - """Configuration for handling snapshots in a test session.""" - - # Whether to display the snapshot associated with a test session in a browser window. - display_snapshots: bool - # Whether to overwrite any text files that were generated. - overwrite_snapshots: bool - - -@dataclass(frozen=True) -class MetricFlowTestConfiguration(SnapshotConfiguration): - """State that is shared between tests during a testing session.""" - - sql_engine_url: str - sql_engine_password: str - # Where MF system tables should be stored. - mf_system_schema: str - # Where tables for test data sets should be stored. - mf_source_schema: str - - # Whether to display the graph associated with a test session in a browser window. - display_graphs: bool - - # The source schema contains tables that are used for running tests. If this is set, a source schema in the SQL - # is created and persisted between runs. The source schema name includes a hash of the tables that should be in - # the schema, so - use_persistent_source_schema: bool - - -def assert_snapshot_text_equal( - request: _pytest.fixtures.FixtureRequest, - mf_test_configuration: MetricFlowTestConfiguration, - group_id: str, - snapshot_id: str, - snapshot_text: str, - snapshot_file_extension: str, - exclude_line_regex: Optional[str] = None, - incomparable_strings_replacement_function: Optional[Callable[[str], str]] = None, - additional_sub_directories_for_snapshots: Tuple[str, ...] = (), -) -> None: - """Similar to assert_plan_snapshot_text_equal(), but with more controls on how the snapshot paths are generated.""" - file_path = ( - snapshot_path_prefix( - request=request, - snapshot_group=group_id, - snapshot_id=snapshot_id, - additional_sub_directories=additional_sub_directories_for_snapshots, - ) - + snapshot_file_extension - ) - - if incomparable_strings_replacement_function is not None: - snapshot_text = incomparable_strings_replacement_function(snapshot_text) - - # Add a new line at the end of the file so that PRs don't show the "no newline" symbol on Github. - if len(snapshot_text) > 1 and snapshot_text[-1] != "\n": - snapshot_text = snapshot_text + "\n" - - # If we are in overwrite mode, make a new plan: - if mf_test_configuration.overwrite_snapshots: - # Create parent directory for the plan text files. - os.makedirs(os.path.dirname(file_path), exist_ok=True) - with open(file_path, "w") as snapshot_text_file: - snapshot_text_file.write(snapshot_text) - - # Throw an exception if the plan is not there. - if not os.path.exists(file_path): - raise FileNotFoundError( - f"Could not find snapshot file at path {file_path}. Re-run with --overwrite-snapshots and check git status " - "to see what's new." - ) - - if mf_test_configuration.display_snapshots: - if not mf_test_configuration.overwrite_snapshots: - logger.warning(f"Not overwriting snapshots, so displaying existing snapshot at {file_path}") - - if len(request.session.items) > 1: - raise ValueError("Displaying snapshots is only supported when there's a single item in a testing session.") - webbrowser.open("file://" + file_path) - - # Read the existing plan from the file and compare with the actual plan - with open(file_path, "r") as snapshot_text_file: - expected_snapshot_text = snapshot_text_file.read() - - if exclude_line_regex: - # Filter out lines that should be ignored. - expected_snapshot_text = _exclude_lines_matching_regex( - file_contents=expected_snapshot_text, exclude_line_regex=exclude_line_regex - ) - snapshot_text = _exclude_lines_matching_regex( - file_contents=snapshot_text, exclude_line_regex=exclude_line_regex - ) - # pytest should show a detailed diff with "assert actual_modified == expected_modified", but it's not, so doing - # this instead. - if snapshot_text != expected_snapshot_text: - differ = difflib.Differ() - diff = differ.compare(expected_snapshot_text.splitlines(), snapshot_text.splitlines()) - assert False, f"Snapshot from {file_path} does not match. Diff from expected to actual:\n" + "\n".join(diff) - - -def snapshot_path_prefix( - request: _pytest.fixtures.FixtureRequest, - snapshot_group: str, - snapshot_id: str, - additional_sub_directories: Tuple[str, ...] = (), -) -> str: - """Returns a path prefix that can be used to build filenames for files associated with the snapshot. - - The snapshot prefix is generated from the name of the test file, the name of the test, name of the snapshot class, - and the name of the snapshot. - - e.g. - .../snapshots/test_file.py/DataflowPlan/test_name__plan1 - - which can be used to construct paths like - - .../snapshots/test_file.py/DataflowPlan/test_name__plan1.xml - .../snapshots/test_file.py/DataflowPlan/test_name__plan1.svg - """ - test_name = request.node.name - - snapshot_file_name_parts = [] - # Parameterized test names look like 'test_case[some_param]'. "[" and "]" are annoying to deal with in the shell, - # so replace them with dunders. - snapshot_file_name_parts.extend(re.split(r"[\[\]]", test_name)) - # A trailing ] will produce an empty string in the list, so remove that. - snapshot_file_name_parts = [part for part in snapshot_file_name_parts if len(part) > 0] - snapshot_file_name_parts.append(snapshot_id) - - snapshot_file_name = "__".join(snapshot_file_name_parts) - - path_items: List[str] = [] - - test_file_path_items = os.path.normpath(request.node.fspath).split(os.sep) - test_file_name = test_file_path_items[-1] - # Default to where this is defined, but use more appropriate directories if found. - test_directory_root_index = -1 - for i, path_item in enumerate(test_file_path_items): - if path_item in ("tests", "metricflow"): - test_directory_root_index = i + 1 - - path_to_store_snapshots = os.sep.join(test_file_path_items[:test_directory_root_index]) - path_items.extend([path_to_store_snapshots, "snapshots", test_file_name, snapshot_group]) - - if additional_sub_directories: - path_items.extend(additional_sub_directories) - path_items.append(snapshot_file_name) - - return os.path.abspath(os.path.join(*path_items)) - - -def _exclude_lines_matching_regex(file_contents: str, exclude_line_regex: str) -> str: - """Removes lines from file contents if the line matches exclude_regex.""" - compiled_regex = re.compile(exclude_line_regex) - return "\n".join([line for line in file_contents.split("\n") if not compiled_regex.match(line)]) - - -class ConfigurableTimeSource(TimeSource): - """A time source that can be configured so that scheduled operations can be simulated in testing.""" - - def __init__(self, configured_time: datetime.datetime) -> None: # noqa: D107 - self._configured_time = configured_time - - def get_time(self) -> datetime.datetime: # noqa: D102 - return self._configured_time - - def set_time(self, new_time: datetime.datetime) -> datetime.datetime: # noqa: D102 - self._configured_time = new_time - return new_time diff --git a/tests/query/__init__.py b/metricflow/validation/__init__.py similarity index 100% rename from tests/query/__init__.py rename to metricflow/validation/__init__.py diff --git a/metricflow/model/data_warehouse_model_validator.py b/metricflow/validation/data_warehouse_model_validator.py similarity index 98% rename from metricflow/model/data_warehouse_model_validator.py rename to metricflow/validation/data_warehouse_model_validator.py index e700eb8850..7d43e34e11 100644 --- a/metricflow/model/data_warehouse_model_validator.py +++ b/metricflow/validation/data_warehouse_model_validator.py @@ -28,21 +28,21 @@ ValidationIssue, ValidationWarning, ) +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.specs.dunder_column_association_resolver import DunderColumnAssociationResolver +from metricflow_semantics.specs.spec_classes import InstanceSpecSet, LinkableInstanceSpec, MeasureSpec +from metricflow_semantics.sql.sql_bind_parameters import SqlBindParameters from metricflow.dataflow.builder.node_data_set import DataflowPlanNodeOutputDataSetResolver from metricflow.dataflow.builder.source_node import SourceNodeBuilder from metricflow.dataflow.dataflow_plan import BaseOutput from metricflow.dataflow.nodes.filter_elements import FilterElementsNode from metricflow.dataset.convert_semantic_model import SemanticModelToDataSetConverter -from metricflow.dataset.dataset import DataSet +from metricflow.dataset.dataset_classes import DataSet from metricflow.engine.metricflow_engine import MetricFlowEngine, MetricFlowExplainResult, MetricFlowQueryRequest -from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup -from metricflow.plan_conversion.column_resolver import DunderColumnAssociationResolver from metricflow.plan_conversion.dataflow_to_sql import DataflowToSqlQueryPlanConverter from metricflow.plan_conversion.time_spine import TimeSpineSource from metricflow.protocols.sql_client import SqlClient -from metricflow.specs.specs import InstanceSpecSet, LinkableInstanceSpec, MeasureSpec -from metricflow.sql.sql_bind_parameters import SqlBindParameters @dataclass @@ -65,7 +65,7 @@ def __init__(self, manifest: SemanticManifest) -> None: # noqa: D107 column_association_resolver=DunderColumnAssociationResolver(self.semantic_manifest_lookup), semantic_manifest_lookup=self.semantic_manifest_lookup, ) - self.time_spine_source = self.semantic_manifest_lookup.time_spine_source + self.time_spine_source = TimeSpineSource.create_from_manifest(manifest) self.converter = SemanticModelToDataSetConverter( column_association_resolver=DunderColumnAssociationResolver( semantic_manifest_lookup=self.semantic_manifest_lookup diff --git a/metricflow/validation/dataflow_join_validator.py b/metricflow/validation/dataflow_join_validator.py new file mode 100644 index 0000000000..88c08dcf06 --- /dev/null +++ b/metricflow/validation/dataflow_join_validator.py @@ -0,0 +1,57 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING, List + +from dbt_semantic_interfaces.references import ( + EntityReference, + SemanticModelReference, +) +from metricflow_semantics.instances import EntityInstance, InstanceSet +from metricflow_semantics.mf_logging.pretty_print import mf_pformat +from metricflow_semantics.model.semantics.semantic_model_join_evaluator import SemanticModelJoinEvaluator + +if TYPE_CHECKING: + from metricflow_semantics.model.semantics.semantic_model_lookup import SemanticModelLookup + + +class JoinDataflowOutputValidator: + """Checks that the instances in the output of a join dataflow node is valid.""" + + def __init__(self, semantic_model_lookup: SemanticModelLookup) -> None: # noqa: D107 + self._join_evaluator = SemanticModelJoinEvaluator(semantic_model_lookup) + + @staticmethod + def _semantic_model_of_entity_in_instance_set( + instance_set: InstanceSet, + entity_reference: EntityReference, + ) -> SemanticModelReference: + """Return the semantic model where the entity was defined in the instance set.""" + matching_instances: List[EntityInstance] = [] + for entity_instance in instance_set.entity_instances: + assert len(entity_instance.defined_from) == 1 + if len(entity_instance.spec.entity_links) == 0 and entity_instance.spec.reference == entity_reference: + matching_instances.append(entity_instance) + + assert len(matching_instances) == 1, ( + f"Not exactly 1 matching entity instances found: {matching_instances} for {entity_reference} in " + f"{mf_pformat(instance_set)}" + ) + return matching_instances[0].origin_semantic_model_reference.semantic_model_reference + + def is_valid_instance_set_join( + self, + left_instance_set: InstanceSet, + right_instance_set: InstanceSet, + on_entity_reference: EntityReference, + ) -> bool: + """Return true if the instance sets can be joined using the given entity.""" + return self._join_evaluator.is_valid_semantic_model_join( + left_semantic_model_reference=JoinDataflowOutputValidator._semantic_model_of_entity_in_instance_set( + instance_set=left_instance_set, entity_reference=on_entity_reference + ), + right_semantic_model_reference=JoinDataflowOutputValidator._semantic_model_of_entity_in_instance_set( + instance_set=right_instance_set, + entity_reference=on_entity_reference, + ), + on_entity_reference=on_entity_reference, + ) diff --git a/pyproject.toml b/pyproject.toml index 9e6b915513..ae627388f6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -85,20 +85,13 @@ trino-sql-client-packages = [ "trino>=0.327.0, <0.328.0", ] +# There are files that hatch will always include as well (e.g. the LICENSE file). +# See hatch build docs for more details. [tool.hatch.build.targets.sdist] -exclude = [ - "/.github", - "/.changes", - ".changie.yaml", - ".gitignore", - ".pre-commit-config.yaml", - "CONTRIBUTING.md", - "Makefile", - "/dbt-metricflow", - "/local-data-warehouses", - "/scripts", - "/tests", -] +packages = ["metricflow", "metricflow-semantics/metricflow_semantics"] + +[tool.hatch.build.targets.wheel] +packages = ["metricflow", "metricflow-semantics/metricflow_semantics"] # Environment setup @@ -112,7 +105,8 @@ exclude = [ description = "Environment for development. Includes a DuckDB-backed client." pre-install-commands = [ - "pip install -e ./dbt-metricflow[duckdb]" + "pip install -e ./metricflow-semantics", + "pip install -e ./dbt-metricflow[duckdb]", ] features = [ @@ -133,6 +127,7 @@ MF_TEST_ADAPTER_TYPE="postgres" description = "Dev environment for working with Postgres adapter" pre-install-commands = [ + "pip install -e ./metricflow-semantics", "pip install -e ./dbt-metricflow[postgres]" ] @@ -151,6 +146,7 @@ MF_TEST_ADAPTER_TYPE="bigquery" description = "Dev environment for working with the BigQuery adapter" pre-install-commands = [ + "pip install -e ./metricflow-semantics", "pip install -e ./dbt-metricflow[bigquery]" ] @@ -166,6 +162,7 @@ MF_TEST_ADAPTER_TYPE="databricks" description = "Dev environment for working with the Databricks adapter" pre-install-commands = [ + "pip install -e ./metricflow-semantics", "pip install -e ./dbt-metricflow[databricks]" ] @@ -181,6 +178,7 @@ MF_TEST_ADAPTER_TYPE="redshift" description = "Dev environment for working with the Redshift adapter" pre-install-commands = [ + "pip install -e ./metricflow-semantics", "pip install -e ./dbt-metricflow[redshift]" ] @@ -196,6 +194,7 @@ MF_TEST_ADAPTER_TYPE="snowflake" description = "Dev environment for working with Snowflake adapter" pre-install-commands = [ + "pip install -e ./metricflow-semantics", "pip install -e ./dbt-metricflow[snowflake]" ] @@ -213,6 +212,7 @@ DBT_ENV_SECRET_CATALOG="memory" description = "Dev environment for working with the Trino adapter" pre-install-commands = [ + "pip install -e ./metricflow-semantics", "pip install -e ./dbt-metricflow[trino]" ] diff --git a/scripts/ci_tests/metricflow_package_test.py b/scripts/ci_tests/metricflow_package_test.py new file mode 100644 index 0000000000..0d85c3f53a --- /dev/null +++ b/scripts/ci_tests/metricflow_package_test.py @@ -0,0 +1,180 @@ +from __future__ import annotations + +import logging +import textwrap +from collections import OrderedDict +from typing import Sequence + +from dbt_semantic_interfaces.implementations.semantic_manifest import PydanticSemanticManifest +from dbt_semantic_interfaces.parsing.dir_to_model import parse_yaml_files_to_validation_ready_semantic_manifest +from dbt_semantic_interfaces.parsing.objects import YamlConfigFile +from dbt_semantic_interfaces.protocols import SemanticManifest, SemanticModel +from dbt_semantic_interfaces.validations.semantic_manifest_validator import SemanticManifestValidator +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.specs.column_assoc import ColumnAssociationResolver +from metricflow_semantics.specs.dunder_column_association_resolver import DunderColumnAssociationResolver +from metricflow_semantics.specs.spec_classes import ( + DimensionSpec, + EntityReference, + MetricFlowQuerySpec, + MetricSpec, +) + +from metricflow.dataflow.builder.dataflow_plan_builder import DataflowPlanBuilder +from metricflow.dataflow.builder.node_data_set import DataflowPlanNodeOutputDataSetResolver +from metricflow.dataflow.builder.source_node import SourceNodeBuilder, SourceNodeSet +from metricflow.dataflow.nodes.read_sql_source import ReadSqlSourceNode +from metricflow.dataset.convert_semantic_model import SemanticModelToDataSetConverter +from metricflow.dataset.semantic_model_adapter import SemanticModelDataSet +from metricflow.engine.metricflow_engine import MetricFlowEngine + +logger = logging.getLogger(__name__) + + +def _data_set_to_read_nodes(data_sets: OrderedDict[str, SemanticModelDataSet]) -> OrderedDict[str, ReadSqlSourceNode]: + """Return a mapping from the name of the semantic model to the dataflow plan node that reads from it.""" + # Moved from model_fixtures.py. + return_dict: OrderedDict[str, ReadSqlSourceNode] = OrderedDict() + for semantic_model_name, data_set in data_sets.items(): + return_dict[semantic_model_name] = ReadSqlSourceNode(data_set) + + return return_dict + + +def _data_set_to_source_node_set( + column_association_resolver: ColumnAssociationResolver, + semantic_manifest_lookup: SemanticManifestLookup, + data_sets: OrderedDict[str, SemanticModelDataSet], +) -> SourceNodeSet: + # Moved from model_fixtures.py. + source_node_builder = SourceNodeBuilder(column_association_resolver, semantic_manifest_lookup) + return source_node_builder.create_from_data_sets(list(data_sets.values())) + + +def _create_data_sets( + semantic_manifest_lookup: SemanticManifestLookup, +) -> OrderedDict[str, SemanticModelDataSet]: + """Convert the SemanticModels in the model to SqlDataSets. + + Key is the name of the semantic model, value is the associated data set. + """ + # Moved from model_fixtures.py. + + # Use ordered dict and sort by name to get consistency when running tests. + data_sets = OrderedDict() + semantic_models: Sequence[SemanticModel] = semantic_manifest_lookup.semantic_manifest.semantic_models + semantic_models = sorted(semantic_models, key=lambda x: x.name) + + converter = SemanticModelToDataSetConverter( + column_association_resolver=DunderColumnAssociationResolver(semantic_manifest_lookup) + ) + + for semantic_model in semantic_models: + data_sets[semantic_model.name] = converter.create_sql_source_data_set(semantic_model) + + return data_sets + + +def _semantic_manifest() -> PydanticSemanticManifest: + bookings_yaml_file = YamlConfigFile( + filepath="dummy_path_0", + contents=textwrap.dedent( + """\ + semantic_model: + name: bookings_source + + node_relation: + schema_name: some_schema + alias: bookings_source_table + + defaults: + agg_time_dimension: ds + + measures: + - name: bookings + expr: "1" + agg: sum + create_metric: true + + dimensions: + - name: is_instant + type: categorical + - name: ds + type: time + type_params: + time_granularity: day + + primary_entity: booking + + entities: + - name: listing + type: foreign + expr: listing_id + """ + ), + ) + + project_configuration_yaml_file = YamlConfigFile( + filepath="projection_configuration_yaml_file_path", + contents=textwrap.dedent( + """\ + project_configuration: + time_spine_table_configurations: + - location: example_schema.example_table + column_name: ds + grain: day + """ + ), + ) + + semantic_manifest = parse_yaml_files_to_validation_ready_semantic_manifest( + [bookings_yaml_file, project_configuration_yaml_file], apply_transformations=True + ).semantic_manifest + + SemanticManifestValidator[SemanticManifest]().checked_validations(semantic_manifest) + return semantic_manifest + + +def log_dataflow_plan() -> None: # noqa: D103 + semantic_manifest = _semantic_manifest() + semantic_manifest_lookup = SemanticManifestLookup(semantic_manifest) + data_set_mapping = _create_data_sets(semantic_manifest_lookup) + column_association_resolver = DunderColumnAssociationResolver(semantic_manifest_lookup) + + source_node_builder = SourceNodeBuilder(column_association_resolver, semantic_manifest_lookup) + source_node_set = source_node_builder.create_from_data_sets(list(data_set_mapping.values())) + node_output_resolver = DataflowPlanNodeOutputDataSetResolver( + column_association_resolver=column_association_resolver, + semantic_manifest_lookup=semantic_manifest_lookup, + ) + node_output_resolver.cache_output_data_sets(source_node_set.all_nodes) + + dataflow_plan_builder = DataflowPlanBuilder( + source_node_set=source_node_set, + semantic_manifest_lookup=semantic_manifest_lookup, + node_output_resolver=node_output_resolver, + column_association_resolver=column_association_resolver, + ) + + dataflow_plan = dataflow_plan_builder.build_plan( + MetricFlowQuerySpec( + metric_specs=(MetricSpec(element_name="bookings"),), + dimension_specs=( + DimensionSpec( + element_name="is_instant", + entity_links=(EntityReference("booking"),), + ), + ), + ) + ) + + logger.info(f"Dataflow plan is:\n{dataflow_plan.structure_text()}") + + +def check_engine_import(metricflow_engine: MetricFlowEngine) -> None: + """Doesn't need to run, but having this here means that the import is tested.""" + logger.info(f"Engine is {metricflow_engine}") + + +logging.basicConfig(format="%(asctime)s - %(levelname)s - %(message)s", level=logging.INFO) +log_dataflow_plan() diff --git a/scripts/ci_tests/metricflow_package_test.sh b/scripts/ci_tests/metricflow_package_test.sh new file mode 100644 index 0000000000..54d5fdcdf8 --- /dev/null +++ b/scripts/ci_tests/metricflow_package_test.sh @@ -0,0 +1,39 @@ +#!/bin/bash +# Tests that the `metricflow` package works properly. +# TODO: Consolidate the boiler plate. + +# Root directory where `hatch build`, relative to the repo root. +RELATIVE_PACKAGE_DIR="." + +# Show each command and fail the script if any command fails. +set -e +set -x + +# Switch to the repo directory. +SCRIPT_DIR=`dirname "$0"` +echo "SCRIPT_DIR=$SCRIPT_DIR" +REAL_SCRIPT_DIR=`REAL_SCRIPT_DIR=$REAL_SCRIPT_DIR` +REAL_REPO_DIR=`realpath "$SCRIPT_DIR/../.."` +echo "REAL_REPO_DIR=$REAL_REPO_DIR" +cd "$REAL_REPO_DIR" + +# Build the wheels. +PACKAGE_DIR="$REAL_REPO_DIR/$RELATIVE_PACKAGE_DIR" +cd "$PACKAGE_DIR" +hatch clean +hatch build + +# Create a temporary directory and switch to it. +TEMP_DIR=`mktemp -d` +echo "TEMP_DIR=$TEMP_DIR" +cd "$TEMP_DIR" + +# Create a Python virtual env. +python3 -m venv venv +source venv/bin/activate + +# Install the wheel. +pip3 install "$PACKAGE_DIR/dist/"*.whl + +# Run the test +python3 "$REAL_REPO_DIR/scripts/ci_tests/metricflow_package_test.py" diff --git a/scripts/ci_tests/metricflow_semantics_package_test.py b/scripts/ci_tests/metricflow_semantics_package_test.py new file mode 100644 index 0000000000..f2499bfb95 --- /dev/null +++ b/scripts/ci_tests/metricflow_semantics_package_test.py @@ -0,0 +1,89 @@ +from __future__ import annotations + +import logging +import textwrap + +from dbt_semantic_interfaces.implementations.semantic_manifest import PydanticSemanticManifest +from dbt_semantic_interfaces.parsing.dir_to_model import parse_yaml_files_to_validation_ready_semantic_manifest +from dbt_semantic_interfaces.parsing.objects import YamlConfigFile +from dbt_semantic_interfaces.protocols import SemanticManifest +from dbt_semantic_interfaces.validations.semantic_manifest_validator import SemanticManifestValidator +from metricflow_semantics.mf_logging.pretty_print import mf_pformat +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.query.query_parser import MetricFlowQueryParser + +logger = logging.getLogger(__name__) + + +def _semantic_manifest() -> PydanticSemanticManifest: + bookings_yaml_file = YamlConfigFile( + filepath="dummy_path_0", + contents=textwrap.dedent( + """\ + semantic_model: + name: bookings_source + + node_relation: + schema_name: some_schema + alias: bookings_source_table + + defaults: + agg_time_dimension: ds + + measures: + - name: bookings + expr: "1" + agg: sum + create_metric: true + + dimensions: + - name: is_instant + type: categorical + - name: ds + type: time + type_params: + time_granularity: day + + primary_entity: booking + + entities: + - name: listing + type: foreign + expr: listing_id + """ + ), + ) + + project_configuration_yaml_file = YamlConfigFile( + filepath="projection_configuration_yaml_file_path", + contents=textwrap.dedent( + """\ + project_configuration: + time_spine_table_configurations: + - location: example_schema.example_table + column_name: ds + grain: day + """ + ), + ) + + semantic_manifest = parse_yaml_files_to_validation_ready_semantic_manifest( + [bookings_yaml_file, project_configuration_yaml_file], apply_transformations=True + ).semantic_manifest + + SemanticManifestValidator[SemanticManifest]().checked_validations(semantic_manifest) + return semantic_manifest + + +def log_query_spec() -> None: # noqa: D103 + semantic_manifest = _semantic_manifest() + query_parser = MetricFlowQueryParser(SemanticManifestLookup(semantic_manifest)) + query_spec = query_parser.parse_and_validate_query( + metric_names=["bookings"], group_by_names=["booking__is_instant"] + ) + + logger.info(f"{query_spec.__class__.__name__}:\n{mf_pformat(query_spec)}") + + +logging.basicConfig(format="%(asctime)s - %(levelname)s - %(message)s", level=logging.INFO) +log_query_spec() diff --git a/scripts/ci_tests/metricflow_semantics_package_test.sh b/scripts/ci_tests/metricflow_semantics_package_test.sh new file mode 100644 index 0000000000..85cdf8d189 --- /dev/null +++ b/scripts/ci_tests/metricflow_semantics_package_test.sh @@ -0,0 +1,39 @@ +#!/bin/bash +# Tests that the `metricflow` package works properly. +# TODO: Consolidate the boiler plate. + +# Root directory where `hatch build`, relative to the repo root. +RELATIVE_PACKAGE_DIR="metricflow-semantics" + +# Show each command and fail the script if any command fails. +set -e +set -x + +# Switch to the repo directory. +SCRIPT_DIR=`dirname "$0"` +echo "SCRIPT_DIR=$SCRIPT_DIR" +REAL_SCRIPT_DIR=`REAL_SCRIPT_DIR=$REAL_SCRIPT_DIR` +REAL_REPO_DIR=`realpath "$SCRIPT_DIR/../.."` +echo "REAL_REPO_DIR=$REAL_REPO_DIR" +cd "$REAL_REPO_DIR" + +# Build the wheels. +PACKAGE_DIR="$REAL_REPO_DIR/$RELATIVE_PACKAGE_DIR" +cd "$PACKAGE_DIR" +hatch clean +hatch build + +# Create a temporary directory and switch to it. +TEMP_DIR=`mktemp -d` +echo "TEMP_DIR=$TEMP_DIR" +cd "$TEMP_DIR" + +# Create a Python virtual env. +python3 -m venv venv +source venv/bin/activate + +# Install the wheel. +pip3 install "$PACKAGE_DIR/dist/"*.whl + +# Run the test +python3 "$REAL_REPO_DIR/scripts/ci_tests/metricflow_semantics_package_test.py" diff --git a/tests/conftest.py b/tests/conftest.py deleted file mode 100644 index 9ee2fb5b23..0000000000 --- a/tests/conftest.py +++ /dev/null @@ -1,11 +0,0 @@ -# These imports are required to properly set up pytest fixtures. -from __future__ import annotations - -from tests.fixtures.cli_fixtures import * # noqa: F401, F403 -from tests.fixtures.dataflow_fixtures import * # noqa: F401, F403 -from tests.fixtures.id_fixtures import * # noqa: F401, F403 -from tests.fixtures.manifest_fixtures import * # noqa: F401, F403 -from tests.fixtures.setup_fixtures import * # noqa: F401, F403 -from tests.fixtures.sql_client_fixtures import * # noqa: F401, F403 -from tests.fixtures.sql_fixtures import * # noqa: F401, F403 -from tests.fixtures.table_fixtures import * # noqa: F401, F403 diff --git a/tests/snapshots/test_semantic_model_container.py/tuple/test_elements_for_metric__result0.txt b/tests/snapshots/test_semantic_model_container.py/tuple/test_elements_for_metric__result0.txt deleted file mode 100644 index d71c87b9a5..0000000000 --- a/tests/snapshots/test_semantic_model_container.py/tuple/test_elements_for_metric__result0.txt +++ /dev/null @@ -1,103 +0,0 @@ -( - 'listing', - 'listing__capacity_latest', - 'listing__country_latest', - 'listing__created_at__day', - 'listing__created_at__extract_day', - 'listing__created_at__extract_dow', - 'listing__created_at__extract_doy', - 'listing__created_at__extract_month', - 'listing__created_at__extract_quarter', - 'listing__created_at__extract_year', - 'listing__ds__day', - 'listing__ds__extract_day', - 'listing__ds__extract_dow', - 'listing__ds__extract_doy', - 'listing__ds__extract_month', - 'listing__ds__extract_quarter', - 'listing__ds__extract_year', - 'listing__is_lux_latest', - 'listing__lux_listing', - 'listing__user', - 'listing__user__company', - 'listing__user__company_name', - 'listing__user__created_at__day', - 'listing__user__created_at__extract_day', - 'listing__user__created_at__extract_dow', - 'listing__user__created_at__extract_doy', - 'listing__user__created_at__extract_month', - 'listing__user__created_at__extract_quarter', - 'listing__user__created_at__extract_year', - 'listing__user__ds__day', - 'listing__user__ds__extract_day', - 'listing__user__ds__extract_dow', - 'listing__user__ds__extract_doy', - 'listing__user__ds__extract_month', - 'listing__user__ds__extract_quarter', - 'listing__user__ds__extract_year', - 'listing__user__ds_latest__day', - 'listing__user__ds_latest__extract_day', - 'listing__user__ds_latest__extract_dow', - 'listing__user__ds_latest__extract_doy', - 'listing__user__ds_latest__extract_month', - 'listing__user__ds_latest__extract_quarter', - 'listing__user__ds_latest__extract_year', - 'listing__user__ds_partitioned__day', - 'listing__user__ds_partitioned__extract_day', - 'listing__user__ds_partitioned__extract_dow', - 'listing__user__ds_partitioned__extract_doy', - 'listing__user__ds_partitioned__extract_month', - 'listing__user__ds_partitioned__extract_quarter', - 'listing__user__ds_partitioned__extract_year', - 'listing__user__home_state', - 'listing__user__home_state_latest', - 'user', - 'user__company', - 'user__company_name', - 'user__created_at__day', - 'user__created_at__extract_day', - 'user__created_at__extract_dow', - 'user__created_at__extract_doy', - 'user__created_at__extract_month', - 'user__created_at__extract_quarter', - 'user__created_at__extract_year', - 'user__ds__day', - 'user__ds__extract_day', - 'user__ds__extract_dow', - 'user__ds__extract_doy', - 'user__ds__extract_month', - 'user__ds__extract_quarter', - 'user__ds__extract_year', - 'user__ds_latest__day', - 'user__ds_latest__extract_day', - 'user__ds_latest__extract_dow', - 'user__ds_latest__extract_doy', - 'user__ds_latest__extract_month', - 'user__ds_latest__extract_quarter', - 'user__ds_latest__extract_year', - 'user__ds_partitioned__day', - 'user__ds_partitioned__extract_day', - 'user__ds_partitioned__extract_dow', - 'user__ds_partitioned__extract_doy', - 'user__ds_partitioned__extract_month', - 'user__ds_partitioned__extract_quarter', - 'user__ds_partitioned__extract_year', - 'user__home_state', - 'user__home_state_latest', - 'view__ds__day', - 'view__ds__extract_day', - 'view__ds__extract_dow', - 'view__ds__extract_doy', - 'view__ds__extract_month', - 'view__ds__extract_quarter', - 'view__ds__extract_year', - 'view__ds_partitioned__day', - 'view__ds_partitioned__extract_day', - 'view__ds_partitioned__extract_dow', - 'view__ds_partitioned__extract_doy', - 'view__ds_partitioned__extract_month', - 'view__ds_partitioned__extract_quarter', - 'view__ds_partitioned__extract_year', - 'view__listing', - 'view__user', -) diff --git a/tests/time/metric_time_dimension.py b/tests/time/metric_time_dimension.py deleted file mode 100644 index 737185e63b..0000000000 --- a/tests/time/metric_time_dimension.py +++ /dev/null @@ -1,14 +0,0 @@ -from __future__ import annotations - -from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity - -from metricflow.dataset.dataset import DataSet - -# Shortcuts for referring to the metric time dimension. -MTD = DataSet.metric_time_dimension_name() -MTD_REFERENCE = DataSet.metric_time_dimension_reference() -MTD_SPEC_DAY = DataSet.metric_time_dimension_spec(TimeGranularity.DAY) -MTD_SPEC_WEEK = DataSet.metric_time_dimension_spec(TimeGranularity.WEEK) -MTD_SPEC_MONTH = DataSet.metric_time_dimension_spec(TimeGranularity.MONTH) -MTD_SPEC_QUARTER = DataSet.metric_time_dimension_spec(TimeGranularity.QUARTER) -MTD_SPEC_YEAR = DataSet.metric_time_dimension_spec(TimeGranularity.YEAR) diff --git a/tests/query/group_by_item/__init__.py b/tests_metricflow/__init__.py similarity index 100% rename from tests/query/group_by_item/__init__.py rename to tests_metricflow/__init__.py diff --git a/tests/query/group_by_item/filter_spec_resolution/__init__.py b/tests_metricflow/cli/__init__.py similarity index 100% rename from tests/query/group_by_item/filter_spec_resolution/__init__.py rename to tests_metricflow/cli/__init__.py diff --git a/tests/cli/test_cli.py b/tests_metricflow/cli/test_cli.py similarity index 96% rename from tests/cli/test_cli.py rename to tests_metricflow/cli/test_cli.py index f39cf9154a..4af7d79b6a 100644 --- a/tests/cli/test_cli.py +++ b/tests_metricflow/cli/test_cli.py @@ -14,6 +14,10 @@ ) from dbt_semantic_interfaces.parsing.objects import YamlConfigFile from dbt_semantic_interfaces.test_utils import base_semantic_manifest_file +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration +from tests_metricflow_semantics.model.example_project_configuration import ( + EXAMPLE_PROJECT_CONFIGURATION_YAML_CONFIG_FILE, +) from dbt_metricflow.cli.cli_context import CLIContext from dbt_metricflow.cli.main import ( @@ -27,10 +31,8 @@ validate_configs, ) from metricflow.protocols.sql_client import SqlClient, SqlEngine -from tests.fixtures.cli_fixtures import MetricFlowCliRunner -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.model.example_project_configuration import EXAMPLE_PROJECT_CONFIGURATION_YAML_CONFIG_FILE -from tests.snapshot_utils import assert_str_snapshot_equal +from tests_metricflow.fixtures.cli_fixtures import MetricFlowCliRunner +from tests_metricflow.snapshot_utils import assert_str_snapshot_equal logger = logging.getLogger(__name__) diff --git a/tests/cli/test_custom_click_types.py b/tests_metricflow/cli/test_custom_click_types.py similarity index 100% rename from tests/cli/test_custom_click_types.py rename to tests_metricflow/cli/test_custom_click_types.py diff --git a/tests/compare_df.py b/tests_metricflow/compare_df.py similarity index 100% rename from tests/compare_df.py rename to tests_metricflow/compare_df.py diff --git a/tests_metricflow/conftest.py b/tests_metricflow/conftest.py new file mode 100644 index 0000000000..46f268c40f --- /dev/null +++ b/tests_metricflow/conftest.py @@ -0,0 +1,11 @@ +# These imports are required to properly set up pytest fixtures. +from __future__ import annotations + +from tests_metricflow.fixtures.cli_fixtures import * # noqa: F401, F403 +from tests_metricflow.fixtures.dataflow_fixtures import * # noqa: F401, F403 +from tests_metricflow.fixtures.id_fixtures import * # noqa: F401, F403 +from tests_metricflow.fixtures.manifest_fixtures import * # noqa: F401, F403 +from tests_metricflow.fixtures.setup_fixtures import * # noqa: F401, F403 +from tests_metricflow.fixtures.sql_client_fixtures import * # noqa: F401, F403 +from tests_metricflow.fixtures.sql_fixtures import * # noqa: F401, F403 +from tests_metricflow.fixtures.table_fixtures import * # noqa: F401, F403 diff --git a/tests/query/group_by_item/resolution_dag/__init__.py b/tests_metricflow/dataflow/__init__.py similarity index 100% rename from tests/query/group_by_item/resolution_dag/__init__.py rename to tests_metricflow/dataflow/__init__.py diff --git a/tests/query_rendering/__init__.py b/tests_metricflow/dataflow/builder/__init__.py similarity index 100% rename from tests/query_rendering/__init__.py rename to tests_metricflow/dataflow/builder/__init__.py diff --git a/tests/dataflow/builder/test_cyclic_join.py b/tests_metricflow/dataflow/builder/test_cyclic_join.py similarity index 77% rename from tests/dataflow/builder/test_cyclic_join.py rename to tests_metricflow/dataflow/builder/test_cyclic_join.py index ea61641051..10eb9758b9 100644 --- a/tests/dataflow/builder/test_cyclic_join.py +++ b/tests_metricflow/dataflow/builder/test_cyclic_join.py @@ -6,18 +6,18 @@ import pytest from _pytest.fixtures import FixtureRequest from dbt_semantic_interfaces.references import EntityReference - -from metricflow.dataflow.builder.dataflow_plan_builder import DataflowPlanBuilder -from metricflow.specs.specs import ( +from metricflow_semantics.specs.spec_classes import ( DimensionSpec, MetricFlowQuerySpec, MetricSpec, ) -from tests.dataflow_plan_to_svg import display_graph_if_requested -from tests.fixtures.manifest_fixtures import MetricFlowEngineTestFixture, SemanticManifestSetup -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.fixtures.sql_client_fixtures import sql_client # noqa: F401, F403 -from tests.snapshot_utils import assert_plan_snapshot_text_equal +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration +from metricflow_semantics.test_helpers.snapshot_helpers import assert_plan_snapshot_text_equal + +from metricflow.dataflow.builder.dataflow_plan_builder import DataflowPlanBuilder +from tests_metricflow.dataflow_plan_to_svg import display_graph_if_requested +from tests_metricflow.fixtures.manifest_fixtures import MetricFlowEngineTestFixture, SemanticManifestSetup +from tests_metricflow.fixtures.sql_client_fixtures import sql_client # noqa: F401, F403 logger = logging.getLogger(__name__) diff --git a/tests/dataflow/builder/test_dataflow_plan_builder.py b/tests_metricflow/dataflow/builder/test_dataflow_plan_builder.py similarity index 98% rename from tests/dataflow/builder/test_dataflow_plan_builder.py rename to tests_metricflow/dataflow/builder/test_dataflow_plan_builder.py index 1d319ea2e3..24c60296e7 100644 --- a/tests/dataflow/builder/test_dataflow_plan_builder.py +++ b/tests_metricflow/dataflow/builder/test_dataflow_plan_builder.py @@ -8,14 +8,11 @@ from dbt_semantic_interfaces.implementations.filters.where_filter import PydanticWhereFilter from dbt_semantic_interfaces.naming.keywords import METRIC_TIME_ELEMENT_NAME from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity - -from metricflow.dataflow.builder.dataflow_plan_builder import DataflowPlanBuilder -from metricflow.dataset.dataset import DataSet -from metricflow.errors.errors import UnableToSatisfyQueryError -from metricflow.filters.time_constraint import TimeRangeConstraint -from metricflow.query.query_parser import MetricFlowQueryParser -from metricflow.specs.column_assoc import ColumnAssociationResolver -from metricflow.specs.specs import ( +from metricflow_semantics.errors.error_classes import UnableToSatisfyQueryError +from metricflow_semantics.filters.time_constraint import TimeRangeConstraint +from metricflow_semantics.query.query_parser import MetricFlowQueryParser +from metricflow_semantics.specs.column_assoc import ColumnAssociationResolver +from metricflow_semantics.specs.spec_classes import ( DimensionSpec, EntityReference, MetricFlowQuerySpec, @@ -23,10 +20,18 @@ OrderBySpec, TimeDimensionSpec, ) -from tests.dataflow_plan_to_svg import display_graph_if_requested -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.snapshot_utils import assert_plan_snapshot_text_equal -from tests.time.metric_time_dimension import MTD_SPEC_DAY, MTD_SPEC_MONTH, MTD_SPEC_QUARTER, MTD_SPEC_WEEK +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration +from metricflow_semantics.test_helpers.metric_time_dimension import ( + MTD_SPEC_DAY, + MTD_SPEC_MONTH, + MTD_SPEC_QUARTER, + MTD_SPEC_WEEK, +) +from metricflow_semantics.test_helpers.snapshot_helpers import assert_plan_snapshot_text_equal + +from metricflow.dataflow.builder.dataflow_plan_builder import DataflowPlanBuilder +from metricflow.dataset.dataset_classes import DataSet +from tests_metricflow.dataflow_plan_to_svg import display_graph_if_requested logger = logging.getLogger(__name__) diff --git a/tests/dataflow/builder/test_measure_additiveness.py b/tests_metricflow/dataflow/builder/test_measure_additiveness.py similarity index 94% rename from tests/dataflow/builder/test_measure_additiveness.py rename to tests_metricflow/dataflow/builder/test_measure_additiveness.py index 6b049e71c2..64893e16a3 100644 --- a/tests/dataflow/builder/test_measure_additiveness.py +++ b/tests_metricflow/dataflow/builder/test_measure_additiveness.py @@ -1,9 +1,9 @@ from __future__ import annotations from dbt_semantic_interfaces.type_enums.aggregation_type import AggregationType +from metricflow_semantics.specs.spec_classes import MeasureSpec, NonAdditiveDimensionSpec from metricflow.dataflow.builder.measure_additiveness import group_measure_specs_by_additiveness -from metricflow.specs.specs import MeasureSpec, NonAdditiveDimensionSpec def test_bucket_measure_specs_by_additiveness() -> None: # noqa: D103 diff --git a/tests/dataflow/builder/test_node_data_set.py b/tests_metricflow/dataflow/builder/test_node_data_set.py similarity index 83% rename from tests/dataflow/builder/test_node_data_set.py rename to tests_metricflow/dataflow/builder/test_node_data_set.py index b786e6e4dc..30267070a5 100644 --- a/tests/dataflow/builder/test_node_data_set.py +++ b/tests_metricflow/dataflow/builder/test_node_data_set.py @@ -5,30 +5,35 @@ from _pytest.fixtures import FixtureRequest from dbt_semantic_interfaces.references import SemanticModelElementReference - -from metricflow.aggregation_properties import AggregationState -from metricflow.dataflow.builder.node_data_set import DataflowPlanNodeOutputDataSetResolver -from metricflow.dataflow.nodes.join_to_base import JoinDescription, JoinToBaseOutputNode -from metricflow.dataflow.nodes.read_sql_source import ReadSqlSourceNode -from metricflow.dataset.sql_dataset import SqlDataSet -from metricflow.instances import ( +from metricflow_semantics.aggregation_properties import AggregationState +from metricflow_semantics.instances import ( InstanceSet, MeasureInstance, ) -from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup -from metricflow.plan_conversion.column_resolver import DunderColumnAssociationResolver -from metricflow.plan_conversion.time_spine import TimeSpineSource -from metricflow.specs.column_assoc import ColumnAssociation, SingleColumnCorrelationKey -from metricflow.specs.specs import ( +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.specs.column_assoc import ColumnAssociation, SingleColumnCorrelationKey +from metricflow_semantics.specs.dunder_column_association_resolver import DunderColumnAssociationResolver +from metricflow_semantics.specs.spec_classes import ( LinklessEntitySpec, MeasureSpec, ) +from metricflow_semantics.sql.sql_join_type import SqlJoinType +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration +from metricflow_semantics.test_helpers.snapshot_helpers import assert_spec_set_snapshot_equal + +from metricflow.dataflow.builder.node_data_set import DataflowPlanNodeOutputDataSetResolver +from metricflow.dataflow.nodes.join_to_base import JoinDescription, JoinToBaseOutputNode +from metricflow.dataflow.nodes.read_sql_source import ReadSqlSourceNode +from metricflow.dataset.sql_dataset import SqlDataSet +from metricflow.plan_conversion.time_spine import TimeSpineSource from metricflow.sql.sql_exprs import SqlColumnReference, SqlColumnReferenceExpression -from metricflow.sql.sql_plan import SqlJoinType, SqlSelectColumn, SqlSelectStatementNode, SqlTableFromClauseNode +from metricflow.sql.sql_plan import ( + SqlSelectColumn, + SqlSelectStatementNode, + SqlTableFromClauseNode, +) from metricflow.sql.sql_table import SqlTable -from tests.fixtures.manifest_fixtures import MetricFlowEngineTestFixture, SemanticManifestSetup -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.snapshot_utils import assert_spec_set_snapshot_equal +from tests_metricflow.fixtures.manifest_fixtures import MetricFlowEngineTestFixture, SemanticManifestSetup logger = logging.getLogger(__name__) diff --git a/tests/dataflow/builder/test_node_evaluator.py b/tests_metricflow/dataflow/builder/test_node_evaluator.py similarity index 98% rename from tests/dataflow/builder/test_node_evaluator.py rename to tests_metricflow/dataflow/builder/test_node_evaluator.py index 0176780fe7..07245d1257 100644 --- a/tests/dataflow/builder/test_node_evaluator.py +++ b/tests_metricflow/dataflow/builder/test_node_evaluator.py @@ -5,6 +5,17 @@ import pytest from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.specs.dunder_column_association_resolver import DunderColumnAssociationResolver +from metricflow_semantics.specs.spec_classes import ( + DimensionSpec, + EntityReference, + EntitySpec, + LinkableInstanceSpec, + LinklessEntitySpec, + TimeDimensionSpec, +) +from metricflow_semantics.sql.sql_join_type import SqlJoinType from metricflow.dataflow.builder.node_data_set import DataflowPlanNodeOutputDataSetResolver from metricflow.dataflow.builder.node_evaluator import ( @@ -15,20 +26,9 @@ from metricflow.dataflow.builder.partitions import PartitionTimeDimensionJoinDescription from metricflow.dataflow.builder.source_node import SourceNodeSet from metricflow.dataflow.nodes.join_to_base import ValidityWindowJoinDescription -from metricflow.dataset.dataset import DataSet -from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup -from metricflow.plan_conversion.column_resolver import DunderColumnAssociationResolver +from metricflow.dataset.dataset_classes import DataSet from metricflow.plan_conversion.node_processor import PreJoinNodeProcessor -from metricflow.specs.specs import ( - DimensionSpec, - EntityReference, - EntitySpec, - LinkableInstanceSpec, - LinklessEntitySpec, - TimeDimensionSpec, -) -from metricflow.sql.sql_plan import SqlJoinType -from tests.fixtures.manifest_fixtures import MetricFlowEngineTestFixture, SemanticManifestSetup +from tests_metricflow.fixtures.manifest_fixtures import MetricFlowEngineTestFixture, SemanticManifestSetup logger = logging.getLogger(__name__) diff --git a/tests/specs/__init__.py b/tests_metricflow/dataflow/optimizer/__init__.py similarity index 100% rename from tests/specs/__init__.py rename to tests_metricflow/dataflow/optimizer/__init__.py diff --git a/tests/specs/patterns/__init__.py b/tests_metricflow/dataflow/optimizer/source_scan/__init__.py similarity index 100% rename from tests/specs/patterns/__init__.py rename to tests_metricflow/dataflow/optimizer/source_scan/__init__.py diff --git a/tests/dataflow/optimizer/source_scan/test_cm_branch_combiner.py b/tests_metricflow/dataflow/optimizer/source_scan/test_cm_branch_combiner.py similarity index 85% rename from tests/dataflow/optimizer/source_scan/test_cm_branch_combiner.py rename to tests_metricflow/dataflow/optimizer/source_scan/test_cm_branch_combiner.py index 220c377c8b..56aca18e6c 100644 --- a/tests/dataflow/optimizer/source_scan/test_cm_branch_combiner.py +++ b/tests_metricflow/dataflow/optimizer/source_scan/test_cm_branch_combiner.py @@ -4,9 +4,12 @@ import pytest from _pytest.fixtures import FixtureRequest +from metricflow_semantics.dag.id_prefix import StaticIdPrefix +from metricflow_semantics.dag.mf_dag import DagId +from metricflow_semantics.specs.spec_classes import InstanceSpecSet, MeasureSpec +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration +from metricflow_semantics.test_helpers.snapshot_helpers import assert_plan_snapshot_text_equal -from metricflow.dag.id_prefix import StaticIdPrefix -from metricflow.dag.mf_dag import DagId from metricflow.dataflow.dataflow_plan import ( BaseOutput, DataflowPlan, @@ -17,11 +20,8 @@ ComputeMetricsBranchCombiner, ComputeMetricsBranchCombinerResult, ) -from metricflow.specs.specs import InstanceSpecSet, MeasureSpec -from tests.dataflow_plan_to_svg import display_graph_if_requested -from tests.fixtures.manifest_fixtures import MetricFlowEngineTestFixture, SemanticManifestSetup -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.snapshot_utils import assert_plan_snapshot_text_equal +from tests_metricflow.dataflow_plan_to_svg import display_graph_if_requested +from tests_metricflow.fixtures.manifest_fixtures import MetricFlowEngineTestFixture, SemanticManifestSetup def make_dataflow_plan(node: BaseOutput) -> DataflowPlan: # noqa: D103 diff --git a/tests/dataflow/optimizer/source_scan/test_source_scan_optimizer.py b/tests_metricflow/dataflow/optimizer/source_scan/test_source_scan_optimizer.py similarity index 96% rename from tests/dataflow/optimizer/source_scan/test_source_scan_optimizer.py rename to tests_metricflow/dataflow/optimizer/source_scan/test_source_scan_optimizer.py index 622fc67eae..1cb33ee108 100644 --- a/tests/dataflow/optimizer/source_scan/test_source_scan_optimizer.py +++ b/tests_metricflow/dataflow/optimizer/source_scan/test_source_scan_optimizer.py @@ -6,6 +6,16 @@ from _pytest.fixtures import FixtureRequest from dbt_semantic_interfaces.naming.keywords import METRIC_TIME_ELEMENT_NAME from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity +from metricflow_semantics.query.query_parser import MetricFlowQueryParser +from metricflow_semantics.specs.column_assoc import ColumnAssociationResolver +from metricflow_semantics.specs.spec_classes import ( + DimensionSpec, + EntityReference, + MetricFlowQuerySpec, + MetricSpec, +) +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration +from metricflow_semantics.test_helpers.snapshot_helpers import assert_plan_snapshot_text_equal from metricflow.dataflow.builder.dataflow_plan_builder import DataflowPlanBuilder from metricflow.dataflow.dataflow_plan import ( @@ -32,18 +42,8 @@ from metricflow.dataflow.nodes.write_to_dataframe import WriteToResultDataframeNode from metricflow.dataflow.nodes.write_to_table import WriteToResultTableNode from metricflow.dataflow.optimizer.source_scan.source_scan_optimizer import SourceScanOptimizer -from metricflow.dataset.dataset import DataSet -from metricflow.query.query_parser import MetricFlowQueryParser -from metricflow.specs.column_assoc import ColumnAssociationResolver -from metricflow.specs.specs import ( - DimensionSpec, - EntityReference, - MetricFlowQuerySpec, - MetricSpec, -) -from tests.dataflow_plan_to_svg import display_graph_if_requested -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.snapshot_utils import assert_plan_snapshot_text_equal +from metricflow.dataset.dataset_classes import DataSet +from tests_metricflow.dataflow_plan_to_svg import display_graph_if_requested logger = logging.getLogger(__name__) diff --git a/tests/dataflow/test_sql_column.py b/tests_metricflow/dataflow/test_sql_column.py similarity index 100% rename from tests/dataflow/test_sql_column.py rename to tests_metricflow/dataflow/test_sql_column.py diff --git a/tests/dataflow/test_sql_table.py b/tests_metricflow/dataflow/test_sql_table.py similarity index 100% rename from tests/dataflow/test_sql_table.py rename to tests_metricflow/dataflow/test_sql_table.py diff --git a/tests/dataflow_plan_to_svg.py b/tests_metricflow/dataflow_plan_to_svg.py similarity index 78% rename from tests/dataflow_plan_to_svg.py rename to tests_metricflow/dataflow_plan_to_svg.py index 8f7432dc01..f018a63540 100644 --- a/tests/dataflow_plan_to_svg.py +++ b/tests_metricflow/dataflow_plan_to_svg.py @@ -3,10 +3,9 @@ import os from _pytest.fixtures import FixtureRequest - -from metricflow.dag.dag_visualization import DagGraphT, render_via_graphviz -from metricflow.test_helpers import snapshot_path_prefix -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration +from metricflow_semantics.dag.dag_visualization import DagGraphT, render_via_graphviz +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration +from metricflow_semantics.test_helpers.snapshot_helpers import snapshot_path_prefix def display_graph_if_requested( diff --git a/tests/sql/__init__.py b/tests_metricflow/dataset/__init__.py similarity index 100% rename from tests/sql/__init__.py rename to tests_metricflow/dataset/__init__.py diff --git a/tests/dataset/test_convert_semantic_model.py b/tests_metricflow/dataset/test_convert_semantic_model.py similarity index 90% rename from tests/dataset/test_convert_semantic_model.py rename to tests_metricflow/dataset/test_convert_semantic_model.py index ee7ac80d25..1a3b2e5c74 100644 --- a/tests/dataset/test_convert_semantic_model.py +++ b/tests_metricflow/dataset/test_convert_semantic_model.py @@ -6,12 +6,12 @@ import pytest from _pytest.fixtures import FixtureRequest from dbt_semantic_interfaces.references import SemanticModelReference +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration +from metricflow_semantics.test_helpers.snapshot_helpers import assert_spec_set_snapshot_equal from metricflow.protocols.sql_client import SqlClient -from tests.fixtures.manifest_fixtures import MetricFlowEngineTestFixture, SemanticManifestSetup -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.snapshot_utils import assert_spec_set_snapshot_equal -from tests.sql.compare_sql_plan import assert_rendered_sql_equal +from tests_metricflow.fixtures.manifest_fixtures import MetricFlowEngineTestFixture, SemanticManifestSetup +from tests_metricflow.sql.compare_sql_plan import assert_rendered_sql_equal logger = logging.getLogger(__name__) diff --git a/tests/examples/__init__.py b/tests_metricflow/examples/__init__.py similarity index 100% rename from tests/examples/__init__.py rename to tests_metricflow/examples/__init__.py diff --git a/tests/examples/test_node_sql.py b/tests_metricflow/examples/test_node_sql.py similarity index 92% rename from tests/examples/test_node_sql.py rename to tests_metricflow/examples/test_node_sql.py index c0d3b0382b..cd6e517563 100644 --- a/tests/examples/test_node_sql.py +++ b/tests_metricflow/examples/test_node_sql.py @@ -5,18 +5,18 @@ import pytest from dbt_semantic_interfaces.references import SemanticModelReference from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity +from metricflow_semantics.mf_logging.pretty_print import mf_pformat +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.specs.dunder_column_association_resolver import DunderColumnAssociationResolver +from metricflow_semantics.specs.spec_classes import InstanceSpecSet, TimeDimensionReference, TimeDimensionSpec from metricflow.dataflow.builder.node_data_set import DataflowPlanNodeOutputDataSetResolver from metricflow.dataflow.nodes.filter_elements import FilterElementsNode from metricflow.dataflow.nodes.metric_time_transform import MetricTimeDimensionTransformNode from metricflow.dataflow.nodes.read_sql_source import ReadSqlSourceNode from metricflow.dataset.convert_semantic_model import SemanticModelToDataSetConverter -from metricflow.mf_logging.pretty_print import mf_pformat -from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup -from metricflow.plan_conversion.column_resolver import DunderColumnAssociationResolver from metricflow.plan_conversion.dataflow_to_sql import DataflowToSqlQueryPlanConverter from metricflow.protocols.sql_client import SqlClient -from metricflow.specs.specs import InstanceSpecSet, TimeDimensionReference, TimeDimensionSpec from metricflow.sql.optimizer.optimization_levels import SqlQueryOptimizationLevel from metricflow.sql.render.sql_plan_renderer import SqlQueryPlanRenderer diff --git a/tests/sql/optimizer/__init__.py b/tests_metricflow/execution/__init__.py similarity index 100% rename from tests/sql/optimizer/__init__.py rename to tests_metricflow/execution/__init__.py diff --git a/tests/execution/noop_task.py b/tests_metricflow/execution/noop_task.py similarity index 95% rename from tests/execution/noop_task.py rename to tests_metricflow/execution/noop_task.py index d5e8d855bf..563d16feaa 100644 --- a/tests/execution/noop_task.py +++ b/tests_metricflow/execution/noop_task.py @@ -4,7 +4,8 @@ import time from typing import Optional, Sequence -from metricflow.dag.id_prefix import IdPrefix, StaticIdPrefix +from metricflow_semantics.dag.id_prefix import IdPrefix, StaticIdPrefix + from metricflow.execution.execution_plan import ( ExecutionPlanTask, SqlQuery, diff --git a/tests/execution/test_sequential_executor.py b/tests_metricflow/execution/test_sequential_executor.py similarity index 95% rename from tests/execution/test_sequential_executor.py rename to tests_metricflow/execution/test_sequential_executor.py index c3e5ca2835..84f29b6461 100644 --- a/tests/execution/test_sequential_executor.py +++ b/tests_metricflow/execution/test_sequential_executor.py @@ -1,9 +1,10 @@ from __future__ import annotations -from metricflow.dag.mf_dag import DagId +from metricflow_semantics.dag.mf_dag import DagId + from metricflow.execution.execution_plan import ExecutionPlan from metricflow.execution.executor import SequentialPlanExecutor -from tests.execution.noop_task import NoOpExecutionPlanTask +from tests_metricflow.execution.noop_task import NoOpExecutionPlanTask def test_single_task() -> None: diff --git a/tests/execution/test_tasks.py b/tests_metricflow/execution/test_tasks.py similarity index 86% rename from tests/execution/test_tasks.py rename to tests_metricflow/execution/test_tasks.py index 8009ac18cc..4ee893e5d3 100644 --- a/tests/execution/test_tasks.py +++ b/tests_metricflow/execution/test_tasks.py @@ -1,8 +1,11 @@ from __future__ import annotations import pandas as pd +from metricflow_semantics.dag.mf_dag import DagId +from metricflow_semantics.random_id import random_id +from metricflow_semantics.sql.sql_bind_parameters import SqlBindParameters +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration -from metricflow.dag.mf_dag import DagId from metricflow.execution.execution_plan import ( ExecutionPlan, SelectSqlQueryToDataFrameTask, @@ -10,11 +13,8 @@ ) from metricflow.execution.executor import SequentialPlanExecutor from metricflow.protocols.sql_client import SqlClient, SqlEngine -from metricflow.random_id import random_id -from metricflow.sql.sql_bind_parameters import SqlBindParameters from metricflow.sql.sql_table import SqlTable -from tests.compare_df import assert_dataframes_equal -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration +from tests_metricflow.compare_df import assert_dataframes_equal def test_read_sql_task(sql_client: SqlClient) -> None: # noqa: D103 diff --git a/tests/sql_clients/__init__.py b/tests_metricflow/fixtures/__init__.py similarity index 100% rename from tests/sql_clients/__init__.py rename to tests_metricflow/fixtures/__init__.py diff --git a/tests/fixtures/cli_fixtures.py b/tests_metricflow/fixtures/cli_fixtures.py similarity index 92% rename from tests/fixtures/cli_fixtures.py rename to tests_metricflow/fixtures/cli_fixtures.py index 6768a93205..5416c75366 100644 --- a/tests/fixtures/cli_fixtures.py +++ b/tests_metricflow/fixtures/cli_fixtures.py @@ -10,16 +10,16 @@ from click.testing import CliRunner, Result from dbt_semantic_interfaces.protocols.semantic_manifest import SemanticManifest from dbt_semantic_interfaces.test_utils import as_datetime +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.specs.dunder_column_association_resolver import DunderColumnAssociationResolver +from metricflow_semantics.test_helpers.time_helpers import ConfigurableTimeSource from typing_extensions import override from dbt_metricflow.cli.cli_context import CLIContext from dbt_metricflow.cli.dbt_connectors.dbt_config_accessor import dbtArtifacts, dbtProjectMetadata from metricflow.engine.metricflow_engine import MetricFlowEngine -from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup -from metricflow.plan_conversion.column_resolver import DunderColumnAssociationResolver from metricflow.protocols.sql_client import SqlClient -from metricflow.test_helpers import ConfigurableTimeSource -from tests.fixtures.setup_fixtures import dbt_project_dir +from tests_metricflow.fixtures.setup_fixtures import dbt_project_dir class FakeCLIContext(CLIContext): diff --git a/tests/fixtures/dataflow_fixtures.py b/tests_metricflow/fixtures/dataflow_fixtures.py similarity index 88% rename from tests/fixtures/dataflow_fixtures.py rename to tests_metricflow/fixtures/dataflow_fixtures.py index dc47725968..540065b162 100644 --- a/tests/fixtures/dataflow_fixtures.py +++ b/tests_metricflow/fixtures/dataflow_fixtures.py @@ -3,15 +3,15 @@ from typing import Mapping import pytest +from metricflow_semantics.query.query_parser import MetricFlowQueryParser +from metricflow_semantics.specs.column_assoc import ColumnAssociationResolver +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration from metricflow.dataflow.builder.dataflow_plan_builder import DataflowPlanBuilder from metricflow.plan_conversion.time_spine import TimeSpineSource from metricflow.protocols.sql_client import SqlClient -from metricflow.query.query_parser import MetricFlowQueryParser -from metricflow.specs.column_assoc import ColumnAssociationResolver -from tests.fixtures.manifest_fixtures import MetricFlowEngineTestFixture, SemanticManifestSetup -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.fixtures.sql_client_fixtures import sql_client # noqa: F401, F403 +from tests_metricflow.fixtures.manifest_fixtures import MetricFlowEngineTestFixture, SemanticManifestSetup +from tests_metricflow.fixtures.sql_client_fixtures import sql_client # noqa: F401, F403 """ Using 'function' scope to make ID generation more deterministic for the dataflow plan builder fixtures.. diff --git a/tests/fixtures/dbt_projects/metricflow_testing/.gitignore b/tests_metricflow/fixtures/dbt_projects/metricflow_testing/.gitignore similarity index 100% rename from tests/fixtures/dbt_projects/metricflow_testing/.gitignore rename to tests_metricflow/fixtures/dbt_projects/metricflow_testing/.gitignore diff --git a/tests/fixtures/dbt_projects/metricflow_testing/.user.yml b/tests_metricflow/fixtures/dbt_projects/metricflow_testing/.user.yml similarity index 100% rename from tests/fixtures/dbt_projects/metricflow_testing/.user.yml rename to tests_metricflow/fixtures/dbt_projects/metricflow_testing/.user.yml diff --git a/tests/fixtures/dbt_projects/metricflow_testing/README.md b/tests_metricflow/fixtures/dbt_projects/metricflow_testing/README.md similarity index 100% rename from tests/fixtures/dbt_projects/metricflow_testing/README.md rename to tests_metricflow/fixtures/dbt_projects/metricflow_testing/README.md diff --git a/tests/fixtures/dbt_projects/metricflow_testing/analyses/.gitkeep b/tests_metricflow/fixtures/dbt_projects/metricflow_testing/analyses/.gitkeep similarity index 100% rename from tests/fixtures/dbt_projects/metricflow_testing/analyses/.gitkeep rename to tests_metricflow/fixtures/dbt_projects/metricflow_testing/analyses/.gitkeep diff --git a/tests/fixtures/dbt_projects/metricflow_testing/dbt_project.yml b/tests_metricflow/fixtures/dbt_projects/metricflow_testing/dbt_project.yml similarity index 100% rename from tests/fixtures/dbt_projects/metricflow_testing/dbt_project.yml rename to tests_metricflow/fixtures/dbt_projects/metricflow_testing/dbt_project.yml diff --git a/tests/fixtures/dbt_projects/metricflow_testing/macros/.gitkeep b/tests_metricflow/fixtures/dbt_projects/metricflow_testing/macros/.gitkeep similarity index 100% rename from tests/fixtures/dbt_projects/metricflow_testing/macros/.gitkeep rename to tests_metricflow/fixtures/dbt_projects/metricflow_testing/macros/.gitkeep diff --git a/tests/fixtures/dbt_projects/metricflow_testing/models/example/my_first_dbt_model.sql b/tests_metricflow/fixtures/dbt_projects/metricflow_testing/models/example/my_first_dbt_model.sql similarity index 100% rename from tests/fixtures/dbt_projects/metricflow_testing/models/example/my_first_dbt_model.sql rename to tests_metricflow/fixtures/dbt_projects/metricflow_testing/models/example/my_first_dbt_model.sql diff --git a/tests/fixtures/dbt_projects/metricflow_testing/models/example/my_second_dbt_model.sql b/tests_metricflow/fixtures/dbt_projects/metricflow_testing/models/example/my_second_dbt_model.sql similarity index 100% rename from tests/fixtures/dbt_projects/metricflow_testing/models/example/my_second_dbt_model.sql rename to tests_metricflow/fixtures/dbt_projects/metricflow_testing/models/example/my_second_dbt_model.sql diff --git a/tests/fixtures/dbt_projects/metricflow_testing/models/example/schema.yml b/tests_metricflow/fixtures/dbt_projects/metricflow_testing/models/example/schema.yml similarity index 100% rename from tests/fixtures/dbt_projects/metricflow_testing/models/example/schema.yml rename to tests_metricflow/fixtures/dbt_projects/metricflow_testing/models/example/schema.yml diff --git a/tests/fixtures/dbt_projects/metricflow_testing/profiles.yml b/tests_metricflow/fixtures/dbt_projects/metricflow_testing/profiles.yml similarity index 100% rename from tests/fixtures/dbt_projects/metricflow_testing/profiles.yml rename to tests_metricflow/fixtures/dbt_projects/metricflow_testing/profiles.yml diff --git a/tests/fixtures/dbt_projects/metricflow_testing/seeds/.gitkeep b/tests_metricflow/fixtures/dbt_projects/metricflow_testing/seeds/.gitkeep similarity index 100% rename from tests/fixtures/dbt_projects/metricflow_testing/seeds/.gitkeep rename to tests_metricflow/fixtures/dbt_projects/metricflow_testing/seeds/.gitkeep diff --git a/tests/fixtures/dbt_projects/metricflow_testing/snapshots/.gitkeep b/tests_metricflow/fixtures/dbt_projects/metricflow_testing/snapshots/.gitkeep similarity index 100% rename from tests/fixtures/dbt_projects/metricflow_testing/snapshots/.gitkeep rename to tests_metricflow/fixtures/dbt_projects/metricflow_testing/snapshots/.gitkeep diff --git a/tests/fixtures/dbt_projects/metricflow_testing/tests/.gitkeep b/tests_metricflow/fixtures/dbt_projects/metricflow_testing/tests/.gitkeep similarity index 100% rename from tests/fixtures/dbt_projects/metricflow_testing/tests/.gitkeep rename to tests_metricflow/fixtures/dbt_projects/metricflow_testing/tests/.gitkeep diff --git a/tests_metricflow/fixtures/id_fixtures.py b/tests_metricflow/fixtures/id_fixtures.py new file mode 100644 index 0000000000..cec3c0131a --- /dev/null +++ b/tests_metricflow/fixtures/id_fixtures.py @@ -0,0 +1,17 @@ +from __future__ import annotations + +from typing import Generator + +import pytest +from metricflow_semantics.test_helpers.id_helpers import IdNumberSpace, patch_id_generators_helper + + +@pytest.fixture(autouse=True, scope="function") +def patch_id_generators() -> Generator[None, None, None]: + """Patch ID generators with a new one to get repeatability in plan outputs before every test. + + Plan outputs contain IDs, so if the IDs are not consistent from run to run, there will be diffs in the actual vs. + expected outputs during a test. + """ + with patch_id_generators_helper(start_value=IdNumberSpace.for_test_start().start_value): + yield None diff --git a/tests/fixtures/manifest_fixtures.py b/tests_metricflow/fixtures/manifest_fixtures.py similarity index 91% rename from tests/fixtures/manifest_fixtures.py rename to tests_metricflow/fixtures/manifest_fixtures.py index 28c04219d4..20da7ab6e9 100644 --- a/tests/fixtures/manifest_fixtures.py +++ b/tests_metricflow/fixtures/manifest_fixtures.py @@ -1,21 +1,23 @@ from __future__ import annotations import logging -import os from collections import OrderedDict from dataclasses import dataclass from enum import Enum -from typing import Dict, Mapping, Optional, Sequence +from typing import Dict, Mapping, Sequence import pytest from dbt_semantic_interfaces.implementations.semantic_manifest import PydanticSemanticManifest -from dbt_semantic_interfaces.parsing.dir_to_model import ( - SemanticManifestBuildResult, - parse_directory_of_yaml_files_to_semantic_manifest, -) from dbt_semantic_interfaces.protocols import SemanticModel from dbt_semantic_interfaces.test_utils import as_datetime -from dbt_semantic_interfaces.validations.semantic_manifest_validator import SemanticManifestValidator +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.query.query_parser import MetricFlowQueryParser +from metricflow_semantics.specs.column_assoc import ColumnAssociationResolver +from metricflow_semantics.specs.dunder_column_association_resolver import DunderColumnAssociationResolver +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration +from metricflow_semantics.test_helpers.id_helpers import IdNumberSpace, patch_id_generators_helper +from metricflow_semantics.test_helpers.manifest_helpers import load_semantic_manifest +from metricflow_semantics.test_helpers.time_helpers import ConfigurableTimeSource from metricflow.dataflow.builder.dataflow_plan_builder import DataflowPlanBuilder from metricflow.dataflow.builder.node_data_set import DataflowPlanNodeOutputDataSetResolver @@ -24,15 +26,8 @@ from metricflow.dataset.convert_semantic_model import SemanticModelToDataSetConverter from metricflow.dataset.semantic_model_adapter import SemanticModelDataSet from metricflow.engine.metricflow_engine import MetricFlowEngine -from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup -from metricflow.plan_conversion.column_resolver import DunderColumnAssociationResolver from metricflow.plan_conversion.dataflow_to_sql import DataflowToSqlQueryPlanConverter from metricflow.protocols.sql_client import SqlClient -from metricflow.query.query_parser import MetricFlowQueryParser -from metricflow.specs.column_assoc import ColumnAssociationResolver -from metricflow.test_helpers import ConfigurableTimeSource -from tests.fixtures.id_fixtures import IdNumberSpace, patch_id_generators_helper -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration logger = logging.getLogger(__name__) @@ -236,20 +231,6 @@ def mf_engine_test_fixture_mapping( return fixture_mapping -def load_semantic_manifest( - relative_manifest_path: str, - template_mapping: Optional[Dict[str, str]] = None, -) -> SemanticManifestBuildResult: - """Reads the manifest YAMLs from the standard location, applies transformations, runs validations.""" - yaml_file_directory = os.path.join(os.path.dirname(__file__), f"semantic_manifest_yamls/{relative_manifest_path}") - build_result = parse_directory_of_yaml_files_to_semantic_manifest( - yaml_file_directory, template_mapping=template_mapping - ) - validator = SemanticManifestValidator[PydanticSemanticManifest]() - validator.checked_validations(build_result.semantic_manifest) - return build_result - - @pytest.fixture(scope="session") def template_mapping(mf_test_configuration: MetricFlowTestConfiguration) -> Dict[str, str]: """Mapping for template variables in the model YAML files.""" diff --git a/tests/fixtures/setup_fixtures.py b/tests_metricflow/fixtures/setup_fixtures.py similarity index 77% rename from tests/fixtures/setup_fixtures.py rename to tests_metricflow/fixtures/setup_fixtures.py index c095df5cb4..3d441d9c83 100644 --- a/tests/fixtures/setup_fixtures.py +++ b/tests_metricflow/fixtures/setup_fixtures.py @@ -3,25 +3,23 @@ import datetime import logging import os -import warnings from pathlib import Path import _pytest.config import pytest -import sqlalchemy.util from _pytest.fixtures import FixtureRequest -from sqlalchemy.engine import make_url - -from metricflow.random_id import random_id -from metricflow.test_helpers import ( +from metricflow_semantics.random_id import random_id +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration +from metricflow_semantics.test_helpers.snapshot_helpers import ( DISPLAY_SNAPSHOTS_CLI_FLAG, OVERWRITE_SNAPSHOTS_CLI_FLAG, - MetricFlowTestConfiguration, add_display_snapshots_cli_flag, add_overwrite_snapshots_cli_flag, ) -from tests.fixtures.sql_clients.common_client import SqlDialect -from tests.table_snapshot.table_snapshots import SqlTableSnapshotHash, SqlTableSnapshotRepository +from sqlalchemy.engine import make_url + +from tests_metricflow.fixtures.sql_clients.common_client import SqlDialect +from tests_metricflow.table_snapshot.table_snapshots import SqlTableSnapshotHash, SqlTableSnapshotRepository logger = logging.getLogger(__name__) @@ -165,44 +163,3 @@ def dbt_project_dir() -> str: This is necessary for configuring both the dbt adapter for integration tests and the project location for CLI tests. """ return os.path.join(os.path.dirname(__file__), Path("dbt_projects", "metricflow_testing")) - - -@pytest.fixture(scope="session", autouse=True) -def warn_user_about_slow_tests_without_parallelism( # noqa: D103 - request: FixtureRequest, - mf_test_configuration: MetricFlowTestConfiguration, -) -> None: - worker_count_env_var = os.environ.get("PYTEST_XDIST_WORKER_COUNT", "1") - try: - num_workers = int(worker_count_env_var) - except ValueError as e: - raise ValueError( - f"Could not convert environment variable PYTEST_XDIST_WORKER_COUNT to int! " - f"Value in environ was: {worker_count_env_var}" - ) from e - - num_items = len(request.session.items) - dialect = dialect_from_url(mf_test_configuration.sql_engine_url) - - # If already running in parallel or if there's not many test items, no need to print the warning. Picking 10/30 as - # the thresholds, but not much thought has been put into it. - if num_workers > 1 or num_items < 10: - return - - # Since DuckDB / Postgres is fast, use 30 as the threshold. - if (dialect is SqlDialect.DUCKDB or dialect is SqlDialect.POSTGRESQL) and num_items < 30: - return - - if num_items > 10: - warnings.warn( - f"This test session with {dialect.name} and {num_items} item(s) is running with {num_workers} worker(s). " - f'Consider using the pytest-xdist option "-n " to parallelize execution and speed ' - f"up the session." - ) - - -@pytest.fixture(scope="session", autouse=True) -def disable_sql_alchemy_deprecation_warning() -> None: - """Since MF is tied to using SQLAlchemy 1.x.x due to the Snowflake connector, silence 2.0 deprecation warnings.""" - # Seeing 'error: Module has no attribute "SILENCE_UBER_WARNING"' in the type checker, but this seems to work. - sqlalchemy.util.deprecations.SILENCE_UBER_WARNING = True # type:ignore diff --git a/tests/fixtures/source_table_snapshots/data_warehouse_validation_model/fct_animals.yaml b/tests_metricflow/fixtures/source_table_snapshots/data_warehouse_validation_model/fct_animals.yaml similarity index 100% rename from tests/fixtures/source_table_snapshots/data_warehouse_validation_model/fct_animals.yaml rename to tests_metricflow/fixtures/source_table_snapshots/data_warehouse_validation_model/fct_animals.yaml diff --git a/tests/fixtures/source_table_snapshots/extended_date_model/dim_listings_extended.yaml b/tests_metricflow/fixtures/source_table_snapshots/extended_date_model/dim_listings_extended.yaml similarity index 100% rename from tests/fixtures/source_table_snapshots/extended_date_model/dim_listings_extended.yaml rename to tests_metricflow/fixtures/source_table_snapshots/extended_date_model/dim_listings_extended.yaml diff --git a/tests/fixtures/source_table_snapshots/extended_date_model/fct_bookings_extended.yaml b/tests_metricflow/fixtures/source_table_snapshots/extended_date_model/fct_bookings_extended.yaml similarity index 100% rename from tests/fixtures/source_table_snapshots/extended_date_model/fct_bookings_extended.yaml rename to tests_metricflow/fixtures/source_table_snapshots/extended_date_model/fct_bookings_extended.yaml diff --git a/tests/fixtures/source_table_snapshots/extended_date_model/fct_bookings_extended_monthly.yaml b/tests_metricflow/fixtures/source_table_snapshots/extended_date_model/fct_bookings_extended_monthly.yaml similarity index 100% rename from tests/fixtures/source_table_snapshots/extended_date_model/fct_bookings_extended_monthly.yaml rename to tests_metricflow/fixtures/source_table_snapshots/extended_date_model/fct_bookings_extended_monthly.yaml diff --git a/tests/fixtures/source_table_snapshots/multi_hop_join_model/account_month_txns.yaml b/tests_metricflow/fixtures/source_table_snapshots/multi_hop_join_model/account_month_txns.yaml similarity index 100% rename from tests/fixtures/source_table_snapshots/multi_hop_join_model/account_month_txns.yaml rename to tests_metricflow/fixtures/source_table_snapshots/multi_hop_join_model/account_month_txns.yaml diff --git a/tests/fixtures/source_table_snapshots/multi_hop_join_model/bridge_table.yaml b/tests_metricflow/fixtures/source_table_snapshots/multi_hop_join_model/bridge_table.yaml similarity index 100% rename from tests/fixtures/source_table_snapshots/multi_hop_join_model/bridge_table.yaml rename to tests_metricflow/fixtures/source_table_snapshots/multi_hop_join_model/bridge_table.yaml diff --git a/tests/fixtures/source_table_snapshots/multi_hop_join_model/customer_other_data.yaml b/tests_metricflow/fixtures/source_table_snapshots/multi_hop_join_model/customer_other_data.yaml similarity index 100% rename from tests/fixtures/source_table_snapshots/multi_hop_join_model/customer_other_data.yaml rename to tests_metricflow/fixtures/source_table_snapshots/multi_hop_join_model/customer_other_data.yaml diff --git a/tests/fixtures/source_table_snapshots/multi_hop_join_model/customer_table.yaml b/tests_metricflow/fixtures/source_table_snapshots/multi_hop_join_model/customer_table.yaml similarity index 100% rename from tests/fixtures/source_table_snapshots/multi_hop_join_model/customer_table.yaml rename to tests_metricflow/fixtures/source_table_snapshots/multi_hop_join_model/customer_table.yaml diff --git a/tests/fixtures/source_table_snapshots/multi_hop_join_model/third_hop_table.yaml b/tests_metricflow/fixtures/source_table_snapshots/multi_hop_join_model/third_hop_table.yaml similarity index 100% rename from tests/fixtures/source_table_snapshots/multi_hop_join_model/third_hop_table.yaml rename to tests_metricflow/fixtures/source_table_snapshots/multi_hop_join_model/third_hop_table.yaml diff --git a/tests/fixtures/source_table_snapshots/simple_model/dim_companies.yaml b/tests_metricflow/fixtures/source_table_snapshots/simple_model/dim_companies.yaml similarity index 100% rename from tests/fixtures/source_table_snapshots/simple_model/dim_companies.yaml rename to tests_metricflow/fixtures/source_table_snapshots/simple_model/dim_companies.yaml diff --git a/tests/fixtures/source_table_snapshots/simple_model/dim_listings.yaml b/tests_metricflow/fixtures/source_table_snapshots/simple_model/dim_listings.yaml similarity index 100% rename from tests/fixtures/source_table_snapshots/simple_model/dim_listings.yaml rename to tests_metricflow/fixtures/source_table_snapshots/simple_model/dim_listings.yaml diff --git a/tests/fixtures/source_table_snapshots/simple_model/dim_listings_latest.yaml b/tests_metricflow/fixtures/source_table_snapshots/simple_model/dim_listings_latest.yaml similarity index 100% rename from tests/fixtures/source_table_snapshots/simple_model/dim_listings_latest.yaml rename to tests_metricflow/fixtures/source_table_snapshots/simple_model/dim_listings_latest.yaml diff --git a/tests/fixtures/source_table_snapshots/simple_model/dim_lux_listing_id_mapping.yaml b/tests_metricflow/fixtures/source_table_snapshots/simple_model/dim_lux_listing_id_mapping.yaml similarity index 100% rename from tests/fixtures/source_table_snapshots/simple_model/dim_lux_listing_id_mapping.yaml rename to tests_metricflow/fixtures/source_table_snapshots/simple_model/dim_lux_listing_id_mapping.yaml diff --git a/tests/fixtures/source_table_snapshots/simple_model/dim_lux_listings.yaml b/tests_metricflow/fixtures/source_table_snapshots/simple_model/dim_lux_listings.yaml similarity index 100% rename from tests/fixtures/source_table_snapshots/simple_model/dim_lux_listings.yaml rename to tests_metricflow/fixtures/source_table_snapshots/simple_model/dim_lux_listings.yaml diff --git a/tests/fixtures/source_table_snapshots/simple_model/dim_primary_accounts.yaml b/tests_metricflow/fixtures/source_table_snapshots/simple_model/dim_primary_accounts.yaml similarity index 100% rename from tests/fixtures/source_table_snapshots/simple_model/dim_primary_accounts.yaml rename to tests_metricflow/fixtures/source_table_snapshots/simple_model/dim_primary_accounts.yaml diff --git a/tests/fixtures/source_table_snapshots/simple_model/dim_users.yaml b/tests_metricflow/fixtures/source_table_snapshots/simple_model/dim_users.yaml similarity index 100% rename from tests/fixtures/source_table_snapshots/simple_model/dim_users.yaml rename to tests_metricflow/fixtures/source_table_snapshots/simple_model/dim_users.yaml diff --git a/tests/fixtures/source_table_snapshots/simple_model/dim_users_latest.yaml b/tests_metricflow/fixtures/source_table_snapshots/simple_model/dim_users_latest.yaml similarity index 100% rename from tests/fixtures/source_table_snapshots/simple_model/dim_users_latest.yaml rename to tests_metricflow/fixtures/source_table_snapshots/simple_model/dim_users_latest.yaml diff --git a/tests/fixtures/source_table_snapshots/simple_model/fct_accounts.yaml b/tests_metricflow/fixtures/source_table_snapshots/simple_model/fct_accounts.yaml similarity index 100% rename from tests/fixtures/source_table_snapshots/simple_model/fct_accounts.yaml rename to tests_metricflow/fixtures/source_table_snapshots/simple_model/fct_accounts.yaml diff --git a/tests/fixtures/source_table_snapshots/simple_model/fct_bookings.yaml b/tests_metricflow/fixtures/source_table_snapshots/simple_model/fct_bookings.yaml similarity index 100% rename from tests/fixtures/source_table_snapshots/simple_model/fct_bookings.yaml rename to tests_metricflow/fixtures/source_table_snapshots/simple_model/fct_bookings.yaml diff --git a/tests/fixtures/source_table_snapshots/simple_model/fct_bookings_dt.yaml b/tests_metricflow/fixtures/source_table_snapshots/simple_model/fct_bookings_dt.yaml similarity index 100% rename from tests/fixtures/source_table_snapshots/simple_model/fct_bookings_dt.yaml rename to tests_metricflow/fixtures/source_table_snapshots/simple_model/fct_bookings_dt.yaml diff --git a/tests/fixtures/source_table_snapshots/simple_model/fct_buys.yaml b/tests_metricflow/fixtures/source_table_snapshots/simple_model/fct_buys.yaml similarity index 100% rename from tests/fixtures/source_table_snapshots/simple_model/fct_buys.yaml rename to tests_metricflow/fixtures/source_table_snapshots/simple_model/fct_buys.yaml diff --git a/tests/fixtures/source_table_snapshots/simple_model/fct_id_verifications.yaml b/tests_metricflow/fixtures/source_table_snapshots/simple_model/fct_id_verifications.yaml similarity index 100% rename from tests/fixtures/source_table_snapshots/simple_model/fct_id_verifications.yaml rename to tests_metricflow/fixtures/source_table_snapshots/simple_model/fct_id_verifications.yaml diff --git a/tests/fixtures/source_table_snapshots/simple_model/fct_revenue.yaml b/tests_metricflow/fixtures/source_table_snapshots/simple_model/fct_revenue.yaml similarity index 100% rename from tests/fixtures/source_table_snapshots/simple_model/fct_revenue.yaml rename to tests_metricflow/fixtures/source_table_snapshots/simple_model/fct_revenue.yaml diff --git a/tests/fixtures/source_table_snapshots/simple_model/fct_views.yaml b/tests_metricflow/fixtures/source_table_snapshots/simple_model/fct_views.yaml similarity index 100% rename from tests/fixtures/source_table_snapshots/simple_model/fct_views.yaml rename to tests_metricflow/fixtures/source_table_snapshots/simple_model/fct_views.yaml diff --git a/tests/fixtures/source_table_snapshots/simple_model/fct_visits.yaml b/tests_metricflow/fixtures/source_table_snapshots/simple_model/fct_visits.yaml similarity index 100% rename from tests/fixtures/source_table_snapshots/simple_model/fct_visits.yaml rename to tests_metricflow/fixtures/source_table_snapshots/simple_model/fct_visits.yaml diff --git a/tests/fixtures/source_table_snapshots/simple_multi_hop_join_manifest/all_entity_measure_table.yaml b/tests_metricflow/fixtures/source_table_snapshots/simple_multi_hop_join_manifest/all_entity_measure_table.yaml similarity index 100% rename from tests/fixtures/source_table_snapshots/simple_multi_hop_join_manifest/all_entity_measure_table.yaml rename to tests_metricflow/fixtures/source_table_snapshots/simple_multi_hop_join_manifest/all_entity_measure_table.yaml diff --git a/tests/fixtures/source_table_snapshots/simple_multi_hop_join_manifest/entity_0_dimension_table.yaml b/tests_metricflow/fixtures/source_table_snapshots/simple_multi_hop_join_manifest/entity_0_dimension_table.yaml similarity index 100% rename from tests/fixtures/source_table_snapshots/simple_multi_hop_join_manifest/entity_0_dimension_table.yaml rename to tests_metricflow/fixtures/source_table_snapshots/simple_multi_hop_join_manifest/entity_0_dimension_table.yaml diff --git a/tests/fixtures/source_table_snapshots/simple_multi_hop_join_manifest/entity_0_measure_table.yaml b/tests_metricflow/fixtures/source_table_snapshots/simple_multi_hop_join_manifest/entity_0_measure_table.yaml similarity index 100% rename from tests/fixtures/source_table_snapshots/simple_multi_hop_join_manifest/entity_0_measure_table.yaml rename to tests_metricflow/fixtures/source_table_snapshots/simple_multi_hop_join_manifest/entity_0_measure_table.yaml diff --git a/tests/fixtures/source_table_snapshots/simple_multi_hop_join_manifest/entity_1_and_entity_2_measure_table.yaml b/tests_metricflow/fixtures/source_table_snapshots/simple_multi_hop_join_manifest/entity_1_and_entity_2_measure_table.yaml similarity index 100% rename from tests/fixtures/source_table_snapshots/simple_multi_hop_join_manifest/entity_1_and_entity_2_measure_table.yaml rename to tests_metricflow/fixtures/source_table_snapshots/simple_multi_hop_join_manifest/entity_1_and_entity_2_measure_table.yaml diff --git a/tests/fixtures/source_table_snapshots/simple_multi_hop_join_manifest/entity_1_dimension_table.yaml b/tests_metricflow/fixtures/source_table_snapshots/simple_multi_hop_join_manifest/entity_1_dimension_table.yaml similarity index 100% rename from tests/fixtures/source_table_snapshots/simple_multi_hop_join_manifest/entity_1_dimension_table.yaml rename to tests_metricflow/fixtures/source_table_snapshots/simple_multi_hop_join_manifest/entity_1_dimension_table.yaml diff --git a/tests/fixtures/source_table_snapshots/simple_multi_hop_join_manifest/entity_1_measure_table.yaml b/tests_metricflow/fixtures/source_table_snapshots/simple_multi_hop_join_manifest/entity_1_measure_table.yaml similarity index 100% rename from tests/fixtures/source_table_snapshots/simple_multi_hop_join_manifest/entity_1_measure_table.yaml rename to tests_metricflow/fixtures/source_table_snapshots/simple_multi_hop_join_manifest/entity_1_measure_table.yaml diff --git a/tests/fixtures/source_table_snapshots/simple_multi_hop_join_manifest/entity_1_to_entity_0_mapping_table.yaml b/tests_metricflow/fixtures/source_table_snapshots/simple_multi_hop_join_manifest/entity_1_to_entity_0_mapping_table.yaml similarity index 100% rename from tests/fixtures/source_table_snapshots/simple_multi_hop_join_manifest/entity_1_to_entity_0_mapping_table.yaml rename to tests_metricflow/fixtures/source_table_snapshots/simple_multi_hop_join_manifest/entity_1_to_entity_0_mapping_table.yaml diff --git a/tests/fixtures/source_table_snapshots/simple_multi_hop_join_manifest/entity_2_measure_table.yaml b/tests_metricflow/fixtures/source_table_snapshots/simple_multi_hop_join_manifest/entity_2_measure_table.yaml similarity index 100% rename from tests/fixtures/source_table_snapshots/simple_multi_hop_join_manifest/entity_2_measure_table.yaml rename to tests_metricflow/fixtures/source_table_snapshots/simple_multi_hop_join_manifest/entity_2_measure_table.yaml diff --git a/tests/fixtures/source_table_snapshots/simple_multi_hop_join_manifest/entity_2_to_entity_0_mapping_table.yaml b/tests_metricflow/fixtures/source_table_snapshots/simple_multi_hop_join_manifest/entity_2_to_entity_0_mapping_table.yaml similarity index 100% rename from tests/fixtures/source_table_snapshots/simple_multi_hop_join_manifest/entity_2_to_entity_0_mapping_table.yaml rename to tests_metricflow/fixtures/source_table_snapshots/simple_multi_hop_join_manifest/entity_2_to_entity_0_mapping_table.yaml diff --git a/tests/fixtures/source_table_snapshots/time_spine_table/mf_time_spine.yaml b/tests_metricflow/fixtures/source_table_snapshots/time_spine_table/mf_time_spine.yaml similarity index 100% rename from tests/fixtures/source_table_snapshots/time_spine_table/mf_time_spine.yaml rename to tests_metricflow/fixtures/source_table_snapshots/time_spine_table/mf_time_spine.yaml diff --git a/tests/fixtures/sql_client_fixtures.py b/tests_metricflow/fixtures/sql_client_fixtures.py similarity index 80% rename from tests/fixtures/sql_client_fixtures.py rename to tests_metricflow/fixtures/sql_client_fixtures.py index 6a15a3c8c9..428578e527 100644 --- a/tests/fixtures/sql_client_fixtures.py +++ b/tests_metricflow/fixtures/sql_client_fixtures.py @@ -3,18 +3,22 @@ import json import logging import os +import warnings from typing import Generator import pytest import sqlalchemy +import sqlalchemy.util +from _pytest.fixtures import FixtureRequest from dbt.adapters.factory import get_adapter_by_type from dbt.cli.main import dbtRunner +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration from metricflow.protocols.sql_client import SqlClient -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration, dbt_project_dir, dialect_from_url -from tests.fixtures.sql_clients.adapter_backed_ddl_client import AdapterBackedDDLSqlClient -from tests.fixtures.sql_clients.common_client import SqlDialect -from tests.fixtures.sql_clients.ddl_sql_client import SqlClientWithDDLMethods +from tests_metricflow.fixtures.setup_fixtures import dbt_project_dir, dialect_from_url +from tests_metricflow.fixtures.sql_clients.adapter_backed_ddl_client import AdapterBackedDDLSqlClient +from tests_metricflow.fixtures.sql_clients.common_client import SqlDialect +from tests_metricflow.fixtures.sql_clients.ddl_sql_client import SqlClientWithDDLMethods logger = logging.getLogger(__name__) @@ -216,3 +220,44 @@ def sql_client(ddl_sql_client: SqlClientWithDDLMethods) -> SqlClient: Unless the test case itself requires the DDL methods, this is the fixture we should use. """ return ddl_sql_client + + +@pytest.fixture(scope="session", autouse=True) +def warn_user_about_slow_tests_without_parallelism( # noqa: D103 + request: FixtureRequest, + mf_test_configuration: MetricFlowTestConfiguration, +) -> None: + worker_count_env_var = os.environ.get("PYTEST_XDIST_WORKER_COUNT", "1") + try: + num_workers = int(worker_count_env_var) + except ValueError as e: + raise ValueError( + f"Could not convert environment variable PYTEST_XDIST_WORKER_COUNT to int! " + f"Value in environ was: {worker_count_env_var}" + ) from e + + num_items = len(request.session.items) + dialect = dialect_from_url(mf_test_configuration.sql_engine_url) + + # If already running in parallel or if there's not many test items, no need to print the warning. Picking 10/30 as + # the thresholds, but not much thought has been put into it. + if num_workers > 1 or num_items < 10: + return + + # Since DuckDB / Postgres is fast, use 30 as the threshold. + if (dialect is SqlDialect.DUCKDB or dialect is SqlDialect.POSTGRESQL) and num_items < 30: + return + + if num_items > 10: + warnings.warn( + f"This test session with {dialect.name} and {num_items} item(s) is running with {num_workers} worker(s). " + f'Consider using the pytest-xdist option "-n " to parallelize execution and speed ' + f"up the session." + ) + + +@pytest.fixture(scope="session", autouse=True) +def disable_sql_alchemy_deprecation_warning() -> None: + """Since MF is tied to using SQLAlchemy 1.x.x due to the Snowflake connector, silence 2.0 deprecation warnings.""" + # Seeing 'error: Module has no attribute "SILENCE_UBER_WARNING"' in the type checker, but this seems to work. + sqlalchemy.util.deprecations.SILENCE_UBER_WARNING = True # type:ignore diff --git a/tests/table_snapshot/__init__.py b/tests_metricflow/fixtures/sql_clients/__init__.py similarity index 100% rename from tests/table_snapshot/__init__.py rename to tests_metricflow/fixtures/sql_clients/__init__.py diff --git a/tests/fixtures/sql_clients/adapter_backed_ddl_client.py b/tests_metricflow/fixtures/sql_clients/adapter_backed_ddl_client.py similarity index 100% rename from tests/fixtures/sql_clients/adapter_backed_ddl_client.py rename to tests_metricflow/fixtures/sql_clients/adapter_backed_ddl_client.py diff --git a/tests/fixtures/sql_clients/base_sql_client_implementation.py b/tests_metricflow/fixtures/sql_clients/base_sql_client_implementation.py similarity index 95% rename from tests/fixtures/sql_clients/base_sql_client_implementation.py rename to tests_metricflow/fixtures/sql_clients/base_sql_client_implementation.py index eaa621b878..8f7df405fb 100644 --- a/tests/fixtures/sql_clients/base_sql_client_implementation.py +++ b/tests_metricflow/fixtures/sql_clients/base_sql_client_implementation.py @@ -6,14 +6,14 @@ from typing import Optional import pandas as pd +from metricflow_semantics.mf_logging.formatting import indent +from metricflow_semantics.mf_logging.pretty_print import mf_pformat +from metricflow_semantics.random_id import random_id +from metricflow_semantics.sql.sql_bind_parameters import SqlBindParameters -from metricflow.mf_logging.formatting import indent -from metricflow.mf_logging.pretty_print import mf_pformat from metricflow.protocols.sql_client import ( SqlClient, ) -from metricflow.random_id import random_id -from metricflow.sql.sql_bind_parameters import SqlBindParameters from metricflow.sql.sql_table import SqlTable from metricflow.sql_request.sql_request_attributes import SqlRequestId diff --git a/tests/fixtures/sql_clients/common_client.py b/tests_metricflow/fixtures/sql_clients/common_client.py similarity index 100% rename from tests/fixtures/sql_clients/common_client.py rename to tests_metricflow/fixtures/sql_clients/common_client.py diff --git a/tests/fixtures/sql_clients/ddl_sql_client.py b/tests_metricflow/fixtures/sql_clients/ddl_sql_client.py similarity index 100% rename from tests/fixtures/sql_clients/ddl_sql_client.py rename to tests_metricflow/fixtures/sql_clients/ddl_sql_client.py diff --git a/tests/fixtures/sql_clients/sqlalchemy_dialect.py b/tests_metricflow/fixtures/sql_clients/sqlalchemy_dialect.py similarity index 96% rename from tests/fixtures/sql_clients/sqlalchemy_dialect.py rename to tests_metricflow/fixtures/sql_clients/sqlalchemy_dialect.py index 885d5726c7..b5ea8f2440 100644 --- a/tests/fixtures/sql_clients/sqlalchemy_dialect.py +++ b/tests_metricflow/fixtures/sql_clients/sqlalchemy_dialect.py @@ -8,10 +8,10 @@ import pandas as pd import sqlalchemy +from metricflow_semantics.sql.sql_bind_parameters import SqlBindParameters -from metricflow.sql.sql_bind_parameters import SqlBindParameters from metricflow.sql.sql_table import SqlTable -from tests.fixtures.sql_clients.base_sql_client_implementation import BaseSqlClientImplementation +from tests_metricflow.fixtures.sql_clients.base_sql_client_implementation import BaseSqlClientImplementation logger = logging.getLogger(__name__) diff --git a/tests/fixtures/sql_fixtures.py b/tests_metricflow/fixtures/sql_fixtures.py similarity index 94% rename from tests/fixtures/sql_fixtures.py rename to tests_metricflow/fixtures/sql_fixtures.py index c14a5fd78e..f825a9d30e 100644 --- a/tests/fixtures/sql_fixtures.py +++ b/tests_metricflow/fixtures/sql_fixtures.py @@ -6,7 +6,7 @@ from metricflow.plan_conversion.dataflow_to_sql import DataflowToSqlQueryPlanConverter from metricflow.sql.render.sql_plan_renderer import DefaultSqlQueryPlanRenderer, SqlQueryPlanRenderer -from tests.fixtures.manifest_fixtures import MetricFlowEngineTestFixture, SemanticManifestSetup +from tests_metricflow.fixtures.manifest_fixtures import MetricFlowEngineTestFixture, SemanticManifestSetup @pytest.fixture diff --git a/tests/fixtures/table_fixtures.py b/tests_metricflow/fixtures/table_fixtures.py similarity index 83% rename from tests/fixtures/table_fixtures.py rename to tests_metricflow/fixtures/table_fixtures.py index e020e4660a..27e1e4bcad 100644 --- a/tests/fixtures/table_fixtures.py +++ b/tests_metricflow/fixtures/table_fixtures.py @@ -5,12 +5,13 @@ from pathlib import Path import pytest +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration -from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.fixtures.sql_clients.ddl_sql_client import SqlClientWithDDLMethods -from tests.source_schema_tools import create_tables_listed_in_table_snapshot_repository -from tests.table_snapshot.table_snapshots import ( +from metricflow.plan_conversion.time_spine import TimeSpineSource +from tests_metricflow.fixtures.sql_clients.ddl_sql_client import SqlClientWithDDLMethods +from tests_metricflow.source_schema_tools import create_tables_listed_in_table_snapshot_repository +from tests_metricflow.table_snapshot.table_snapshots import ( SqlTableSnapshotRepository, ) @@ -40,7 +41,7 @@ def check_time_spine_source( The time spine table is defined in a table snapshot YAML file and is restored to the source schema based on that definition. The definition in the YAML should align with the definition in the time_spine_source fixture. """ - time_spine_source = simple_semantic_manifest_lookup.time_spine_source + time_spine_source = TimeSpineSource.create_from_manifest(simple_semantic_manifest_lookup.semantic_manifest) assert ( time_spine_source.schema_name == mf_test_configuration.mf_source_schema ), "The time spine source table should be in the source schema" diff --git a/tests/generate_snapshots.py b/tests_metricflow/generate_snapshots.py similarity index 98% rename from tests/generate_snapshots.py rename to tests_metricflow/generate_snapshots.py index eac0b674e6..3da97d76f1 100644 --- a/tests/generate_snapshots.py +++ b/tests_metricflow/generate_snapshots.py @@ -48,12 +48,12 @@ from dbt_semantic_interfaces.implementations.base import FrozenBaseModel from metricflow.protocols.sql_client import SqlEngine -from tests.fixtures.setup_fixtures import SQL_ENGINE_SNAPSHOT_MARKER_NAME +from tests_metricflow.fixtures.setup_fixtures import SQL_ENGINE_SNAPSHOT_MARKER_NAME logger = logging.getLogger(__name__) -TEST_DIRECTORY = "tests" +TEST_DIRECTORY = "tests_metricflow" class MetricFlowTestCredentialSet(FrozenBaseModel): # noqa: D101 diff --git a/tests/telemetry/__init__.py b/tests_metricflow/inference/__init__.py similarity index 100% rename from tests/telemetry/__init__.py rename to tests_metricflow/inference/__init__.py diff --git a/tests/time/__init__.py b/tests_metricflow/inference/context/__init__.py similarity index 100% rename from tests/time/__init__.py rename to tests_metricflow/inference/context/__init__.py diff --git a/tests/inference/context/test_data_warehouse.py b/tests_metricflow/inference/context/test_data_warehouse.py similarity index 100% rename from tests/inference/context/test_data_warehouse.py rename to tests_metricflow/inference/context/test_data_warehouse.py diff --git a/tests/inference/context/test_snowflake.py b/tests_metricflow/inference/context/test_snowflake.py similarity index 100% rename from tests/inference/context/test_snowflake.py rename to tests_metricflow/inference/context/test_snowflake.py diff --git a/tests/prototype_utils.py b/tests_metricflow/inference/renderer/__init__.py similarity index 100% rename from tests/prototype_utils.py rename to tests_metricflow/inference/renderer/__init__.py diff --git a/tests/inference/renderer/test_config_file.py b/tests_metricflow/inference/renderer/test_config_file.py similarity index 100% rename from tests/inference/renderer/test_config_file.py rename to tests_metricflow/inference/renderer/test_config_file.py diff --git a/tests_metricflow/inference/rule/__init__.py b/tests_metricflow/inference/rule/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/inference/rule/conftest.py b/tests_metricflow/inference/rule/conftest.py similarity index 100% rename from tests/inference/rule/conftest.py rename to tests_metricflow/inference/rule/conftest.py diff --git a/tests/inference/rule/test_defaults.py b/tests_metricflow/inference/rule/test_defaults.py similarity index 100% rename from tests/inference/rule/test_defaults.py rename to tests_metricflow/inference/rule/test_defaults.py diff --git a/tests/inference/rule/test_rules.py b/tests_metricflow/inference/rule/test_rules.py similarity index 100% rename from tests/inference/rule/test_rules.py rename to tests_metricflow/inference/rule/test_rules.py diff --git a/tests_metricflow/inference/solver/__init__.py b/tests_metricflow/inference/solver/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/inference/solver/test_weighted_tree.py b/tests_metricflow/inference/solver/test_weighted_tree.py similarity index 100% rename from tests/inference/solver/test_weighted_tree.py rename to tests_metricflow/inference/solver/test_weighted_tree.py diff --git a/tests/inference/test_models.py b/tests_metricflow/inference/test_models.py similarity index 100% rename from tests/inference/test_models.py rename to tests_metricflow/inference/test_models.py diff --git a/tests_metricflow/integration/__init__.py b/tests_metricflow/integration/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/integration/configured_test_case.py b/tests_metricflow/integration/configured_test_case.py similarity index 100% rename from tests/integration/configured_test_case.py rename to tests_metricflow/integration/configured_test_case.py diff --git a/tests/integration/conftest.py b/tests_metricflow/integration/conftest.py similarity index 79% rename from tests/integration/conftest.py rename to tests_metricflow/integration/conftest.py index 7c71de699b..19e0d13edc 100644 --- a/tests/integration/conftest.py +++ b/tests_metricflow/integration/conftest.py @@ -4,14 +4,14 @@ import pytest from dbt_semantic_interfaces.test_utils import as_datetime +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.specs.dunder_column_association_resolver import DunderColumnAssociationResolver +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration +from metricflow_semantics.test_helpers.time_helpers import ConfigurableTimeSource from metricflow.engine.metricflow_engine import MetricFlowEngine -from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup -from metricflow.plan_conversion.column_resolver import DunderColumnAssociationResolver from metricflow.plan_conversion.time_spine import TimeSpineSource from metricflow.protocols.sql_client import SqlClient -from metricflow.test_helpers import ConfigurableTimeSource -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration @dataclass(frozen=True) diff --git a/tests_metricflow/integration/query_output/__init__.py b/tests_metricflow/integration/query_output/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/integration/query_output/test_cumulative_metrics.py b/tests_metricflow/integration/query_output/test_cumulative_metrics.py similarity index 96% rename from tests/integration/query_output/test_cumulative_metrics.py rename to tests_metricflow/integration/query_output/test_cumulative_metrics.py index f32b6d8270..a09e051b2a 100644 --- a/tests/integration/query_output/test_cumulative_metrics.py +++ b/tests_metricflow/integration/query_output/test_cumulative_metrics.py @@ -5,12 +5,12 @@ import pytest from _pytest.fixtures import FixtureRequest from dbt_semantic_interfaces.test_utils import as_datetime +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration from metricflow.engine.metricflow_engine import MetricFlowQueryRequest from metricflow.protocols.sql_client import SqlClient -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.integration.conftest import IntegrationTestHelpers -from tests.snapshot_utils import assert_str_snapshot_equal +from tests_metricflow.integration.conftest import IntegrationTestHelpers +from tests_metricflow.snapshot_utils import assert_str_snapshot_equal @pytest.mark.sql_engine_snapshot diff --git a/tests/integration/query_output/test_fill_nulls_with_0.py b/tests_metricflow/integration/query_output/test_fill_nulls_with_0.py similarity index 95% rename from tests/integration/query_output/test_fill_nulls_with_0.py rename to tests_metricflow/integration/query_output/test_fill_nulls_with_0.py index dd1acb1b0b..60ed835d01 100644 --- a/tests/integration/query_output/test_fill_nulls_with_0.py +++ b/tests_metricflow/integration/query_output/test_fill_nulls_with_0.py @@ -4,12 +4,12 @@ import pytest from _pytest.fixtures import FixtureRequest +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration from metricflow.engine.metricflow_engine import MetricFlowQueryRequest from metricflow.protocols.sql_client import SqlClient -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.integration.conftest import IntegrationTestHelpers -from tests.snapshot_utils import assert_str_snapshot_equal +from tests_metricflow.integration.conftest import IntegrationTestHelpers +from tests_metricflow.snapshot_utils import assert_str_snapshot_equal @pytest.mark.sql_engine_snapshot diff --git a/tests/integration/query_output/test_metric_filter_output.py b/tests_metricflow/integration/query_output/test_metric_filter_output.py similarity index 89% rename from tests/integration/query_output/test_metric_filter_output.py rename to tests_metricflow/integration/query_output/test_metric_filter_output.py index f0c383372e..2c8868604e 100644 --- a/tests/integration/query_output/test_metric_filter_output.py +++ b/tests_metricflow/integration/query_output/test_metric_filter_output.py @@ -2,12 +2,12 @@ import pytest from _pytest.fixtures import FixtureRequest +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration from metricflow.engine.metricflow_engine import MetricFlowQueryRequest from metricflow.protocols.sql_client import SqlClient -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.integration.conftest import IntegrationTestHelpers -from tests.snapshot_utils import assert_str_snapshot_equal +from tests_metricflow.integration.conftest import IntegrationTestHelpers +from tests_metricflow.snapshot_utils import assert_str_snapshot_equal @pytest.mark.sql_engine_snapshot diff --git a/tests/integration/query_output/test_offset_metrics.py b/tests_metricflow/integration/query_output/test_offset_metrics.py similarity index 89% rename from tests/integration/query_output/test_offset_metrics.py rename to tests_metricflow/integration/query_output/test_offset_metrics.py index 987f657d16..0e1c793a52 100644 --- a/tests/integration/query_output/test_offset_metrics.py +++ b/tests_metricflow/integration/query_output/test_offset_metrics.py @@ -2,12 +2,12 @@ import pytest from _pytest.fixtures import FixtureRequest +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration from metricflow.engine.metricflow_engine import MetricFlowQueryRequest from metricflow.protocols.sql_client import SqlClient -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.integration.conftest import IntegrationTestHelpers -from tests.snapshot_utils import assert_str_snapshot_equal +from tests_metricflow.integration.conftest import IntegrationTestHelpers +from tests_metricflow.snapshot_utils import assert_str_snapshot_equal @pytest.mark.sql_engine_snapshot diff --git a/tests/integration/test_cases/itest_constraints.yaml b/tests_metricflow/integration/test_cases/itest_constraints.yaml similarity index 100% rename from tests/integration/test_cases/itest_constraints.yaml rename to tests_metricflow/integration/test_cases/itest_constraints.yaml diff --git a/tests/integration/test_cases/itest_conversion_metric.yaml b/tests_metricflow/integration/test_cases/itest_conversion_metric.yaml similarity index 100% rename from tests/integration/test_cases/itest_conversion_metric.yaml rename to tests_metricflow/integration/test_cases/itest_conversion_metric.yaml diff --git a/tests/integration/test_cases/itest_cumulative_metric.yaml b/tests_metricflow/integration/test_cases/itest_cumulative_metric.yaml similarity index 100% rename from tests/integration/test_cases/itest_cumulative_metric.yaml rename to tests_metricflow/integration/test_cases/itest_cumulative_metric.yaml diff --git a/tests/integration/test_cases/itest_dimensions.yaml b/tests_metricflow/integration/test_cases/itest_dimensions.yaml similarity index 100% rename from tests/integration/test_cases/itest_dimensions.yaml rename to tests_metricflow/integration/test_cases/itest_dimensions.yaml diff --git a/tests/integration/test_cases/itest_dundered_identifiers.yaml b/tests_metricflow/integration/test_cases/itest_dundered_identifiers.yaml similarity index 100% rename from tests/integration/test_cases/itest_dundered_identifiers.yaml rename to tests_metricflow/integration/test_cases/itest_dundered_identifiers.yaml diff --git a/tests/integration/test_cases/itest_granularity.yaml b/tests_metricflow/integration/test_cases/itest_granularity.yaml similarity index 100% rename from tests/integration/test_cases/itest_granularity.yaml rename to tests_metricflow/integration/test_cases/itest_granularity.yaml diff --git a/tests/integration/test_cases/itest_joins.yaml b/tests_metricflow/integration/test_cases/itest_joins.yaml similarity index 100% rename from tests/integration/test_cases/itest_joins.yaml rename to tests_metricflow/integration/test_cases/itest_joins.yaml diff --git a/tests/integration/test_cases/itest_measure_aggregations.yaml b/tests_metricflow/integration/test_cases/itest_measure_aggregations.yaml similarity index 100% rename from tests/integration/test_cases/itest_measure_aggregations.yaml rename to tests_metricflow/integration/test_cases/itest_measure_aggregations.yaml diff --git a/tests/integration/test_cases/itest_measure_constraints.yaml b/tests_metricflow/integration/test_cases/itest_measure_constraints.yaml similarity index 100% rename from tests/integration/test_cases/itest_measure_constraints.yaml rename to tests_metricflow/integration/test_cases/itest_measure_constraints.yaml diff --git a/tests/integration/test_cases/itest_metric_queries_no_dimensions.yaml b/tests_metricflow/integration/test_cases/itest_metric_queries_no_dimensions.yaml similarity index 100% rename from tests/integration/test_cases/itest_metric_queries_no_dimensions.yaml rename to tests_metricflow/integration/test_cases/itest_metric_queries_no_dimensions.yaml diff --git a/tests/integration/test_cases/itest_metrics.yaml b/tests_metricflow/integration/test_cases/itest_metrics.yaml similarity index 100% rename from tests/integration/test_cases/itest_metrics.yaml rename to tests_metricflow/integration/test_cases/itest_metrics.yaml diff --git a/tests/integration/test_cases/itest_multi_hop_join.yaml b/tests_metricflow/integration/test_cases/itest_multi_hop_join.yaml similarity index 100% rename from tests/integration/test_cases/itest_multi_hop_join.yaml rename to tests_metricflow/integration/test_cases/itest_multi_hop_join.yaml diff --git a/tests/integration/test_cases/itest_order_limit.yaml b/tests_metricflow/integration/test_cases/itest_order_limit.yaml similarity index 100% rename from tests/integration/test_cases/itest_order_limit.yaml rename to tests_metricflow/integration/test_cases/itest_order_limit.yaml diff --git a/tests/integration/test_cases/itest_partitions.yaml b/tests_metricflow/integration/test_cases/itest_partitions.yaml similarity index 100% rename from tests/integration/test_cases/itest_partitions.yaml rename to tests_metricflow/integration/test_cases/itest_partitions.yaml diff --git a/tests/integration/test_cases/itest_scd.yaml b/tests_metricflow/integration/test_cases/itest_scd.yaml similarity index 100% rename from tests/integration/test_cases/itest_scd.yaml rename to tests_metricflow/integration/test_cases/itest_scd.yaml diff --git a/tests/integration/test_cases/itest_semi_additive_measure.yaml b/tests_metricflow/integration/test_cases/itest_semi_additive_measure.yaml similarity index 100% rename from tests/integration/test_cases/itest_semi_additive_measure.yaml rename to tests_metricflow/integration/test_cases/itest_semi_additive_measure.yaml diff --git a/tests/integration/test_cases/itest_simple.yaml b/tests_metricflow/integration/test_cases/itest_simple.yaml similarity index 100% rename from tests/integration/test_cases/itest_simple.yaml rename to tests_metricflow/integration/test_cases/itest_simple.yaml diff --git a/tests/integration/test_cases/itest_simple_non_sm.yaml b/tests_metricflow/integration/test_cases/itest_simple_non_sm.yaml similarity index 100% rename from tests/integration/test_cases/itest_simple_non_sm.yaml rename to tests_metricflow/integration/test_cases/itest_simple_non_sm.yaml diff --git a/tests/integration/test_configured_cases.py b/tests_metricflow/integration/test_configured_cases.py similarity index 93% rename from tests/integration/test_configured_cases.py rename to tests_metricflow/integration/test_configured_cases.py index 2af09222b0..dab436efb5 100644 --- a/tests/integration/test_configured_cases.py +++ b/tests_metricflow/integration/test_configured_cases.py @@ -13,15 +13,16 @@ from dbt_semantic_interfaces.test_utils import as_datetime from dbt_semantic_interfaces.type_enums.date_part import DatePart from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.protocols.query_parameter import DimensionOrEntityQueryParameter +from metricflow_semantics.specs.dunder_column_association_resolver import DunderColumnAssociationResolver +from metricflow_semantics.specs.query_param_implementations import DimensionOrEntityParameter, TimeDimensionParameter +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration +from metricflow_semantics.test_helpers.time_helpers import ConfigurableTimeSource from metricflow.engine.metricflow_engine import MetricFlowEngine, MetricFlowQueryRequest -from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup -from metricflow.plan_conversion.column_resolver import ( - DunderColumnAssociationResolver, -) -from metricflow.protocols.query_parameter import DimensionOrEntityQueryParameter +from metricflow.plan_conversion.time_spine import TimeSpineSource from metricflow.protocols.sql_client import SqlClient -from metricflow.specs.query_param_implementations import DimensionOrEntityParameter, TimeDimensionParameter from metricflow.sql.sql_exprs import ( SqlCastToTimestampExpression, SqlColumnReference, @@ -35,12 +36,8 @@ SqlStringExpression, SqlSubtractTimeIntervalExpression, ) -from metricflow.test_helpers import ( - ConfigurableTimeSource, -) -from tests.compare_df import assert_dataframes_equal -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.integration.configured_test_case import ( +from tests_metricflow.compare_df import assert_dataframes_equal +from tests_metricflow.integration.configured_test_case import ( CONFIGURED_INTEGRATION_TESTS_REPOSITORY, IntegrationTestModel, RequiredDwEngineFeature, @@ -319,7 +316,9 @@ def test_case( render_date_trunc=check_query_helpers.render_date_trunc, render_extract=check_query_helpers.render_extract, render_percentile_expr=check_query_helpers.render_percentile_expr, - mf_time_spine_source=semantic_manifest_lookup.time_spine_source.spine_table.sql, + mf_time_spine_source=TimeSpineSource.create_from_manifest( + semantic_manifest_lookup.semantic_manifest + ).spine_table.sql, double_data_type_name=check_query_helpers.double_data_type_name, render_dimension_template=check_query_helpers.render_dimension_template, render_entity_template=check_query_helpers.render_entity_template, @@ -352,7 +351,9 @@ def test_case( render_date_trunc=check_query_helpers.render_date_trunc, render_extract=check_query_helpers.render_extract, render_percentile_expr=check_query_helpers.render_percentile_expr, - mf_time_spine_source=semantic_manifest_lookup.time_spine_source.spine_table.sql, + mf_time_spine_source=TimeSpineSource.create_from_manifest( + semantic_manifest_lookup.semantic_manifest + ).spine_table.sql, double_data_type_name=check_query_helpers.double_data_type_name, generate_random_uuid=check_query_helpers.generate_random_uuid, cast_to_ts=check_query_helpers.cast_to_ts, diff --git a/tests/integration/test_mf_engine.py b/tests_metricflow/integration/test_mf_engine.py similarity index 67% rename from tests/integration/test_mf_engine.py rename to tests_metricflow/integration/test_mf_engine.py index 39364ce7d5..9aa1373701 100644 --- a/tests/integration/test_mf_engine.py +++ b/tests_metricflow/integration/test_mf_engine.py @@ -1,10 +1,10 @@ from __future__ import annotations from _pytest.fixtures import FixtureRequest +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.integration.conftest import IntegrationTestHelpers -from tests.snapshot_utils import assert_object_snapshot_equal +from tests_metricflow.integration.conftest import IntegrationTestHelpers +from tests_metricflow.snapshot_utils import assert_object_snapshot_equal def test_list_dimensions( # noqa: D103 diff --git a/tests/integration/test_rendered_query.py b/tests_metricflow/integration/test_rendered_query.py similarity index 84% rename from tests/integration/test_rendered_query.py rename to tests_metricflow/integration/test_rendered_query.py index 17a53fb6eb..ec5d1c6563 100644 --- a/tests/integration/test_rendered_query.py +++ b/tests_metricflow/integration/test_rendered_query.py @@ -3,15 +3,15 @@ import pytest from _pytest.fixtures import FixtureRequest from dbt_semantic_interfaces.test_utils import as_datetime +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.specs.dunder_column_association_resolver import DunderColumnAssociationResolver +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration +from metricflow_semantics.test_helpers.time_helpers import ConfigurableTimeSource from metricflow.engine.metricflow_engine import MetricFlowEngine, MetricFlowQueryRequest -from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup -from metricflow.plan_conversion.column_resolver import DunderColumnAssociationResolver from metricflow.protocols.sql_client import SqlClient -from metricflow.test_helpers import ConfigurableTimeSource -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.integration.conftest import IntegrationTestHelpers -from tests.snapshot_utils import ( +from tests_metricflow.integration.conftest import IntegrationTestHelpers +from tests_metricflow.snapshot_utils import ( assert_sql_snapshot_equal, ) diff --git a/tests_metricflow/mf_logging/__init__.py b/tests_metricflow/mf_logging/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/mf_logging/test_dag_to_text.py b/tests_metricflow/mf_logging/test_dag_to_text.py similarity index 91% rename from tests/mf_logging/test_dag_to_text.py rename to tests_metricflow/mf_logging/test_dag_to_text.py index d5d5c4c521..a3216bc63f 100644 --- a/tests/mf_logging/test_dag_to_text.py +++ b/tests_metricflow/mf_logging/test_dag_to_text.py @@ -6,13 +6,19 @@ import time from typing import List -from metricflow.dag.dag_to_text import MetricFlowDagTextFormatter -from metricflow.dag.mf_dag import DagId -from metricflow.mf_logging.formatting import indent +from metricflow_semantics.dag.dag_to_text import MetricFlowDagTextFormatter +from metricflow_semantics.dag.mf_dag import DagId +from metricflow_semantics.mf_logging.formatting import indent + from metricflow.sql.sql_exprs import ( SqlStringExpression, ) -from metricflow.sql.sql_plan import SqlQueryPlan, SqlSelectColumn, SqlSelectStatementNode, SqlTableFromClauseNode +from metricflow.sql.sql_plan import ( + SqlQueryPlan, + SqlSelectColumn, + SqlSelectStatementNode, + SqlTableFromClauseNode, +) from metricflow.sql.sql_table import SqlTable logger = logging.getLogger(__name__) diff --git a/tests_metricflow/plan_conversion/__init__.py b/tests_metricflow/plan_conversion/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests_metricflow/plan_conversion/dataflow_to_sql/__init__.py b/tests_metricflow/plan_conversion/dataflow_to_sql/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/plan_conversion/dataflow_to_sql/test_conversion_metrics_to_sql.py b/tests_metricflow/plan_conversion/dataflow_to_sql/test_conversion_metrics_to_sql.py similarity index 96% rename from tests/plan_conversion/dataflow_to_sql/test_conversion_metrics_to_sql.py rename to tests_metricflow/plan_conversion/dataflow_to_sql/test_conversion_metrics_to_sql.py index c7f71fd906..fc3138738a 100644 --- a/tests/plan_conversion/dataflow_to_sql/test_conversion_metrics_to_sql.py +++ b/tests_metricflow/plan_conversion/dataflow_to_sql/test_conversion_metrics_to_sql.py @@ -4,18 +4,18 @@ from _pytest.fixtures import FixtureRequest from dbt_semantic_interfaces.references import EntityReference from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity - -from metricflow.dataflow.builder.dataflow_plan_builder import DataflowPlanBuilder -from metricflow.plan_conversion.dataflow_to_sql import DataflowToSqlQueryPlanConverter -from metricflow.protocols.sql_client import SqlClient -from metricflow.specs.specs import ( +from metricflow_semantics.specs.spec_classes import ( DimensionSpec, MetricFlowQuerySpec, MetricSpec, TimeDimensionSpec, ) -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.plan_conversion.test_dataflow_to_sql_plan import convert_and_check +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration + +from metricflow.dataflow.builder.dataflow_plan_builder import DataflowPlanBuilder +from metricflow.plan_conversion.dataflow_to_sql import DataflowToSqlQueryPlanConverter +from metricflow.protocols.sql_client import SqlClient +from tests_metricflow.plan_conversion.test_dataflow_to_sql_plan import convert_and_check @pytest.mark.sql_engine_snapshot diff --git a/tests/plan_conversion/dataflow_to_sql/test_distinct_values_to_sql.py b/tests_metricflow/plan_conversion/dataflow_to_sql/test_distinct_values_to_sql.py similarity index 86% rename from tests/plan_conversion/dataflow_to_sql/test_distinct_values_to_sql.py rename to tests_metricflow/plan_conversion/dataflow_to_sql/test_distinct_values_to_sql.py index 10824a4255..a7771e4c97 100644 --- a/tests/plan_conversion/dataflow_to_sql/test_distinct_values_to_sql.py +++ b/tests_metricflow/plan_conversion/dataflow_to_sql/test_distinct_values_to_sql.py @@ -4,15 +4,15 @@ from _pytest.fixtures import FixtureRequest from dbt_semantic_interfaces.implementations.filters.where_filter import PydanticWhereFilter from dbt_semantic_interfaces.references import EntityReference +from metricflow_semantics.query.query_parser import MetricFlowQueryParser +from metricflow_semantics.specs.column_assoc import ColumnAssociationResolver +from metricflow_semantics.specs.spec_classes import DimensionSpec, MetricFlowQuerySpec +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration from metricflow.dataflow.builder.dataflow_plan_builder import DataflowPlanBuilder from metricflow.plan_conversion.dataflow_to_sql import DataflowToSqlQueryPlanConverter from metricflow.protocols.sql_client import SqlClient -from metricflow.query.query_parser import MetricFlowQueryParser -from metricflow.specs.column_assoc import ColumnAssociationResolver -from metricflow.specs.specs import DimensionSpec, MetricFlowQuerySpec -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.plan_conversion.test_dataflow_to_sql_plan import convert_and_check +from tests_metricflow.plan_conversion.test_dataflow_to_sql_plan import convert_and_check @pytest.mark.sql_engine_snapshot diff --git a/tests/plan_conversion/dataflow_to_sql/test_metric_time_dimension_to_sql.py b/tests_metricflow/plan_conversion/dataflow_to_sql/test_metric_time_dimension_to_sql.py similarity index 89% rename from tests/plan_conversion/dataflow_to_sql/test_metric_time_dimension_to_sql.py rename to tests_metricflow/plan_conversion/dataflow_to_sql/test_metric_time_dimension_to_sql.py index 3b9abcb090..ae53da1509 100644 --- a/tests/plan_conversion/dataflow_to_sql/test_metric_time_dimension_to_sql.py +++ b/tests_metricflow/plan_conversion/dataflow_to_sql/test_metric_time_dimension_to_sql.py @@ -5,16 +5,16 @@ import pytest from _pytest.fixtures import FixtureRequest from dbt_semantic_interfaces.references import TimeDimensionReference +from metricflow_semantics.specs.spec_classes import MetricFlowQuerySpec, MetricSpec +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration +from metricflow_semantics.test_helpers.metric_time_dimension import MTD_SPEC_DAY from metricflow.dataflow.builder.dataflow_plan_builder import DataflowPlanBuilder from metricflow.dataflow.nodes.metric_time_transform import MetricTimeDimensionTransformNode from metricflow.plan_conversion.dataflow_to_sql import DataflowToSqlQueryPlanConverter from metricflow.protocols.sql_client import SqlClient -from metricflow.specs.specs import MetricFlowQuerySpec, MetricSpec -from tests.fixtures.manifest_fixtures import MetricFlowEngineTestFixture, SemanticManifestSetup -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.plan_conversion.test_dataflow_to_sql_plan import convert_and_check -from tests.time.metric_time_dimension import MTD_SPEC_DAY +from tests_metricflow.fixtures.manifest_fixtures import MetricFlowEngineTestFixture, SemanticManifestSetup +from tests_metricflow.plan_conversion.test_dataflow_to_sql_plan import convert_and_check @pytest.mark.sql_engine_snapshot diff --git a/tests_metricflow/plan_conversion/instance_converters/__init__.py b/tests_metricflow/plan_conversion/instance_converters/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/plan_conversion/instance_converters/test_create_select_columns_with_measures_aggregated.py b/tests_metricflow/plan_conversion/instance_converters/test_create_select_columns_with_measures_aggregated.py similarity index 95% rename from tests/plan_conversion/instance_converters/test_create_select_columns_with_measures_aggregated.py rename to tests_metricflow/plan_conversion/instance_converters/test_create_select_columns_with_measures_aggregated.py index 5bcc426c10..fbd9f7eb10 100644 --- a/tests/plan_conversion/instance_converters/test_create_select_columns_with_measures_aggregated.py +++ b/tests_metricflow/plan_conversion/instance_converters/test_create_select_columns_with_measures_aggregated.py @@ -2,21 +2,22 @@ from typing import Mapping -from metricflow.instances import InstanceSet -from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup -from metricflow.plan_conversion.column_resolver import DunderColumnAssociationResolver +from metricflow_semantics.instances import InstanceSet +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.specs.dunder_column_association_resolver import DunderColumnAssociationResolver +from metricflow_semantics.specs.spec_classes import InstanceSpecSet, MeasureSpec, MetricInputMeasureSpec + from metricflow.plan_conversion.instance_converters import ( CreateSelectColumnsWithMeasuresAggregated, FilterElements, ) from metricflow.plan_conversion.select_column_gen import SelectColumnSet -from metricflow.specs.specs import InstanceSpecSet, MeasureSpec, MetricInputMeasureSpec from metricflow.sql.sql_exprs import ( SqlAggregateFunctionExpression, SqlFunction, SqlPercentileExpression, ) -from tests.fixtures.manifest_fixtures import MetricFlowEngineTestFixture, SemanticManifestSetup +from tests_metricflow.fixtures.manifest_fixtures import MetricFlowEngineTestFixture, SemanticManifestSetup __SOURCE_TABLE_ALIAS = "a" diff --git a/tests/plan_conversion/instance_converters/test_create_validity_window_join_description.py b/tests_metricflow/plan_conversion/instance_converters/test_create_validity_window_join_description.py similarity index 92% rename from tests/plan_conversion/instance_converters/test_create_validity_window_join_description.py rename to tests_metricflow/plan_conversion/instance_converters/test_create_validity_window_join_description.py index 7aa9fe0c48..3e3738f77a 100644 --- a/tests/plan_conversion/instance_converters/test_create_validity_window_join_description.py +++ b/tests_metricflow/plan_conversion/instance_converters/test_create_validity_window_join_description.py @@ -4,13 +4,13 @@ import pytest from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity +from metricflow_semantics.instances import InstanceSet +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.specs.spec_classes import TimeDimensionSpec from metricflow.dataflow.nodes.join_to_base import ValidityWindowJoinDescription -from metricflow.instances import InstanceSet -from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup from metricflow.plan_conversion.instance_converters import CreateValidityWindowJoinDescription -from metricflow.specs.specs import TimeDimensionSpec -from tests.fixtures.manifest_fixtures import MetricFlowEngineTestFixture, SemanticManifestSetup +from tests_metricflow.fixtures.manifest_fixtures import MetricFlowEngineTestFixture, SemanticManifestSetup def test_no_validity_dims( diff --git a/tests/plan_conversion/test_dataflow_to_execution.py b/tests_metricflow/plan_conversion/test_dataflow_to_execution.py similarity index 92% rename from tests/plan_conversion/test_dataflow_to_execution.py rename to tests_metricflow/plan_conversion/test_dataflow_to_execution.py index c2ed0d9fed..925c7b22e7 100644 --- a/tests/plan_conversion/test_dataflow_to_execution.py +++ b/tests_metricflow/plan_conversion/test_dataflow_to_execution.py @@ -2,23 +2,23 @@ import pytest from _pytest.fixtures import FixtureRequest - -from metricflow.dataflow.builder.dataflow_plan_builder import DataflowPlanBuilder -from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup -from metricflow.plan_conversion.column_resolver import DunderColumnAssociationResolver -from metricflow.plan_conversion.dataflow_to_execution import DataflowToExecutionPlanConverter -from metricflow.plan_conversion.dataflow_to_sql import DataflowToSqlQueryPlanConverter -from metricflow.protocols.sql_client import SqlClient -from metricflow.specs.specs import ( +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.specs.dunder_column_association_resolver import DunderColumnAssociationResolver +from metricflow_semantics.specs.spec_classes import ( DimensionSpec, EntityReference, MetricFlowQuerySpec, MetricSpec, TimeDimensionSpec, ) +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration + +from metricflow.dataflow.builder.dataflow_plan_builder import DataflowPlanBuilder +from metricflow.execution.dataflow_to_execution import DataflowToExecutionPlanConverter +from metricflow.plan_conversion.dataflow_to_sql import DataflowToSqlQueryPlanConverter +from metricflow.protocols.sql_client import SqlClient from metricflow.sql.render.sql_plan_renderer import DefaultSqlQueryPlanRenderer -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.snapshot_utils import assert_execution_plan_text_equal +from tests_metricflow.snapshot_utils import assert_execution_plan_text_equal def make_execution_plan_converter( # noqa: D103 diff --git a/tests/plan_conversion/test_dataflow_to_sql_plan.py b/tests_metricflow/plan_conversion/test_dataflow_to_sql_plan.py similarity index 97% rename from tests/plan_conversion/test_dataflow_to_sql_plan.py rename to tests_metricflow/plan_conversion/test_dataflow_to_sql_plan.py index 7cfe2223dd..a007d72765 100644 --- a/tests/plan_conversion/test_dataflow_to_sql_plan.py +++ b/tests_metricflow/plan_conversion/test_dataflow_to_sql_plan.py @@ -9,8 +9,30 @@ from dbt_semantic_interfaces.test_utils import as_datetime from dbt_semantic_interfaces.type_enums.aggregation_type import AggregationType from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity +from metricflow_semantics.dag.mf_dag import DagId +from metricflow_semantics.filters.time_constraint import TimeRangeConstraint +from metricflow_semantics.query.query_parser import MetricFlowQueryParser +from metricflow_semantics.specs.column_assoc import ColumnAssociationResolver +from metricflow_semantics.specs.spec_classes import ( + DimensionSpec, + InstanceSpecSet, + LinkableSpecSet, + LinklessEntitySpec, + MeasureSpec, + MetricFlowQuerySpec, + MetricInputMeasureSpec, + MetricSpec, + NonAdditiveDimensionSpec, + OrderBySpec, + TimeDimensionSpec, + WhereFilterSpec, +) +from metricflow_semantics.sql.sql_bind_parameters import SqlBindParameters +from metricflow_semantics.sql.sql_join_type import SqlJoinType +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration +from metricflow_semantics.test_helpers.metric_time_dimension import MTD_SPEC_DAY +from metricflow_semantics.test_helpers.snapshot_helpers import assert_plan_snapshot_text_equal -from metricflow.dag.mf_dag import DagId from metricflow.dataflow.builder.dataflow_plan_builder import DataflowPlanBuilder from metricflow.dataflow.dataflow_plan import ( BaseOutput, @@ -28,34 +50,12 @@ from metricflow.dataflow.nodes.semi_additive_join import SemiAdditiveJoinNode from metricflow.dataflow.nodes.where_filter import WhereConstraintNode from metricflow.dataflow.nodes.write_to_dataframe import WriteToResultDataframeNode -from metricflow.filters.time_constraint import TimeRangeConstraint from metricflow.plan_conversion.dataflow_to_sql import DataflowToSqlQueryPlanConverter from metricflow.protocols.sql_client import SqlClient -from metricflow.query.query_parser import MetricFlowQueryParser -from metricflow.specs.column_assoc import ColumnAssociationResolver -from metricflow.specs.specs import ( - DimensionSpec, - InstanceSpecSet, - LinkableSpecSet, - LinklessEntitySpec, - MeasureSpec, - MetricFlowQuerySpec, - MetricInputMeasureSpec, - MetricSpec, - NonAdditiveDimensionSpec, - OrderBySpec, - TimeDimensionSpec, - WhereFilterSpec, -) from metricflow.sql.optimizer.optimization_levels import SqlQueryOptimizationLevel -from metricflow.sql.sql_bind_parameters import SqlBindParameters -from metricflow.sql.sql_plan import SqlJoinType -from tests.dataflow_plan_to_svg import display_graph_if_requested -from tests.fixtures.manifest_fixtures import MetricFlowEngineTestFixture, SemanticManifestSetup -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.snapshot_utils import assert_plan_snapshot_text_equal -from tests.sql.compare_sql_plan import assert_rendered_sql_from_plan_equal, assert_sql_plan_text_equal -from tests.time.metric_time_dimension import MTD_SPEC_DAY +from tests_metricflow.dataflow_plan_to_svg import display_graph_if_requested +from tests_metricflow.fixtures.manifest_fixtures import MetricFlowEngineTestFixture, SemanticManifestSetup +from tests_metricflow.sql.compare_sql_plan import assert_rendered_sql_from_plan_equal, assert_sql_plan_text_equal def convert_and_check( diff --git a/tests/plan_conversion/test_time_spine.py b/tests_metricflow/plan_conversion/test_time_spine.py similarity index 69% rename from tests/plan_conversion/test_time_spine.py rename to tests_metricflow/plan_conversion/test_time_spine.py index 8feef5120c..443922519e 100644 --- a/tests/plan_conversion/test_time_spine.py +++ b/tests_metricflow/plan_conversion/test_time_spine.py @@ -1,11 +1,12 @@ from __future__ import annotations +from metricflow_semantics.filters.time_constraint import TimeRangeConstraint +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow_semantics.time.time_constants import ISO8601_PYTHON_TS_FORMAT from pandas import DataFrame -from metricflow.filters.time_constraint import TimeRangeConstraint -from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup +from metricflow.plan_conversion.time_spine import TimeSpineSource from metricflow.protocols.sql_client import SqlClient -from metricflow.time.time_constants import ISO8601_PYTHON_TS_FORMAT def test_date_spine_date_range( # noqa: D103 @@ -13,7 +14,7 @@ def test_date_spine_date_range( # noqa: D103 simple_semantic_manifest_lookup: SemanticManifestLookup, create_source_tables: None, ) -> None: - time_spine_source = simple_semantic_manifest_lookup.time_spine_source + time_spine_source = TimeSpineSource.create_from_manifest(simple_semantic_manifest_lookup.semantic_manifest) range_df: DataFrame = sql_client.query( f"""\ SELECT diff --git a/tests/populate_persistent_source_schemas.py b/tests_metricflow/populate_persistent_source_schemas.py similarity index 96% rename from tests/populate_persistent_source_schemas.py rename to tests_metricflow/populate_persistent_source_schemas.py index c4628d71db..878e4ebb9f 100644 --- a/tests/populate_persistent_source_schemas.py +++ b/tests_metricflow/populate_persistent_source_schemas.py @@ -8,7 +8,7 @@ from dbt_semantic_interfaces.enum_extension import assert_values_exhausted from metricflow.protocols.sql_client import SqlEngine -from tests.generate_snapshots import ( +from tests_metricflow.generate_snapshots import ( MetricFlowTestConfiguration, run_cli, run_command, diff --git a/tests_metricflow/prototype_utils.py b/tests_metricflow/prototype_utils.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests_metricflow/query_rendering/__init__.py b/tests_metricflow/query_rendering/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/query_rendering/compare_rendered_query.py b/tests_metricflow/query_rendering/compare_rendered_query.py similarity index 88% rename from tests/query_rendering/compare_rendered_query.py rename to tests_metricflow/query_rendering/compare_rendered_query.py index c37a1f1647..3647ab12fc 100644 --- a/tests/query_rendering/compare_rendered_query.py +++ b/tests_metricflow/query_rendering/compare_rendered_query.py @@ -3,15 +3,15 @@ from __future__ import annotations from _pytest.fixtures import FixtureRequest +from metricflow_semantics.dag.mf_dag import DagId +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration -from metricflow.dag.mf_dag import DagId from metricflow.dataflow.dataflow_plan import BaseOutput from metricflow.plan_conversion.dataflow_to_sql import DataflowToSqlQueryPlanConverter from metricflow.protocols.sql_client import SqlClient from metricflow.sql.optimizer.optimization_levels import SqlQueryOptimizationLevel -from tests.dataflow_plan_to_svg import display_graph_if_requested -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.sql.compare_sql_plan import assert_rendered_sql_from_plan_equal +from tests_metricflow.dataflow_plan_to_svg import display_graph_if_requested +from tests_metricflow.sql.compare_sql_plan import assert_rendered_sql_from_plan_equal def convert_and_check( diff --git a/tests/query_rendering/test_cumulative_metric_rendering.py b/tests_metricflow/query_rendering/test_cumulative_metric_rendering.py similarity index 94% rename from tests/query_rendering/test_cumulative_metric_rendering.py rename to tests_metricflow/query_rendering/test_cumulative_metric_rendering.py index 0872c312cc..a96e1f532c 100644 --- a/tests/query_rendering/test_cumulative_metric_rendering.py +++ b/tests_metricflow/query_rendering/test_cumulative_metric_rendering.py @@ -10,18 +10,18 @@ from dbt_semantic_interfaces.naming.keywords import METRIC_TIME_ELEMENT_NAME from dbt_semantic_interfaces.test_utils import as_datetime from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity +from metricflow_semantics.filters.time_constraint import TimeRangeConstraint +from metricflow_semantics.query.query_parser import MetricFlowQueryParser +from metricflow_semantics.specs.column_assoc import ColumnAssociationResolver +from metricflow_semantics.specs.spec_classes import EntityReference, MetricFlowQuerySpec, MetricSpec, TimeDimensionSpec +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration +from metricflow_semantics.test_helpers.metric_time_dimension import MTD_SPEC_MONTH from metricflow.dataflow.builder.dataflow_plan_builder import DataflowPlanBuilder -from metricflow.filters.time_constraint import TimeRangeConstraint from metricflow.plan_conversion.dataflow_to_sql import DataflowToSqlQueryPlanConverter from metricflow.protocols.sql_client import SqlClient -from metricflow.query.query_parser import MetricFlowQueryParser -from metricflow.specs.column_assoc import ColumnAssociationResolver -from metricflow.specs.specs import EntityReference, MetricFlowQuerySpec, MetricSpec, TimeDimensionSpec -from tests.fixtures.manifest_fixtures import MetricFlowEngineTestFixture, SemanticManifestSetup -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.query_rendering.compare_rendered_query import convert_and_check -from tests.time.metric_time_dimension import MTD_SPEC_MONTH +from tests_metricflow.fixtures.manifest_fixtures import MetricFlowEngineTestFixture, SemanticManifestSetup +from tests_metricflow.query_rendering.compare_rendered_query import convert_and_check @pytest.mark.sql_engine_snapshot diff --git a/tests/query_rendering/test_derived_metric_rendering.py b/tests_metricflow/query_rendering/test_derived_metric_rendering.py similarity index 97% rename from tests/query_rendering/test_derived_metric_rendering.py rename to tests_metricflow/query_rendering/test_derived_metric_rendering.py index efc852ad3f..509ee6c253 100644 --- a/tests/query_rendering/test_derived_metric_rendering.py +++ b/tests_metricflow/query_rendering/test_derived_metric_rendering.py @@ -8,21 +8,16 @@ from _pytest.fixtures import FixtureRequest from dbt_semantic_interfaces.implementations.filters.where_filter import PydanticWhereFilter from dbt_semantic_interfaces.naming.keywords import METRIC_TIME_ELEMENT_NAME - -from metricflow.dataflow.builder.dataflow_plan_builder import DataflowPlanBuilder -from metricflow.filters.time_constraint import TimeRangeConstraint -from metricflow.naming.dunder_scheme import DunderNamingScheme -from metricflow.plan_conversion.dataflow_to_sql import DataflowToSqlQueryPlanConverter -from metricflow.protocols.sql_client import SqlClient -from metricflow.query.query_parser import MetricFlowQueryParser -from metricflow.specs.column_assoc import ColumnAssociationResolver -from metricflow.specs.specs import ( +from metricflow_semantics.filters.time_constraint import TimeRangeConstraint +from metricflow_semantics.naming.dunder_scheme import DunderNamingScheme +from metricflow_semantics.query.query_parser import MetricFlowQueryParser +from metricflow_semantics.specs.column_assoc import ColumnAssociationResolver +from metricflow_semantics.specs.spec_classes import ( MetricFlowQuerySpec, MetricSpec, ) -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.query_rendering.compare_rendered_query import convert_and_check -from tests.time.metric_time_dimension import ( +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration +from metricflow_semantics.test_helpers.metric_time_dimension import ( MTD_SPEC_DAY, MTD_SPEC_MONTH, MTD_SPEC_QUARTER, @@ -30,6 +25,11 @@ MTD_SPEC_YEAR, ) +from metricflow.dataflow.builder.dataflow_plan_builder import DataflowPlanBuilder +from metricflow.plan_conversion.dataflow_to_sql import DataflowToSqlQueryPlanConverter +from metricflow.protocols.sql_client import SqlClient +from tests_metricflow.query_rendering.compare_rendered_query import convert_and_check + @pytest.mark.sql_engine_snapshot def test_derived_metric( # noqa: D103 diff --git a/tests/query_rendering/test_fill_nulls_with_rendering.py b/tests_metricflow/query_rendering/test_fill_nulls_with_rendering.py similarity index 95% rename from tests/query_rendering/test_fill_nulls_with_rendering.py rename to tests_metricflow/query_rendering/test_fill_nulls_with_rendering.py index f4b4a97853..ae903803c6 100644 --- a/tests/query_rendering/test_fill_nulls_with_rendering.py +++ b/tests_metricflow/query_rendering/test_fill_nulls_with_rendering.py @@ -11,20 +11,20 @@ ) from dbt_semantic_interfaces.references import EntityReference from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity - -from metricflow.dataflow.builder.dataflow_plan_builder import DataflowPlanBuilder -from metricflow.dataset.dataset import DataSet -from metricflow.plan_conversion.dataflow_to_sql import DataflowToSqlQueryPlanConverter -from metricflow.protocols.sql_client import SqlClient -from metricflow.query.query_parser import MetricFlowQueryParser -from metricflow.specs.specs import ( +from metricflow_semantics.query.query_parser import MetricFlowQueryParser +from metricflow_semantics.specs.spec_classes import ( DimensionSpec, MetricFlowQuerySpec, MetricSpec, TimeDimensionSpec, ) -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.query_rendering.compare_rendered_query import convert_and_check +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration + +from metricflow.dataflow.builder.dataflow_plan_builder import DataflowPlanBuilder +from metricflow.dataset.dataset_classes import DataSet +from metricflow.plan_conversion.dataflow_to_sql import DataflowToSqlQueryPlanConverter +from metricflow.protocols.sql_client import SqlClient +from tests_metricflow.query_rendering.compare_rendered_query import convert_and_check @pytest.mark.sql_engine_snapshot diff --git a/tests/query_rendering/test_granularity_date_part_rendering.py b/tests_metricflow/query_rendering/test_granularity_date_part_rendering.py similarity index 93% rename from tests/query_rendering/test_granularity_date_part_rendering.py rename to tests_metricflow/query_rendering/test_granularity_date_part_rendering.py index 5aedeb9498..b4bfd33a7c 100644 --- a/tests/query_rendering/test_granularity_date_part_rendering.py +++ b/tests_metricflow/query_rendering/test_granularity_date_part_rendering.py @@ -10,17 +10,17 @@ from _pytest.fixtures import FixtureRequest from dbt_semantic_interfaces.type_enums.date_part import DatePart from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity +from metricflow_semantics.specs.spec_classes import ( + MetricFlowQuerySpec, + MetricSpec, +) +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration from metricflow.dataflow.builder.dataflow_plan_builder import DataflowPlanBuilder -from metricflow.dataset.dataset import DataSet +from metricflow.dataset.dataset_classes import DataSet from metricflow.plan_conversion.dataflow_to_sql import DataflowToSqlQueryPlanConverter from metricflow.protocols.sql_client import SqlClient -from metricflow.specs.specs import ( - MetricFlowQuerySpec, - MetricSpec, -) -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.query_rendering.compare_rendered_query import convert_and_check +from tests_metricflow.query_rendering.compare_rendered_query import convert_and_check @pytest.mark.sql_engine_snapshot diff --git a/tests/query_rendering/test_metric_filter_rendering.py b/tests_metricflow/query_rendering/test_metric_filter_rendering.py similarity index 97% rename from tests/query_rendering/test_metric_filter_rendering.py rename to tests_metricflow/query_rendering/test_metric_filter_rendering.py index 9d1a14581e..ee1869a727 100644 --- a/tests/query_rendering/test_metric_filter_rendering.py +++ b/tests_metricflow/query_rendering/test_metric_filter_rendering.py @@ -3,13 +3,13 @@ import pytest from _pytest.fixtures import FixtureRequest from dbt_semantic_interfaces.implementations.filters.where_filter import PydanticWhereFilter +from metricflow_semantics.query.query_parser import MetricFlowQueryParser +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration from metricflow.dataflow.builder.dataflow_plan_builder import DataflowPlanBuilder from metricflow.plan_conversion.dataflow_to_sql import DataflowToSqlQueryPlanConverter from metricflow.protocols.sql_client import SqlClient -from metricflow.query.query_parser import MetricFlowQueryParser -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.query_rendering.compare_rendered_query import convert_and_check +from tests_metricflow.query_rendering.compare_rendered_query import convert_and_check @pytest.mark.sql_engine_snapshot diff --git a/tests/query_rendering/test_metric_time_without_metrics.py b/tests_metricflow/query_rendering/test_metric_time_without_metrics.py similarity index 90% rename from tests/query_rendering/test_metric_time_without_metrics.py rename to tests_metricflow/query_rendering/test_metric_time_without_metrics.py index 37803471eb..55f32370e5 100644 --- a/tests/query_rendering/test_metric_time_without_metrics.py +++ b/tests_metricflow/query_rendering/test_metric_time_without_metrics.py @@ -6,15 +6,15 @@ from _pytest.fixtures import FixtureRequest from dbt_semantic_interfaces.references import EntityReference from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity +from metricflow_semantics.filters.time_constraint import TimeRangeConstraint +from metricflow_semantics.specs.spec_classes import DimensionSpec, MetricFlowQuerySpec, TimeDimensionSpec +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration +from metricflow_semantics.test_helpers.metric_time_dimension import MTD_SPEC_DAY from metricflow.dataflow.builder.dataflow_plan_builder import DataflowPlanBuilder -from metricflow.filters.time_constraint import TimeRangeConstraint from metricflow.plan_conversion.dataflow_to_sql import DataflowToSqlQueryPlanConverter from metricflow.protocols.sql_client import SqlClient -from metricflow.specs.specs import DimensionSpec, MetricFlowQuerySpec, TimeDimensionSpec -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.plan_conversion.test_dataflow_to_sql_plan import convert_and_check -from tests.time.metric_time_dimension import MTD_SPEC_DAY +from tests_metricflow.plan_conversion.test_dataflow_to_sql_plan import convert_and_check @pytest.mark.sql_engine_snapshot diff --git a/tests/query_rendering/test_query_rendering.py b/tests_metricflow/query_rendering/test_query_rendering.py similarity index 97% rename from tests/query_rendering/test_query_rendering.py rename to tests_metricflow/query_rendering/test_query_rendering.py index a1360ff4ee..fe32116bfb 100644 --- a/tests/query_rendering/test_query_rendering.py +++ b/tests_metricflow/query_rendering/test_query_rendering.py @@ -15,23 +15,23 @@ from dbt_semantic_interfaces.references import EntityReference from dbt_semantic_interfaces.test_utils import as_datetime from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity - -from metricflow.dataflow.builder.dataflow_plan_builder import DataflowPlanBuilder -from metricflow.dataset.dataset import DataSet -from metricflow.filters.time_constraint import TimeRangeConstraint -from metricflow.plan_conversion.dataflow_to_sql import DataflowToSqlQueryPlanConverter -from metricflow.protocols.sql_client import SqlClient -from metricflow.query.query_parser import MetricFlowQueryParser -from metricflow.specs.column_assoc import ColumnAssociationResolver -from metricflow.specs.specs import ( +from metricflow_semantics.filters.time_constraint import TimeRangeConstraint +from metricflow_semantics.query.query_parser import MetricFlowQueryParser +from metricflow_semantics.specs.column_assoc import ColumnAssociationResolver +from metricflow_semantics.specs.spec_classes import ( DimensionSpec, MetricFlowQuerySpec, MetricSpec, TimeDimensionSpec, ) -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.query_rendering.compare_rendered_query import convert_and_check -from tests.time.metric_time_dimension import MTD_SPEC_DAY, MTD_SPEC_WEEK +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration +from metricflow_semantics.test_helpers.metric_time_dimension import MTD_SPEC_DAY, MTD_SPEC_WEEK + +from metricflow.dataflow.builder.dataflow_plan_builder import DataflowPlanBuilder +from metricflow.dataset.dataset_classes import DataSet +from metricflow.plan_conversion.dataflow_to_sql import DataflowToSqlQueryPlanConverter +from metricflow.protocols.sql_client import SqlClient +from tests_metricflow.query_rendering.compare_rendered_query import convert_and_check @pytest.mark.sql_engine_snapshot diff --git a/tests/query_rendering/test_time_spine_join_rendering.py b/tests_metricflow/query_rendering/test_time_spine_join_rendering.py similarity index 86% rename from tests/query_rendering/test_time_spine_join_rendering.py rename to tests_metricflow/query_rendering/test_time_spine_join_rendering.py index 8da48fcf82..58a07c9f2e 100644 --- a/tests/query_rendering/test_time_spine_join_rendering.py +++ b/tests_metricflow/query_rendering/test_time_spine_join_rendering.py @@ -11,17 +11,17 @@ import pytest from _pytest.fixtures import FixtureRequest from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity +from metricflow_semantics.specs.spec_classes import ( + MetricFlowQuerySpec, + MetricSpec, +) +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration from metricflow.dataflow.builder.dataflow_plan_builder import DataflowPlanBuilder -from metricflow.dataset.dataset import DataSet +from metricflow.dataset.dataset_classes import DataSet from metricflow.plan_conversion.dataflow_to_sql import DataflowToSqlQueryPlanConverter from metricflow.protocols.sql_client import SqlClient -from metricflow.specs.specs import ( - MetricFlowQuerySpec, - MetricSpec, -) -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.query_rendering.compare_rendered_query import convert_and_check +from tests_metricflow.query_rendering.compare_rendered_query import convert_and_check @pytest.mark.sql_engine_snapshot diff --git a/tests_metricflow/semantics/__init__.py b/tests_metricflow/semantics/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests_metricflow/snapshot_utils.py b/tests_metricflow/snapshot_utils.py new file mode 100644 index 0000000000..111a5d4e16 --- /dev/null +++ b/tests_metricflow/snapshot_utils.py @@ -0,0 +1,130 @@ +from __future__ import annotations + +import logging +from typing import Any, Optional + +from _pytest.fixtures import FixtureRequest +from metricflow_semantics.mf_logging.pretty_print import mf_pformat +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration +from metricflow_semantics.test_helpers.snapshot_helpers import ( + assert_plan_snapshot_text_equal, + assert_snapshot_text_equal, + make_schema_replacement_function, + replace_dataset_id_hash, +) + +from metricflow.dataflow.dataflow_plan import DataflowPlan +from metricflow.execution.execution_plan import ExecutionPlan +from metricflow.protocols.sql_client import SqlClient, SqlEngine +from tests_metricflow.fixtures.setup_fixtures import check_sql_engine_snapshot_marker + +logger = logging.getLogger(__name__) + + +# Needed as the table alias can vary from run to run. +_EXCLUDE_TABLE_ALIAS_REGEX = "^.*_src.*$" + + +def assert_execution_plan_text_equal( # noqa: D103 + request: FixtureRequest, + mf_test_configuration: MetricFlowTestConfiguration, + sql_client: SqlClient, + execution_plan: ExecutionPlan, +) -> None: + assert_plan_snapshot_text_equal( + request=request, + mf_test_configuration=mf_test_configuration, + plan=execution_plan, + plan_snapshot_text=execution_plan.structure_text(), + incomparable_strings_replacement_function=make_schema_replacement_function( + system_schema=mf_test_configuration.mf_system_schema, + source_schema=mf_test_configuration.mf_source_schema, + ), + additional_sub_directories_for_snapshots=(sql_client.sql_engine_type.value,), + ) + + +def assert_dataflow_plan_text_equal( # noqa: D103 + request: FixtureRequest, + mf_test_configuration: MetricFlowTestConfiguration, + dataflow_plan: DataflowPlan, + sql_client: SqlClient, +) -> None: + assert_plan_snapshot_text_equal( + request=request, + mf_test_configuration=mf_test_configuration, + plan=dataflow_plan, + plan_snapshot_text=dataflow_plan.structure_text(), + incomparable_strings_replacement_function=replace_dataset_id_hash, + additional_sub_directories_for_snapshots=(sql_client.sql_engine_type.value,), + ) + + +def assert_object_snapshot_equal( # type: ignore[misc] + request: FixtureRequest, + mf_test_configuration: MetricFlowTestConfiguration, + obj_id: str, + obj: Any, + sql_client: Optional[SqlClient] = None, +) -> None: + """For tests to compare large objects, this can be used to snapshot a text representation of the object.""" + if sql_client is not None: + check_sql_engine_snapshot_marker(request) + + assert_snapshot_text_equal( + request=request, + mf_test_configuration=mf_test_configuration, + group_id=obj.__class__.__name__, + snapshot_id=obj_id, + snapshot_text=mf_pformat(obj), + snapshot_file_extension=".txt", + additional_sub_directories_for_snapshots=(sql_client.sql_engine_type.value,) if sql_client else (), + ) + + +def assert_sql_snapshot_equal( + request: FixtureRequest, + mf_test_configuration: MetricFlowTestConfiguration, + snapshot_id: str, + sql: str, + sql_engine: Optional[SqlEngine] = None, +) -> None: + """For tests that generate SQL, use this to write / check snapshots.""" + if sql_engine is not None: + check_sql_engine_snapshot_marker(request) + + assert_snapshot_text_equal( + request=request, + mf_test_configuration=mf_test_configuration, + group_id=sql.__class__.__name__, + snapshot_id=snapshot_id, + snapshot_text=sql, + snapshot_file_extension=".sql", + incomparable_strings_replacement_function=make_schema_replacement_function( + system_schema=mf_test_configuration.mf_system_schema, source_schema=mf_test_configuration.mf_source_schema + ), + exclude_line_regex=_EXCLUDE_TABLE_ALIAS_REGEX, + additional_sub_directories_for_snapshots=(sql_engine.value,) if sql_engine is not None else (), + ) + + +def assert_str_snapshot_equal( # type: ignore[misc] + request: FixtureRequest, + mf_test_configuration: MetricFlowTestConfiguration, + snapshot_id: str, + snapshot_str: str, + sql_engine: Optional[SqlEngine] = None, +) -> None: + """Write / compare a string snapshot.""" + if sql_engine is not None: + check_sql_engine_snapshot_marker(request) + + assert_snapshot_text_equal( + request=request, + mf_test_configuration=mf_test_configuration, + group_id=snapshot_str.__class__.__name__, + snapshot_id=snapshot_id, + snapshot_text=snapshot_str, + snapshot_file_extension=".txt", + additional_sub_directories_for_snapshots=(sql_engine.value,) if sql_engine is not None else (), + ) diff --git a/tests/snapshots/test_cli.py/str/BigQuery/test_saved_query__cli_output.txt b/tests_metricflow/snapshots/test_cli.py/str/BigQuery/test_saved_query__cli_output.txt similarity index 100% rename from tests/snapshots/test_cli.py/str/BigQuery/test_saved_query__cli_output.txt rename to tests_metricflow/snapshots/test_cli.py/str/BigQuery/test_saved_query__cli_output.txt diff --git a/tests/snapshots/test_cli.py/str/BigQuery/test_saved_query_with_cumulative_metric__cli_output.txt b/tests_metricflow/snapshots/test_cli.py/str/BigQuery/test_saved_query_with_cumulative_metric__cli_output.txt similarity index 100% rename from tests/snapshots/test_cli.py/str/BigQuery/test_saved_query_with_cumulative_metric__cli_output.txt rename to tests_metricflow/snapshots/test_cli.py/str/BigQuery/test_saved_query_with_cumulative_metric__cli_output.txt diff --git a/tests/snapshots/test_cli.py/str/BigQuery/test_saved_query_with_limit__cli_output.txt b/tests_metricflow/snapshots/test_cli.py/str/BigQuery/test_saved_query_with_limit__cli_output.txt similarity index 100% rename from tests/snapshots/test_cli.py/str/BigQuery/test_saved_query_with_limit__cli_output.txt rename to tests_metricflow/snapshots/test_cli.py/str/BigQuery/test_saved_query_with_limit__cli_output.txt diff --git a/tests/snapshots/test_cli.py/str/BigQuery/test_saved_query_with_where__cli_output.txt b/tests_metricflow/snapshots/test_cli.py/str/BigQuery/test_saved_query_with_where__cli_output.txt similarity index 100% rename from tests/snapshots/test_cli.py/str/BigQuery/test_saved_query_with_where__cli_output.txt rename to tests_metricflow/snapshots/test_cli.py/str/BigQuery/test_saved_query_with_where__cli_output.txt diff --git a/tests/snapshots/test_cli.py/str/Databricks/test_saved_query__cli_output.txt b/tests_metricflow/snapshots/test_cli.py/str/Databricks/test_saved_query__cli_output.txt similarity index 100% rename from tests/snapshots/test_cli.py/str/Databricks/test_saved_query__cli_output.txt rename to tests_metricflow/snapshots/test_cli.py/str/Databricks/test_saved_query__cli_output.txt diff --git a/tests/snapshots/test_cli.py/str/Databricks/test_saved_query_with_cumulative_metric__cli_output.txt b/tests_metricflow/snapshots/test_cli.py/str/Databricks/test_saved_query_with_cumulative_metric__cli_output.txt similarity index 100% rename from tests/snapshots/test_cli.py/str/Databricks/test_saved_query_with_cumulative_metric__cli_output.txt rename to tests_metricflow/snapshots/test_cli.py/str/Databricks/test_saved_query_with_cumulative_metric__cli_output.txt diff --git a/tests/snapshots/test_cli.py/str/Databricks/test_saved_query_with_limit__cli_output.txt b/tests_metricflow/snapshots/test_cli.py/str/Databricks/test_saved_query_with_limit__cli_output.txt similarity index 100% rename from tests/snapshots/test_cli.py/str/Databricks/test_saved_query_with_limit__cli_output.txt rename to tests_metricflow/snapshots/test_cli.py/str/Databricks/test_saved_query_with_limit__cli_output.txt diff --git a/tests/snapshots/test_cli.py/str/Databricks/test_saved_query_with_where__cli_output.txt b/tests_metricflow/snapshots/test_cli.py/str/Databricks/test_saved_query_with_where__cli_output.txt similarity index 100% rename from tests/snapshots/test_cli.py/str/Databricks/test_saved_query_with_where__cli_output.txt rename to tests_metricflow/snapshots/test_cli.py/str/Databricks/test_saved_query_with_where__cli_output.txt diff --git a/tests/snapshots/test_cli.py/str/DuckDB/test_saved_query__cli_output.txt b/tests_metricflow/snapshots/test_cli.py/str/DuckDB/test_saved_query__cli_output.txt similarity index 100% rename from tests/snapshots/test_cli.py/str/DuckDB/test_saved_query__cli_output.txt rename to tests_metricflow/snapshots/test_cli.py/str/DuckDB/test_saved_query__cli_output.txt diff --git a/tests/snapshots/test_cli.py/str/DuckDB/test_saved_query_with_cumulative_metric__cli_output.txt b/tests_metricflow/snapshots/test_cli.py/str/DuckDB/test_saved_query_with_cumulative_metric__cli_output.txt similarity index 100% rename from tests/snapshots/test_cli.py/str/DuckDB/test_saved_query_with_cumulative_metric__cli_output.txt rename to tests_metricflow/snapshots/test_cli.py/str/DuckDB/test_saved_query_with_cumulative_metric__cli_output.txt diff --git a/tests/snapshots/test_cli.py/str/DuckDB/test_saved_query_with_limit__cli_output.txt b/tests_metricflow/snapshots/test_cli.py/str/DuckDB/test_saved_query_with_limit__cli_output.txt similarity index 100% rename from tests/snapshots/test_cli.py/str/DuckDB/test_saved_query_with_limit__cli_output.txt rename to tests_metricflow/snapshots/test_cli.py/str/DuckDB/test_saved_query_with_limit__cli_output.txt diff --git a/tests/snapshots/test_cli.py/str/DuckDB/test_saved_query_with_where__cli_output.txt b/tests_metricflow/snapshots/test_cli.py/str/DuckDB/test_saved_query_with_where__cli_output.txt similarity index 100% rename from tests/snapshots/test_cli.py/str/DuckDB/test_saved_query_with_where__cli_output.txt rename to tests_metricflow/snapshots/test_cli.py/str/DuckDB/test_saved_query_with_where__cli_output.txt diff --git a/tests/snapshots/test_cli.py/str/Postgres/test_saved_query__cli_output.txt b/tests_metricflow/snapshots/test_cli.py/str/Postgres/test_saved_query__cli_output.txt similarity index 100% rename from tests/snapshots/test_cli.py/str/Postgres/test_saved_query__cli_output.txt rename to tests_metricflow/snapshots/test_cli.py/str/Postgres/test_saved_query__cli_output.txt diff --git a/tests/snapshots/test_cli.py/str/Postgres/test_saved_query_with_cumulative_metric__cli_output.txt b/tests_metricflow/snapshots/test_cli.py/str/Postgres/test_saved_query_with_cumulative_metric__cli_output.txt similarity index 100% rename from tests/snapshots/test_cli.py/str/Postgres/test_saved_query_with_cumulative_metric__cli_output.txt rename to tests_metricflow/snapshots/test_cli.py/str/Postgres/test_saved_query_with_cumulative_metric__cli_output.txt diff --git a/tests/snapshots/test_cli.py/str/Postgres/test_saved_query_with_limit__cli_output.txt b/tests_metricflow/snapshots/test_cli.py/str/Postgres/test_saved_query_with_limit__cli_output.txt similarity index 100% rename from tests/snapshots/test_cli.py/str/Postgres/test_saved_query_with_limit__cli_output.txt rename to tests_metricflow/snapshots/test_cli.py/str/Postgres/test_saved_query_with_limit__cli_output.txt diff --git a/tests/snapshots/test_cli.py/str/Postgres/test_saved_query_with_where__cli_output.txt b/tests_metricflow/snapshots/test_cli.py/str/Postgres/test_saved_query_with_where__cli_output.txt similarity index 100% rename from tests/snapshots/test_cli.py/str/Postgres/test_saved_query_with_where__cli_output.txt rename to tests_metricflow/snapshots/test_cli.py/str/Postgres/test_saved_query_with_where__cli_output.txt diff --git a/tests/snapshots/test_cli.py/str/Redshift/test_saved_query__cli_output.txt b/tests_metricflow/snapshots/test_cli.py/str/Redshift/test_saved_query__cli_output.txt similarity index 100% rename from tests/snapshots/test_cli.py/str/Redshift/test_saved_query__cli_output.txt rename to tests_metricflow/snapshots/test_cli.py/str/Redshift/test_saved_query__cli_output.txt diff --git a/tests/snapshots/test_cli.py/str/Redshift/test_saved_query_with_cumulative_metric__cli_output.txt b/tests_metricflow/snapshots/test_cli.py/str/Redshift/test_saved_query_with_cumulative_metric__cli_output.txt similarity index 100% rename from tests/snapshots/test_cli.py/str/Redshift/test_saved_query_with_cumulative_metric__cli_output.txt rename to tests_metricflow/snapshots/test_cli.py/str/Redshift/test_saved_query_with_cumulative_metric__cli_output.txt diff --git a/tests/snapshots/test_cli.py/str/Redshift/test_saved_query_with_limit__cli_output.txt b/tests_metricflow/snapshots/test_cli.py/str/Redshift/test_saved_query_with_limit__cli_output.txt similarity index 100% rename from tests/snapshots/test_cli.py/str/Redshift/test_saved_query_with_limit__cli_output.txt rename to tests_metricflow/snapshots/test_cli.py/str/Redshift/test_saved_query_with_limit__cli_output.txt diff --git a/tests/snapshots/test_cli.py/str/Redshift/test_saved_query_with_where__cli_output.txt b/tests_metricflow/snapshots/test_cli.py/str/Redshift/test_saved_query_with_where__cli_output.txt similarity index 100% rename from tests/snapshots/test_cli.py/str/Redshift/test_saved_query_with_where__cli_output.txt rename to tests_metricflow/snapshots/test_cli.py/str/Redshift/test_saved_query_with_where__cli_output.txt diff --git a/tests/snapshots/test_cli.py/str/Snowflake/test_saved_query__cli_output.txt b/tests_metricflow/snapshots/test_cli.py/str/Snowflake/test_saved_query__cli_output.txt similarity index 100% rename from tests/snapshots/test_cli.py/str/Snowflake/test_saved_query__cli_output.txt rename to tests_metricflow/snapshots/test_cli.py/str/Snowflake/test_saved_query__cli_output.txt diff --git a/tests/snapshots/test_cli.py/str/Snowflake/test_saved_query_with_cumulative_metric__cli_output.txt b/tests_metricflow/snapshots/test_cli.py/str/Snowflake/test_saved_query_with_cumulative_metric__cli_output.txt similarity index 100% rename from tests/snapshots/test_cli.py/str/Snowflake/test_saved_query_with_cumulative_metric__cli_output.txt rename to tests_metricflow/snapshots/test_cli.py/str/Snowflake/test_saved_query_with_cumulative_metric__cli_output.txt diff --git a/tests/snapshots/test_cli.py/str/Snowflake/test_saved_query_with_limit__cli_output.txt b/tests_metricflow/snapshots/test_cli.py/str/Snowflake/test_saved_query_with_limit__cli_output.txt similarity index 100% rename from tests/snapshots/test_cli.py/str/Snowflake/test_saved_query_with_limit__cli_output.txt rename to tests_metricflow/snapshots/test_cli.py/str/Snowflake/test_saved_query_with_limit__cli_output.txt diff --git a/tests/snapshots/test_cli.py/str/Snowflake/test_saved_query_with_where__cli_output.txt b/tests_metricflow/snapshots/test_cli.py/str/Snowflake/test_saved_query_with_where__cli_output.txt similarity index 100% rename from tests/snapshots/test_cli.py/str/Snowflake/test_saved_query_with_where__cli_output.txt rename to tests_metricflow/snapshots/test_cli.py/str/Snowflake/test_saved_query_with_where__cli_output.txt diff --git a/tests/snapshots/test_cli.py/str/Trino/test_saved_query__cli_output.txt b/tests_metricflow/snapshots/test_cli.py/str/Trino/test_saved_query__cli_output.txt similarity index 100% rename from tests/snapshots/test_cli.py/str/Trino/test_saved_query__cli_output.txt rename to tests_metricflow/snapshots/test_cli.py/str/Trino/test_saved_query__cli_output.txt diff --git a/tests/snapshots/test_cli.py/str/Trino/test_saved_query_with_cumulative_metric__cli_output.txt b/tests_metricflow/snapshots/test_cli.py/str/Trino/test_saved_query_with_cumulative_metric__cli_output.txt similarity index 100% rename from tests/snapshots/test_cli.py/str/Trino/test_saved_query_with_cumulative_metric__cli_output.txt rename to tests_metricflow/snapshots/test_cli.py/str/Trino/test_saved_query_with_cumulative_metric__cli_output.txt diff --git a/tests/snapshots/test_cli.py/str/Trino/test_saved_query_with_limit__cli_output.txt b/tests_metricflow/snapshots/test_cli.py/str/Trino/test_saved_query_with_limit__cli_output.txt similarity index 100% rename from tests/snapshots/test_cli.py/str/Trino/test_saved_query_with_limit__cli_output.txt rename to tests_metricflow/snapshots/test_cli.py/str/Trino/test_saved_query_with_limit__cli_output.txt diff --git a/tests/snapshots/test_cli.py/str/Trino/test_saved_query_with_where__cli_output.txt b/tests_metricflow/snapshots/test_cli.py/str/Trino/test_saved_query_with_where__cli_output.txt similarity index 100% rename from tests/snapshots/test_cli.py/str/Trino/test_saved_query_with_where__cli_output.txt rename to tests_metricflow/snapshots/test_cli.py/str/Trino/test_saved_query_with_where__cli_output.txt diff --git a/tests/snapshots/test_cm_branch_combiner.py/DataflowPlan/test_filter_combination__dfpo_0.xml b/tests_metricflow/snapshots/test_cm_branch_combiner.py/DataflowPlan/test_filter_combination__dfpo_0.xml similarity index 100% rename from tests/snapshots/test_cm_branch_combiner.py/DataflowPlan/test_filter_combination__dfpo_0.xml rename to tests_metricflow/snapshots/test_cm_branch_combiner.py/DataflowPlan/test_filter_combination__dfpo_0.xml diff --git a/tests/snapshots/test_cm_branch_combiner.py/DataflowPlan/test_read_sql_source_combination__dfpo_0.xml b/tests_metricflow/snapshots/test_cm_branch_combiner.py/DataflowPlan/test_read_sql_source_combination__dfpo_0.xml similarity index 100% rename from tests/snapshots/test_cm_branch_combiner.py/DataflowPlan/test_read_sql_source_combination__dfpo_0.xml rename to tests_metricflow/snapshots/test_cm_branch_combiner.py/DataflowPlan/test_read_sql_source_combination__dfpo_0.xml diff --git a/tests/snapshots/test_column_pruner.py/SqlQueryPlan/test_dont_prune_if_in_where__after_pruning.sql b/tests_metricflow/snapshots/test_column_pruner.py/SqlQueryPlan/test_dont_prune_if_in_where__after_pruning.sql similarity index 100% rename from tests/snapshots/test_column_pruner.py/SqlQueryPlan/test_dont_prune_if_in_where__after_pruning.sql rename to tests_metricflow/snapshots/test_column_pruner.py/SqlQueryPlan/test_dont_prune_if_in_where__after_pruning.sql diff --git a/tests/snapshots/test_column_pruner.py/SqlQueryPlan/test_dont_prune_if_in_where__before_pruning.sql b/tests_metricflow/snapshots/test_column_pruner.py/SqlQueryPlan/test_dont_prune_if_in_where__before_pruning.sql similarity index 100% rename from tests/snapshots/test_column_pruner.py/SqlQueryPlan/test_dont_prune_if_in_where__before_pruning.sql rename to tests_metricflow/snapshots/test_column_pruner.py/SqlQueryPlan/test_dont_prune_if_in_where__before_pruning.sql diff --git a/tests/snapshots/test_column_pruner.py/SqlQueryPlan/test_dont_prune_with_str_expr__after_pruning.sql b/tests_metricflow/snapshots/test_column_pruner.py/SqlQueryPlan/test_dont_prune_with_str_expr__after_pruning.sql similarity index 100% rename from tests/snapshots/test_column_pruner.py/SqlQueryPlan/test_dont_prune_with_str_expr__after_pruning.sql rename to tests_metricflow/snapshots/test_column_pruner.py/SqlQueryPlan/test_dont_prune_with_str_expr__after_pruning.sql diff --git a/tests/snapshots/test_column_pruner.py/SqlQueryPlan/test_dont_prune_with_str_expr__before_pruning.sql b/tests_metricflow/snapshots/test_column_pruner.py/SqlQueryPlan/test_dont_prune_with_str_expr__before_pruning.sql similarity index 100% rename from tests/snapshots/test_column_pruner.py/SqlQueryPlan/test_dont_prune_with_str_expr__before_pruning.sql rename to tests_metricflow/snapshots/test_column_pruner.py/SqlQueryPlan/test_dont_prune_with_str_expr__before_pruning.sql diff --git a/tests/snapshots/test_column_pruner.py/SqlQueryPlan/test_no_pruning__after_pruning.sql b/tests_metricflow/snapshots/test_column_pruner.py/SqlQueryPlan/test_no_pruning__after_pruning.sql similarity index 100% rename from tests/snapshots/test_column_pruner.py/SqlQueryPlan/test_no_pruning__after_pruning.sql rename to tests_metricflow/snapshots/test_column_pruner.py/SqlQueryPlan/test_no_pruning__after_pruning.sql diff --git a/tests/snapshots/test_column_pruner.py/SqlQueryPlan/test_no_pruning__before_pruning.sql b/tests_metricflow/snapshots/test_column_pruner.py/SqlQueryPlan/test_no_pruning__before_pruning.sql similarity index 100% rename from tests/snapshots/test_column_pruner.py/SqlQueryPlan/test_no_pruning__before_pruning.sql rename to tests_metricflow/snapshots/test_column_pruner.py/SqlQueryPlan/test_no_pruning__before_pruning.sql diff --git a/tests/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_distinct_select__after_pruning.sql b/tests_metricflow/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_distinct_select__after_pruning.sql similarity index 100% rename from tests/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_distinct_select__after_pruning.sql rename to tests_metricflow/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_distinct_select__after_pruning.sql diff --git a/tests/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_distinct_select__before_pruning.sql b/tests_metricflow/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_distinct_select__before_pruning.sql similarity index 100% rename from tests/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_distinct_select__before_pruning.sql rename to tests_metricflow/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_distinct_select__before_pruning.sql diff --git a/tests/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_from_source__after_pruning.sql b/tests_metricflow/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_from_source__after_pruning.sql similarity index 100% rename from tests/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_from_source__after_pruning.sql rename to tests_metricflow/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_from_source__after_pruning.sql diff --git a/tests/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_from_source__before_pruning.sql b/tests_metricflow/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_from_source__before_pruning.sql similarity index 100% rename from tests/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_from_source__before_pruning.sql rename to tests_metricflow/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_from_source__before_pruning.sql diff --git a/tests/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_grandparents__after_pruning.sql b/tests_metricflow/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_grandparents__after_pruning.sql similarity index 100% rename from tests/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_grandparents__after_pruning.sql rename to tests_metricflow/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_grandparents__after_pruning.sql diff --git a/tests/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_grandparents__before_pruning.sql b/tests_metricflow/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_grandparents__before_pruning.sql similarity index 100% rename from tests/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_grandparents__before_pruning.sql rename to tests_metricflow/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_grandparents__before_pruning.sql diff --git a/tests/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_grandparents_in_join_query__after_pruning.sql b/tests_metricflow/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_grandparents_in_join_query__after_pruning.sql similarity index 100% rename from tests/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_grandparents_in_join_query__after_pruning.sql rename to tests_metricflow/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_grandparents_in_join_query__after_pruning.sql diff --git a/tests/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_grandparents_in_join_query__before_pruning.sql b/tests_metricflow/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_grandparents_in_join_query__before_pruning.sql similarity index 100% rename from tests/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_grandparents_in_join_query__before_pruning.sql rename to tests_metricflow/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_grandparents_in_join_query__before_pruning.sql diff --git a/tests/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_joined_source__after_pruning.sql b/tests_metricflow/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_joined_source__after_pruning.sql similarity index 100% rename from tests/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_joined_source__after_pruning.sql rename to tests_metricflow/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_joined_source__after_pruning.sql diff --git a/tests/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_joined_source__before_pruning.sql b/tests_metricflow/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_joined_source__before_pruning.sql similarity index 100% rename from tests/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_joined_source__before_pruning.sql rename to tests_metricflow/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_joined_source__before_pruning.sql diff --git a/tests/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_str_expr__after_pruning.sql b/tests_metricflow/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_str_expr__after_pruning.sql similarity index 100% rename from tests/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_str_expr__after_pruning.sql rename to tests_metricflow/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_str_expr__after_pruning.sql diff --git a/tests/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_str_expr__before_pruning.sql b/tests_metricflow/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_str_expr__before_pruning.sql similarity index 100% rename from tests/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_str_expr__before_pruning.sql rename to tests_metricflow/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_str_expr__before_pruning.sql diff --git a/tests/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_with_str_expr__after_pruning.sql b/tests_metricflow/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_with_str_expr__after_pruning.sql similarity index 100% rename from tests/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_with_str_expr__after_pruning.sql rename to tests_metricflow/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_with_str_expr__after_pruning.sql diff --git a/tests/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_with_str_expr__before_pruning.sql b/tests_metricflow/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_with_str_expr__before_pruning.sql similarity index 100% rename from tests/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_with_str_expr__before_pruning.sql rename to tests_metricflow/snapshots/test_column_pruner.py/SqlQueryPlan/test_prune_with_str_expr__before_pruning.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_count_with_no_group_by__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_count_with_no_group_by__plan0.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_count_with_no_group_by__plan0.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_count_with_no_group_by__plan0.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_count_with_no_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_count_with_no_group_by__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_count_with_no_group_by__plan0_optimized.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_count_with_no_group_by__plan0_optimized.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0_optimized.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0_optimized.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_rate__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_rate__plan0.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_rate__plan0.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_rate__plan0.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_rate__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_rate__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_rate__plan0_optimized.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_rate__plan0_optimized.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_rate_with_constant_properties__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_rate_with_constant_properties__plan0.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_rate_with_constant_properties__plan0.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_rate_with_constant_properties__plan0.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_rate_with_constant_properties__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_rate_with_constant_properties__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_rate_with_constant_properties__plan0_optimized.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_rate_with_constant_properties__plan0_optimized.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_rate_with_no_group_by__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_rate_with_no_group_by__plan0.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_rate_with_no_group_by__plan0.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_rate_with_no_group_by__plan0.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_rate_with_no_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_rate_with_no_group_by__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_rate_with_no_group_by__plan0_optimized.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_rate_with_no_group_by__plan0_optimized.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_rate_with_window__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_rate_with_window__plan0.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_rate_with_window__plan0.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_rate_with_window__plan0.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_rate_with_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_rate_with_window__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_rate_with_window__plan0_optimized.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/BigQuery/test_conversion_rate_with_window__plan0_optimized.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_count_with_no_group_by__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_count_with_no_group_by__plan0.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_count_with_no_group_by__plan0.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_count_with_no_group_by__plan0.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_count_with_no_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_count_with_no_group_by__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_count_with_no_group_by__plan0_optimized.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_count_with_no_group_by__plan0_optimized.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0_optimized.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0_optimized.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_rate__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_rate__plan0.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_rate__plan0.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_rate__plan0.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_rate__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_rate__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_rate__plan0_optimized.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_rate__plan0_optimized.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_rate_with_constant_properties__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_rate_with_constant_properties__plan0.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_rate_with_constant_properties__plan0.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_rate_with_constant_properties__plan0.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_rate_with_constant_properties__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_rate_with_constant_properties__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_rate_with_constant_properties__plan0_optimized.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_rate_with_constant_properties__plan0_optimized.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_rate_with_no_group_by__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_rate_with_no_group_by__plan0.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_rate_with_no_group_by__plan0.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_rate_with_no_group_by__plan0.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_rate_with_no_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_rate_with_no_group_by__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_rate_with_no_group_by__plan0_optimized.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_rate_with_no_group_by__plan0_optimized.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_rate_with_window__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_rate_with_window__plan0.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_rate_with_window__plan0.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_rate_with_window__plan0.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_rate_with_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_rate_with_window__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_rate_with_window__plan0_optimized.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Databricks/test_conversion_rate_with_window__plan0_optimized.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_count_with_no_group_by__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_count_with_no_group_by__plan0.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_count_with_no_group_by__plan0.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_count_with_no_group_by__plan0.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_count_with_no_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_count_with_no_group_by__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_count_with_no_group_by__plan0_optimized.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_count_with_no_group_by__plan0_optimized.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0_optimized.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0_optimized.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_rate__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_rate__plan0.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_rate__plan0.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_rate__plan0.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_rate__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_rate__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_rate__plan0_optimized.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_rate__plan0_optimized.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_rate_with_constant_properties__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_rate_with_constant_properties__plan0.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_rate_with_constant_properties__plan0.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_rate_with_constant_properties__plan0.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_rate_with_constant_properties__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_rate_with_constant_properties__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_rate_with_constant_properties__plan0_optimized.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_rate_with_constant_properties__plan0_optimized.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_rate_with_no_group_by__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_rate_with_no_group_by__plan0.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_rate_with_no_group_by__plan0.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_rate_with_no_group_by__plan0.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_rate_with_no_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_rate_with_no_group_by__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_rate_with_no_group_by__plan0_optimized.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_rate_with_no_group_by__plan0_optimized.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_rate_with_window__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_rate_with_window__plan0.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_rate_with_window__plan0.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_rate_with_window__plan0.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_rate_with_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_rate_with_window__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_rate_with_window__plan0_optimized.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/DuckDB/test_conversion_rate_with_window__plan0_optimized.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_count_with_no_group_by__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_count_with_no_group_by__plan0.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_count_with_no_group_by__plan0.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_count_with_no_group_by__plan0.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_count_with_no_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_count_with_no_group_by__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_count_with_no_group_by__plan0_optimized.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_count_with_no_group_by__plan0_optimized.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0_optimized.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0_optimized.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_rate__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_rate__plan0.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_rate__plan0.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_rate__plan0.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_rate__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_rate__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_rate__plan0_optimized.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_rate__plan0_optimized.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_rate_with_constant_properties__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_rate_with_constant_properties__plan0.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_rate_with_constant_properties__plan0.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_rate_with_constant_properties__plan0.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_rate_with_constant_properties__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_rate_with_constant_properties__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_rate_with_constant_properties__plan0_optimized.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_rate_with_constant_properties__plan0_optimized.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_rate_with_no_group_by__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_rate_with_no_group_by__plan0.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_rate_with_no_group_by__plan0.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_rate_with_no_group_by__plan0.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_rate_with_no_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_rate_with_no_group_by__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_rate_with_no_group_by__plan0_optimized.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_rate_with_no_group_by__plan0_optimized.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_rate_with_window__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_rate_with_window__plan0.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_rate_with_window__plan0.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_rate_with_window__plan0.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_rate_with_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_rate_with_window__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_rate_with_window__plan0_optimized.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Postgres/test_conversion_rate_with_window__plan0_optimized.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_count_with_no_group_by__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_count_with_no_group_by__plan0.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_count_with_no_group_by__plan0.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_count_with_no_group_by__plan0.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_count_with_no_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_count_with_no_group_by__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_count_with_no_group_by__plan0_optimized.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_count_with_no_group_by__plan0_optimized.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0_optimized.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0_optimized.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_rate__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_rate__plan0.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_rate__plan0.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_rate__plan0.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_rate__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_rate__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_rate__plan0_optimized.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_rate__plan0_optimized.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_rate_with_constant_properties__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_rate_with_constant_properties__plan0.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_rate_with_constant_properties__plan0.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_rate_with_constant_properties__plan0.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_rate_with_constant_properties__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_rate_with_constant_properties__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_rate_with_constant_properties__plan0_optimized.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_rate_with_constant_properties__plan0_optimized.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_rate_with_no_group_by__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_rate_with_no_group_by__plan0.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_rate_with_no_group_by__plan0.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_rate_with_no_group_by__plan0.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_rate_with_no_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_rate_with_no_group_by__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_rate_with_no_group_by__plan0_optimized.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_rate_with_no_group_by__plan0_optimized.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_rate_with_window__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_rate_with_window__plan0.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_rate_with_window__plan0.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_rate_with_window__plan0.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_rate_with_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_rate_with_window__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_rate_with_window__plan0_optimized.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Redshift/test_conversion_rate_with_window__plan0_optimized.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_count_with_no_group_by__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_count_with_no_group_by__plan0.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_count_with_no_group_by__plan0.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_count_with_no_group_by__plan0.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_count_with_no_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_count_with_no_group_by__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_count_with_no_group_by__plan0_optimized.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_count_with_no_group_by__plan0_optimized.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0_optimized.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0_optimized.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_rate__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_rate__plan0.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_rate__plan0.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_rate__plan0.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_rate__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_rate__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_rate__plan0_optimized.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_rate__plan0_optimized.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_rate_with_constant_properties__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_rate_with_constant_properties__plan0.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_rate_with_constant_properties__plan0.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_rate_with_constant_properties__plan0.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_rate_with_constant_properties__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_rate_with_constant_properties__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_rate_with_constant_properties__plan0_optimized.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_rate_with_constant_properties__plan0_optimized.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_rate_with_no_group_by__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_rate_with_no_group_by__plan0.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_rate_with_no_group_by__plan0.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_rate_with_no_group_by__plan0.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_rate_with_no_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_rate_with_no_group_by__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_rate_with_no_group_by__plan0_optimized.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_rate_with_no_group_by__plan0_optimized.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_rate_with_window__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_rate_with_window__plan0.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_rate_with_window__plan0.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_rate_with_window__plan0.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_rate_with_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_rate_with_window__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_rate_with_window__plan0_optimized.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Snowflake/test_conversion_rate_with_window__plan0_optimized.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_count_with_no_group_by__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_count_with_no_group_by__plan0.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_count_with_no_group_by__plan0.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_count_with_no_group_by__plan0.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_count_with_no_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_count_with_no_group_by__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_count_with_no_group_by__plan0_optimized.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_count_with_no_group_by__plan0_optimized.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0_optimized.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0_optimized.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_rate__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_rate__plan0.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_rate__plan0.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_rate__plan0.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_rate__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_rate__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_rate__plan0_optimized.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_rate__plan0_optimized.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_rate_with_constant_properties__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_rate_with_constant_properties__plan0.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_rate_with_constant_properties__plan0.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_rate_with_constant_properties__plan0.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_rate_with_constant_properties__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_rate_with_constant_properties__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_rate_with_constant_properties__plan0_optimized.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_rate_with_constant_properties__plan0_optimized.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_rate_with_no_group_by__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_rate_with_no_group_by__plan0.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_rate_with_no_group_by__plan0.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_rate_with_no_group_by__plan0.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_rate_with_no_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_rate_with_no_group_by__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_rate_with_no_group_by__plan0_optimized.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_rate_with_no_group_by__plan0_optimized.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_rate_with_window__plan0.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_rate_with_window__plan0.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_rate_with_window__plan0.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_rate_with_window__plan0.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_rate_with_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_rate_with_window__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_rate_with_window__plan0_optimized.sql rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/Trino/test_conversion_rate_with_window__plan0_optimized.sql diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/test_conversion_count_with_no_group_by__plan0.xml b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/test_conversion_count_with_no_group_by__plan0.xml similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/test_conversion_count_with_no_group_by__plan0.xml rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/test_conversion_count_with_no_group_by__plan0.xml diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.xml b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.xml similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.xml rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/test_conversion_metric_join_to_timespine_and_fill_nulls_with_0__plan0.xml diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/test_conversion_rate__plan0.xml b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/test_conversion_rate__plan0.xml similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/test_conversion_rate__plan0.xml rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/test_conversion_rate__plan0.xml diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/test_conversion_rate_with_constant_properties__plan0.xml b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/test_conversion_rate_with_constant_properties__plan0.xml similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/test_conversion_rate_with_constant_properties__plan0.xml rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/test_conversion_rate_with_constant_properties__plan0.xml diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/test_conversion_rate_with_no_group_by__plan0.xml b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/test_conversion_rate_with_no_group_by__plan0.xml similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/test_conversion_rate_with_no_group_by__plan0.xml rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/test_conversion_rate_with_no_group_by__plan0.xml diff --git a/tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/test_conversion_rate_with_window__plan0.xml b/tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/test_conversion_rate_with_window__plan0.xml similarity index 100% rename from tests/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/test_conversion_rate_with_window__plan0.xml rename to tests_metricflow/snapshots/test_conversion_metrics_to_sql.py/SqlQueryPlan/test_conversion_rate_with_window__plan0.xml diff --git a/tests/snapshots/test_convert_semantic_model.py/SqlQueryPlan/BigQuery/test_convert_query_semantic_model__plan0.sql b/tests_metricflow/snapshots/test_convert_semantic_model.py/SqlQueryPlan/BigQuery/test_convert_query_semantic_model__plan0.sql similarity index 100% rename from tests/snapshots/test_convert_semantic_model.py/SqlQueryPlan/BigQuery/test_convert_query_semantic_model__plan0.sql rename to tests_metricflow/snapshots/test_convert_semantic_model.py/SqlQueryPlan/BigQuery/test_convert_query_semantic_model__plan0.sql diff --git a/tests/snapshots/test_convert_semantic_model.py/SqlQueryPlan/BigQuery/test_convert_table_semantic_model_with_measures__plan0.sql b/tests_metricflow/snapshots/test_convert_semantic_model.py/SqlQueryPlan/BigQuery/test_convert_table_semantic_model_with_measures__plan0.sql similarity index 100% rename from tests/snapshots/test_convert_semantic_model.py/SqlQueryPlan/BigQuery/test_convert_table_semantic_model_with_measures__plan0.sql rename to tests_metricflow/snapshots/test_convert_semantic_model.py/SqlQueryPlan/BigQuery/test_convert_table_semantic_model_with_measures__plan0.sql diff --git a/tests/snapshots/test_convert_semantic_model.py/SqlQueryPlan/BigQuery/test_convert_table_semantic_model_without_measures__plan0.sql b/tests_metricflow/snapshots/test_convert_semantic_model.py/SqlQueryPlan/BigQuery/test_convert_table_semantic_model_without_measures__plan0.sql similarity index 100% rename from tests/snapshots/test_convert_semantic_model.py/SqlQueryPlan/BigQuery/test_convert_table_semantic_model_without_measures__plan0.sql rename to tests_metricflow/snapshots/test_convert_semantic_model.py/SqlQueryPlan/BigQuery/test_convert_table_semantic_model_without_measures__plan0.sql diff --git a/tests/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Databricks/test_convert_query_semantic_model__plan0.sql b/tests_metricflow/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Databricks/test_convert_query_semantic_model__plan0.sql similarity index 100% rename from tests/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Databricks/test_convert_query_semantic_model__plan0.sql rename to tests_metricflow/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Databricks/test_convert_query_semantic_model__plan0.sql diff --git a/tests/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Databricks/test_convert_table_semantic_model_with_measures__plan0.sql b/tests_metricflow/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Databricks/test_convert_table_semantic_model_with_measures__plan0.sql similarity index 100% rename from tests/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Databricks/test_convert_table_semantic_model_with_measures__plan0.sql rename to tests_metricflow/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Databricks/test_convert_table_semantic_model_with_measures__plan0.sql diff --git a/tests/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Databricks/test_convert_table_semantic_model_without_measures__plan0.sql b/tests_metricflow/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Databricks/test_convert_table_semantic_model_without_measures__plan0.sql similarity index 100% rename from tests/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Databricks/test_convert_table_semantic_model_without_measures__plan0.sql rename to tests_metricflow/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Databricks/test_convert_table_semantic_model_without_measures__plan0.sql diff --git a/tests/snapshots/test_convert_semantic_model.py/SqlQueryPlan/DuckDB/test_convert_query_semantic_model__plan0.sql b/tests_metricflow/snapshots/test_convert_semantic_model.py/SqlQueryPlan/DuckDB/test_convert_query_semantic_model__plan0.sql similarity index 100% rename from tests/snapshots/test_convert_semantic_model.py/SqlQueryPlan/DuckDB/test_convert_query_semantic_model__plan0.sql rename to tests_metricflow/snapshots/test_convert_semantic_model.py/SqlQueryPlan/DuckDB/test_convert_query_semantic_model__plan0.sql diff --git a/tests/snapshots/test_convert_semantic_model.py/SqlQueryPlan/DuckDB/test_convert_table_semantic_model_with_measures__plan0.sql b/tests_metricflow/snapshots/test_convert_semantic_model.py/SqlQueryPlan/DuckDB/test_convert_table_semantic_model_with_measures__plan0.sql similarity index 100% rename from tests/snapshots/test_convert_semantic_model.py/SqlQueryPlan/DuckDB/test_convert_table_semantic_model_with_measures__plan0.sql rename to tests_metricflow/snapshots/test_convert_semantic_model.py/SqlQueryPlan/DuckDB/test_convert_table_semantic_model_with_measures__plan0.sql diff --git a/tests/snapshots/test_convert_semantic_model.py/SqlQueryPlan/DuckDB/test_convert_table_semantic_model_without_measures__plan0.sql b/tests_metricflow/snapshots/test_convert_semantic_model.py/SqlQueryPlan/DuckDB/test_convert_table_semantic_model_without_measures__plan0.sql similarity index 100% rename from tests/snapshots/test_convert_semantic_model.py/SqlQueryPlan/DuckDB/test_convert_table_semantic_model_without_measures__plan0.sql rename to tests_metricflow/snapshots/test_convert_semantic_model.py/SqlQueryPlan/DuckDB/test_convert_table_semantic_model_without_measures__plan0.sql diff --git a/tests/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Postgres/test_convert_query_semantic_model__plan0.sql b/tests_metricflow/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Postgres/test_convert_query_semantic_model__plan0.sql similarity index 100% rename from tests/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Postgres/test_convert_query_semantic_model__plan0.sql rename to tests_metricflow/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Postgres/test_convert_query_semantic_model__plan0.sql diff --git a/tests/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Postgres/test_convert_table_semantic_model_with_measures__plan0.sql b/tests_metricflow/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Postgres/test_convert_table_semantic_model_with_measures__plan0.sql similarity index 100% rename from tests/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Postgres/test_convert_table_semantic_model_with_measures__plan0.sql rename to tests_metricflow/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Postgres/test_convert_table_semantic_model_with_measures__plan0.sql diff --git a/tests/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Postgres/test_convert_table_semantic_model_without_measures__plan0.sql b/tests_metricflow/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Postgres/test_convert_table_semantic_model_without_measures__plan0.sql similarity index 100% rename from tests/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Postgres/test_convert_table_semantic_model_without_measures__plan0.sql rename to tests_metricflow/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Postgres/test_convert_table_semantic_model_without_measures__plan0.sql diff --git a/tests/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Redshift/test_convert_query_semantic_model__plan0.sql b/tests_metricflow/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Redshift/test_convert_query_semantic_model__plan0.sql similarity index 100% rename from tests/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Redshift/test_convert_query_semantic_model__plan0.sql rename to tests_metricflow/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Redshift/test_convert_query_semantic_model__plan0.sql diff --git a/tests/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Redshift/test_convert_table_semantic_model_with_measures__plan0.sql b/tests_metricflow/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Redshift/test_convert_table_semantic_model_with_measures__plan0.sql similarity index 100% rename from tests/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Redshift/test_convert_table_semantic_model_with_measures__plan0.sql rename to tests_metricflow/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Redshift/test_convert_table_semantic_model_with_measures__plan0.sql diff --git a/tests/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Redshift/test_convert_table_semantic_model_without_measures__plan0.sql b/tests_metricflow/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Redshift/test_convert_table_semantic_model_without_measures__plan0.sql similarity index 100% rename from tests/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Redshift/test_convert_table_semantic_model_without_measures__plan0.sql rename to tests_metricflow/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Redshift/test_convert_table_semantic_model_without_measures__plan0.sql diff --git a/tests/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Snowflake/test_convert_query_semantic_model__plan0.sql b/tests_metricflow/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Snowflake/test_convert_query_semantic_model__plan0.sql similarity index 100% rename from tests/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Snowflake/test_convert_query_semantic_model__plan0.sql rename to tests_metricflow/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Snowflake/test_convert_query_semantic_model__plan0.sql diff --git a/tests/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Snowflake/test_convert_table_semantic_model_with_measures__plan0.sql b/tests_metricflow/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Snowflake/test_convert_table_semantic_model_with_measures__plan0.sql similarity index 100% rename from tests/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Snowflake/test_convert_table_semantic_model_with_measures__plan0.sql rename to tests_metricflow/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Snowflake/test_convert_table_semantic_model_with_measures__plan0.sql diff --git a/tests/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Snowflake/test_convert_table_semantic_model_without_measures__plan0.sql b/tests_metricflow/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Snowflake/test_convert_table_semantic_model_without_measures__plan0.sql similarity index 100% rename from tests/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Snowflake/test_convert_table_semantic_model_without_measures__plan0.sql rename to tests_metricflow/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Snowflake/test_convert_table_semantic_model_without_measures__plan0.sql diff --git a/tests/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Trino/test_convert_query_semantic_model__plan0.sql b/tests_metricflow/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Trino/test_convert_query_semantic_model__plan0.sql similarity index 100% rename from tests/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Trino/test_convert_query_semantic_model__plan0.sql rename to tests_metricflow/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Trino/test_convert_query_semantic_model__plan0.sql diff --git a/tests/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Trino/test_convert_table_semantic_model_with_measures__plan0.sql b/tests_metricflow/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Trino/test_convert_table_semantic_model_with_measures__plan0.sql similarity index 100% rename from tests/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Trino/test_convert_table_semantic_model_with_measures__plan0.sql rename to tests_metricflow/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Trino/test_convert_table_semantic_model_with_measures__plan0.sql diff --git a/tests/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Trino/test_convert_table_semantic_model_without_measures__plan0.sql b/tests_metricflow/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Trino/test_convert_table_semantic_model_without_measures__plan0.sql similarity index 100% rename from tests/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Trino/test_convert_table_semantic_model_without_measures__plan0.sql rename to tests_metricflow/snapshots/test_convert_semantic_model.py/SqlQueryPlan/Trino/test_convert_table_semantic_model_without_measures__plan0.sql diff --git a/tests/snapshots/test_convert_semantic_model.py/list/test_convert_table_semantic_model_with_measures__result0.txt b/tests_metricflow/snapshots/test_convert_semantic_model.py/list/test_convert_table_semantic_model_with_measures__result0.txt similarity index 100% rename from tests/snapshots/test_convert_semantic_model.py/list/test_convert_table_semantic_model_with_measures__result0.txt rename to tests_metricflow/snapshots/test_convert_semantic_model.py/list/test_convert_table_semantic_model_with_measures__result0.txt diff --git a/tests/snapshots/test_convert_semantic_model.py/list/test_convert_table_semantic_model_without_measures__result0.txt b/tests_metricflow/snapshots/test_convert_semantic_model.py/list/test_convert_table_semantic_model_without_measures__result0.txt similarity index 100% rename from tests/snapshots/test_convert_semantic_model.py/list/test_convert_table_semantic_model_without_measures__result0.txt rename to tests_metricflow/snapshots/test_convert_semantic_model.py/list/test_convert_table_semantic_model_without_measures__result0.txt diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_grain_to_date__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_grain_to_date__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_grain_to_date__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_grain_to_date__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_grain_to_date__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_grain_to_date__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_grain_to_date__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_grain_to_date__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_month__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_month__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_month__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_month__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_month__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_month__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_month__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_month__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_no_ds__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_no_ds__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_no_ds__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_no_ds__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_no_ds__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_no_ds__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_no_ds__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_no_ds__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_no_window__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_no_window__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_no_window__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_no_window__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_no_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_no_window__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_no_window__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_no_window__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_no_window_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_no_window_with_time_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_no_window_with_time_constraint__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_no_window_with_time_constraint__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_no_window_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_no_window_with_time_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_no_window_with_time_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_no_window_with_time_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_with_agg_time_dimension__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_with_agg_time_dimension__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_with_agg_time_dimension__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_with_agg_time_dimension__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_with_agg_time_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_with_agg_time_dimension__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_with_agg_time_dimension__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_with_agg_time_dimension__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_with_non_adjustable_time_filter__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_with_non_adjustable_time_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_with_non_adjustable_time_filter__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_with_non_adjustable_time_filter__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_with_non_adjustable_time_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_with_non_adjustable_time_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_with_non_adjustable_time_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_with_non_adjustable_time_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_with_time_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_with_time_constraint__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_with_time_constraint__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_with_time_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_with_time_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_metric_with_time_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_grain_to_date__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_grain_to_date__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_grain_to_date__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_grain_to_date__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_grain_to_date__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_grain_to_date__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_grain_to_date__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_grain_to_date__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_month__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_month__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_month__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_month__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_month__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_month__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_month__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_month__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_no_ds__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_no_ds__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_no_ds__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_no_ds__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_no_ds__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_no_ds__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_no_ds__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_no_ds__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_no_window__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_no_window__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_no_window__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_no_window__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_no_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_no_window__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_no_window__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_no_window__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_no_window_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_no_window_with_time_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_no_window_with_time_constraint__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_no_window_with_time_constraint__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_no_window_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_no_window_with_time_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_no_window_with_time_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_no_window_with_time_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_with_agg_time_dimension__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_with_agg_time_dimension__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_with_agg_time_dimension__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_with_agg_time_dimension__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_with_agg_time_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_with_agg_time_dimension__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_with_agg_time_dimension__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_with_agg_time_dimension__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_with_non_adjustable_time_filter__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_with_non_adjustable_time_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_with_non_adjustable_time_filter__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_with_non_adjustable_time_filter__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_with_non_adjustable_time_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_with_non_adjustable_time_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_with_non_adjustable_time_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_with_non_adjustable_time_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_with_time_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_with_time_constraint__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_with_time_constraint__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_with_time_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_with_time_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_metric_with_time_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_grain_to_date__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_grain_to_date__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_grain_to_date__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_grain_to_date__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_grain_to_date__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_grain_to_date__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_grain_to_date__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_grain_to_date__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_month__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_month__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_month__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_month__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_month__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_month__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_month__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_month__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_no_ds__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_no_ds__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_no_ds__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_no_ds__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_no_ds__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_no_ds__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_no_ds__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_no_ds__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_no_window__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_no_window__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_no_window__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_no_window__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_no_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_no_window__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_no_window__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_no_window__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_no_window_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_no_window_with_time_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_no_window_with_time_constraint__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_no_window_with_time_constraint__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_no_window_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_no_window_with_time_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_no_window_with_time_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_no_window_with_time_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_with_agg_time_dimension__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_with_agg_time_dimension__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_with_agg_time_dimension__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_with_agg_time_dimension__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_with_agg_time_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_with_agg_time_dimension__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_with_agg_time_dimension__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_with_agg_time_dimension__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_with_non_adjustable_time_filter__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_with_non_adjustable_time_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_with_non_adjustable_time_filter__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_with_non_adjustable_time_filter__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_with_non_adjustable_time_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_with_non_adjustable_time_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_with_non_adjustable_time_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_with_non_adjustable_time_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_with_time_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_with_time_constraint__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_with_time_constraint__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_with_time_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_with_time_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_metric_with_time_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_grain_to_date__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_grain_to_date__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_grain_to_date__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_grain_to_date__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_grain_to_date__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_grain_to_date__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_grain_to_date__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_grain_to_date__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_month__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_month__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_month__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_month__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_month__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_month__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_month__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_month__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_no_ds__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_no_ds__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_no_ds__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_no_ds__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_no_ds__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_no_ds__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_no_ds__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_no_ds__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_no_window__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_no_window__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_no_window__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_no_window__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_no_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_no_window__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_no_window__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_no_window__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_no_window_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_no_window_with_time_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_no_window_with_time_constraint__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_no_window_with_time_constraint__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_no_window_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_no_window_with_time_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_no_window_with_time_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_no_window_with_time_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_with_agg_time_dimension__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_with_agg_time_dimension__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_with_agg_time_dimension__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_with_agg_time_dimension__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_with_agg_time_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_with_agg_time_dimension__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_with_agg_time_dimension__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_with_agg_time_dimension__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_with_non_adjustable_time_filter__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_with_non_adjustable_time_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_with_non_adjustable_time_filter__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_with_non_adjustable_time_filter__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_with_non_adjustable_time_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_with_non_adjustable_time_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_with_non_adjustable_time_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_with_non_adjustable_time_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_with_time_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_with_time_constraint__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_with_time_constraint__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_with_time_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_with_time_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_metric_with_time_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_grain_to_date__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_grain_to_date__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_grain_to_date__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_grain_to_date__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_grain_to_date__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_grain_to_date__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_grain_to_date__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_grain_to_date__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_month__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_month__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_month__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_month__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_month__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_month__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_month__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_month__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_no_ds__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_no_ds__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_no_ds__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_no_ds__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_no_ds__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_no_ds__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_no_ds__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_no_ds__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_no_window__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_no_window__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_no_window__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_no_window__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_no_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_no_window__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_no_window__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_no_window__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_no_window_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_no_window_with_time_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_no_window_with_time_constraint__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_no_window_with_time_constraint__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_no_window_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_no_window_with_time_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_no_window_with_time_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_no_window_with_time_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_with_agg_time_dimension__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_with_agg_time_dimension__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_with_agg_time_dimension__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_with_agg_time_dimension__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_with_agg_time_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_with_agg_time_dimension__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_with_agg_time_dimension__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_with_agg_time_dimension__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_with_non_adjustable_time_filter__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_with_non_adjustable_time_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_with_non_adjustable_time_filter__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_with_non_adjustable_time_filter__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_with_non_adjustable_time_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_with_non_adjustable_time_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_with_non_adjustable_time_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_with_non_adjustable_time_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_with_time_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_with_time_constraint__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_with_time_constraint__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_with_time_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_with_time_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_metric_with_time_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_grain_to_date__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_grain_to_date__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_grain_to_date__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_grain_to_date__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_grain_to_date__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_grain_to_date__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_grain_to_date__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_grain_to_date__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_month__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_month__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_month__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_month__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_month__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_month__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_month__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_month__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_no_ds__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_no_ds__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_no_ds__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_no_ds__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_no_ds__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_no_ds__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_no_ds__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_no_ds__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_no_window__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_no_window__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_no_window__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_no_window__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_no_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_no_window__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_no_window__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_no_window__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_no_window_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_no_window_with_time_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_no_window_with_time_constraint__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_no_window_with_time_constraint__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_no_window_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_no_window_with_time_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_no_window_with_time_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_no_window_with_time_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_with_agg_time_dimension__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_with_agg_time_dimension__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_with_agg_time_dimension__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_with_agg_time_dimension__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_with_agg_time_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_with_agg_time_dimension__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_with_agg_time_dimension__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_with_agg_time_dimension__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_with_non_adjustable_time_filter__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_with_non_adjustable_time_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_with_non_adjustable_time_filter__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_with_non_adjustable_time_filter__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_with_non_adjustable_time_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_with_non_adjustable_time_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_with_non_adjustable_time_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_with_non_adjustable_time_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_with_time_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_with_time_constraint__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_with_time_constraint__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_with_time_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_with_time_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_metric_with_time_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_grain_to_date__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_grain_to_date__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_grain_to_date__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_grain_to_date__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_grain_to_date__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_grain_to_date__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_grain_to_date__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_grain_to_date__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_month__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_month__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_month__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_month__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_month__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_month__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_month__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_month__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_no_ds__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_no_ds__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_no_ds__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_no_ds__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_no_ds__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_no_ds__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_no_ds__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_no_ds__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_no_window__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_no_window__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_no_window__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_no_window__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_no_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_no_window__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_no_window__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_no_window__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_no_window_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_no_window_with_time_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_no_window_with_time_constraint__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_no_window_with_time_constraint__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_no_window_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_no_window_with_time_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_no_window_with_time_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_no_window_with_time_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_with_agg_time_dimension__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_with_agg_time_dimension__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_with_agg_time_dimension__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_with_agg_time_dimension__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_with_agg_time_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_with_agg_time_dimension__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_with_agg_time_dimension__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_with_agg_time_dimension__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_with_non_adjustable_time_filter__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_with_non_adjustable_time_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_with_non_adjustable_time_filter__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_with_non_adjustable_time_filter__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_with_non_adjustable_time_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_with_non_adjustable_time_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_with_non_adjustable_time_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_with_non_adjustable_time_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_with_time_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_with_time_constraint__plan0.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_with_time_constraint__plan0.sql diff --git a/tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_with_time_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_with_time_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_cumulative_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_metric_with_time_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_cumulative_metrics.py/str/BigQuery/test_cumulative_metric_with_non_adjustable_filter__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/BigQuery/test_cumulative_metric_with_non_adjustable_filter__query_output.txt similarity index 100% rename from tests/snapshots/test_cumulative_metrics.py/str/BigQuery/test_cumulative_metric_with_non_adjustable_filter__query_output.txt rename to tests_metricflow/snapshots/test_cumulative_metrics.py/str/BigQuery/test_cumulative_metric_with_non_adjustable_filter__query_output.txt diff --git a/tests/snapshots/test_cumulative_metrics.py/str/BigQuery/test_grain_to_date_cumulative_metric__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/BigQuery/test_grain_to_date_cumulative_metric__query_output.txt similarity index 100% rename from tests/snapshots/test_cumulative_metrics.py/str/BigQuery/test_grain_to_date_cumulative_metric__query_output.txt rename to tests_metricflow/snapshots/test_cumulative_metrics.py/str/BigQuery/test_grain_to_date_cumulative_metric__query_output.txt diff --git a/tests/snapshots/test_cumulative_metrics.py/str/BigQuery/test_multiple_cumulative_metrics__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/BigQuery/test_multiple_cumulative_metrics__query_output.txt similarity index 100% rename from tests/snapshots/test_cumulative_metrics.py/str/BigQuery/test_multiple_cumulative_metrics__query_output.txt rename to tests_metricflow/snapshots/test_cumulative_metrics.py/str/BigQuery/test_multiple_cumulative_metrics__query_output.txt diff --git a/tests/snapshots/test_cumulative_metrics.py/str/BigQuery/test_non_additive_cumulative_metric__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/BigQuery/test_non_additive_cumulative_metric__query_output.txt similarity index 100% rename from tests/snapshots/test_cumulative_metrics.py/str/BigQuery/test_non_additive_cumulative_metric__query_output.txt rename to tests_metricflow/snapshots/test_cumulative_metrics.py/str/BigQuery/test_non_additive_cumulative_metric__query_output.txt diff --git a/tests/snapshots/test_cumulative_metrics.py/str/BigQuery/test_simple_cumulative_metric__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/BigQuery/test_simple_cumulative_metric__query_output.txt similarity index 100% rename from tests/snapshots/test_cumulative_metrics.py/str/BigQuery/test_simple_cumulative_metric__query_output.txt rename to tests_metricflow/snapshots/test_cumulative_metrics.py/str/BigQuery/test_simple_cumulative_metric__query_output.txt diff --git a/tests/snapshots/test_cumulative_metrics.py/str/Databricks/test_cumulative_metric_with_non_adjustable_filter__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Databricks/test_cumulative_metric_with_non_adjustable_filter__query_output.txt similarity index 100% rename from tests/snapshots/test_cumulative_metrics.py/str/Databricks/test_cumulative_metric_with_non_adjustable_filter__query_output.txt rename to tests_metricflow/snapshots/test_cumulative_metrics.py/str/Databricks/test_cumulative_metric_with_non_adjustable_filter__query_output.txt diff --git a/tests/snapshots/test_cumulative_metrics.py/str/Databricks/test_grain_to_date_cumulative_metric__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Databricks/test_grain_to_date_cumulative_metric__query_output.txt similarity index 100% rename from tests/snapshots/test_cumulative_metrics.py/str/Databricks/test_grain_to_date_cumulative_metric__query_output.txt rename to tests_metricflow/snapshots/test_cumulative_metrics.py/str/Databricks/test_grain_to_date_cumulative_metric__query_output.txt diff --git a/tests/snapshots/test_cumulative_metrics.py/str/Databricks/test_multiple_cumulative_metrics__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Databricks/test_multiple_cumulative_metrics__query_output.txt similarity index 100% rename from tests/snapshots/test_cumulative_metrics.py/str/Databricks/test_multiple_cumulative_metrics__query_output.txt rename to tests_metricflow/snapshots/test_cumulative_metrics.py/str/Databricks/test_multiple_cumulative_metrics__query_output.txt diff --git a/tests/snapshots/test_cumulative_metrics.py/str/Databricks/test_non_additive_cumulative_metric__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Databricks/test_non_additive_cumulative_metric__query_output.txt similarity index 100% rename from tests/snapshots/test_cumulative_metrics.py/str/Databricks/test_non_additive_cumulative_metric__query_output.txt rename to tests_metricflow/snapshots/test_cumulative_metrics.py/str/Databricks/test_non_additive_cumulative_metric__query_output.txt diff --git a/tests/snapshots/test_cumulative_metrics.py/str/Databricks/test_simple_cumulative_metric__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Databricks/test_simple_cumulative_metric__query_output.txt similarity index 100% rename from tests/snapshots/test_cumulative_metrics.py/str/Databricks/test_simple_cumulative_metric__query_output.txt rename to tests_metricflow/snapshots/test_cumulative_metrics.py/str/Databricks/test_simple_cumulative_metric__query_output.txt diff --git a/tests/snapshots/test_cumulative_metrics.py/str/DuckDB/test_cumulative_metric_with_non_adjustable_filter__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/DuckDB/test_cumulative_metric_with_non_adjustable_filter__query_output.txt similarity index 100% rename from tests/snapshots/test_cumulative_metrics.py/str/DuckDB/test_cumulative_metric_with_non_adjustable_filter__query_output.txt rename to tests_metricflow/snapshots/test_cumulative_metrics.py/str/DuckDB/test_cumulative_metric_with_non_adjustable_filter__query_output.txt diff --git a/tests/snapshots/test_cumulative_metrics.py/str/DuckDB/test_grain_to_date_cumulative_metric__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/DuckDB/test_grain_to_date_cumulative_metric__query_output.txt similarity index 100% rename from tests/snapshots/test_cumulative_metrics.py/str/DuckDB/test_grain_to_date_cumulative_metric__query_output.txt rename to tests_metricflow/snapshots/test_cumulative_metrics.py/str/DuckDB/test_grain_to_date_cumulative_metric__query_output.txt diff --git a/tests/snapshots/test_cumulative_metrics.py/str/DuckDB/test_multiple_cumulative_metrics__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/DuckDB/test_multiple_cumulative_metrics__query_output.txt similarity index 100% rename from tests/snapshots/test_cumulative_metrics.py/str/DuckDB/test_multiple_cumulative_metrics__query_output.txt rename to tests_metricflow/snapshots/test_cumulative_metrics.py/str/DuckDB/test_multiple_cumulative_metrics__query_output.txt diff --git a/tests/snapshots/test_cumulative_metrics.py/str/DuckDB/test_non_additive_cumulative_metric__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/DuckDB/test_non_additive_cumulative_metric__query_output.txt similarity index 100% rename from tests/snapshots/test_cumulative_metrics.py/str/DuckDB/test_non_additive_cumulative_metric__query_output.txt rename to tests_metricflow/snapshots/test_cumulative_metrics.py/str/DuckDB/test_non_additive_cumulative_metric__query_output.txt diff --git a/tests/snapshots/test_cumulative_metrics.py/str/DuckDB/test_simple_cumulative_metric__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/DuckDB/test_simple_cumulative_metric__query_output.txt similarity index 100% rename from tests/snapshots/test_cumulative_metrics.py/str/DuckDB/test_simple_cumulative_metric__query_output.txt rename to tests_metricflow/snapshots/test_cumulative_metrics.py/str/DuckDB/test_simple_cumulative_metric__query_output.txt diff --git a/tests/snapshots/test_cumulative_metrics.py/str/Postgres/test_cumulative_metric_with_non_adjustable_filter__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Postgres/test_cumulative_metric_with_non_adjustable_filter__query_output.txt similarity index 100% rename from tests/snapshots/test_cumulative_metrics.py/str/Postgres/test_cumulative_metric_with_non_adjustable_filter__query_output.txt rename to tests_metricflow/snapshots/test_cumulative_metrics.py/str/Postgres/test_cumulative_metric_with_non_adjustable_filter__query_output.txt diff --git a/tests/snapshots/test_cumulative_metrics.py/str/Postgres/test_grain_to_date_cumulative_metric__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Postgres/test_grain_to_date_cumulative_metric__query_output.txt similarity index 100% rename from tests/snapshots/test_cumulative_metrics.py/str/Postgres/test_grain_to_date_cumulative_metric__query_output.txt rename to tests_metricflow/snapshots/test_cumulative_metrics.py/str/Postgres/test_grain_to_date_cumulative_metric__query_output.txt diff --git a/tests/snapshots/test_cumulative_metrics.py/str/Postgres/test_multiple_cumulative_metrics__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Postgres/test_multiple_cumulative_metrics__query_output.txt similarity index 100% rename from tests/snapshots/test_cumulative_metrics.py/str/Postgres/test_multiple_cumulative_metrics__query_output.txt rename to tests_metricflow/snapshots/test_cumulative_metrics.py/str/Postgres/test_multiple_cumulative_metrics__query_output.txt diff --git a/tests/snapshots/test_cumulative_metrics.py/str/Postgres/test_non_additive_cumulative_metric__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Postgres/test_non_additive_cumulative_metric__query_output.txt similarity index 100% rename from tests/snapshots/test_cumulative_metrics.py/str/Postgres/test_non_additive_cumulative_metric__query_output.txt rename to tests_metricflow/snapshots/test_cumulative_metrics.py/str/Postgres/test_non_additive_cumulative_metric__query_output.txt diff --git a/tests/snapshots/test_cumulative_metrics.py/str/Postgres/test_simple_cumulative_metric__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Postgres/test_simple_cumulative_metric__query_output.txt similarity index 100% rename from tests/snapshots/test_cumulative_metrics.py/str/Postgres/test_simple_cumulative_metric__query_output.txt rename to tests_metricflow/snapshots/test_cumulative_metrics.py/str/Postgres/test_simple_cumulative_metric__query_output.txt diff --git a/tests/snapshots/test_cumulative_metrics.py/str/Redshift/test_cumulative_metric_with_non_adjustable_filter__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Redshift/test_cumulative_metric_with_non_adjustable_filter__query_output.txt similarity index 100% rename from tests/snapshots/test_cumulative_metrics.py/str/Redshift/test_cumulative_metric_with_non_adjustable_filter__query_output.txt rename to tests_metricflow/snapshots/test_cumulative_metrics.py/str/Redshift/test_cumulative_metric_with_non_adjustable_filter__query_output.txt diff --git a/tests/snapshots/test_cumulative_metrics.py/str/Redshift/test_grain_to_date_cumulative_metric__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Redshift/test_grain_to_date_cumulative_metric__query_output.txt similarity index 100% rename from tests/snapshots/test_cumulative_metrics.py/str/Redshift/test_grain_to_date_cumulative_metric__query_output.txt rename to tests_metricflow/snapshots/test_cumulative_metrics.py/str/Redshift/test_grain_to_date_cumulative_metric__query_output.txt diff --git a/tests/snapshots/test_cumulative_metrics.py/str/Redshift/test_multiple_cumulative_metrics__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Redshift/test_multiple_cumulative_metrics__query_output.txt similarity index 100% rename from tests/snapshots/test_cumulative_metrics.py/str/Redshift/test_multiple_cumulative_metrics__query_output.txt rename to tests_metricflow/snapshots/test_cumulative_metrics.py/str/Redshift/test_multiple_cumulative_metrics__query_output.txt diff --git a/tests/snapshots/test_cumulative_metrics.py/str/Redshift/test_non_additive_cumulative_metric__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Redshift/test_non_additive_cumulative_metric__query_output.txt similarity index 100% rename from tests/snapshots/test_cumulative_metrics.py/str/Redshift/test_non_additive_cumulative_metric__query_output.txt rename to tests_metricflow/snapshots/test_cumulative_metrics.py/str/Redshift/test_non_additive_cumulative_metric__query_output.txt diff --git a/tests/snapshots/test_cumulative_metrics.py/str/Redshift/test_simple_cumulative_metric__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Redshift/test_simple_cumulative_metric__query_output.txt similarity index 100% rename from tests/snapshots/test_cumulative_metrics.py/str/Redshift/test_simple_cumulative_metric__query_output.txt rename to tests_metricflow/snapshots/test_cumulative_metrics.py/str/Redshift/test_simple_cumulative_metric__query_output.txt diff --git a/tests/snapshots/test_cumulative_metrics.py/str/Snowflake/test_cumulative_metric_with_non_adjustable_filter__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Snowflake/test_cumulative_metric_with_non_adjustable_filter__query_output.txt similarity index 100% rename from tests/snapshots/test_cumulative_metrics.py/str/Snowflake/test_cumulative_metric_with_non_adjustable_filter__query_output.txt rename to tests_metricflow/snapshots/test_cumulative_metrics.py/str/Snowflake/test_cumulative_metric_with_non_adjustable_filter__query_output.txt diff --git a/tests/snapshots/test_cumulative_metrics.py/str/Snowflake/test_grain_to_date_cumulative_metric__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Snowflake/test_grain_to_date_cumulative_metric__query_output.txt similarity index 100% rename from tests/snapshots/test_cumulative_metrics.py/str/Snowflake/test_grain_to_date_cumulative_metric__query_output.txt rename to tests_metricflow/snapshots/test_cumulative_metrics.py/str/Snowflake/test_grain_to_date_cumulative_metric__query_output.txt diff --git a/tests/snapshots/test_cumulative_metrics.py/str/Snowflake/test_multiple_cumulative_metrics__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Snowflake/test_multiple_cumulative_metrics__query_output.txt similarity index 100% rename from tests/snapshots/test_cumulative_metrics.py/str/Snowflake/test_multiple_cumulative_metrics__query_output.txt rename to tests_metricflow/snapshots/test_cumulative_metrics.py/str/Snowflake/test_multiple_cumulative_metrics__query_output.txt diff --git a/tests/snapshots/test_cumulative_metrics.py/str/Snowflake/test_non_additive_cumulative_metric__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Snowflake/test_non_additive_cumulative_metric__query_output.txt similarity index 100% rename from tests/snapshots/test_cumulative_metrics.py/str/Snowflake/test_non_additive_cumulative_metric__query_output.txt rename to tests_metricflow/snapshots/test_cumulative_metrics.py/str/Snowflake/test_non_additive_cumulative_metric__query_output.txt diff --git a/tests/snapshots/test_cumulative_metrics.py/str/Snowflake/test_simple_cumulative_metric__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Snowflake/test_simple_cumulative_metric__query_output.txt similarity index 100% rename from tests/snapshots/test_cumulative_metrics.py/str/Snowflake/test_simple_cumulative_metric__query_output.txt rename to tests_metricflow/snapshots/test_cumulative_metrics.py/str/Snowflake/test_simple_cumulative_metric__query_output.txt diff --git a/tests/snapshots/test_cumulative_metrics.py/str/Trino/test_cumulative_metric_with_non_adjustable_filter__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Trino/test_cumulative_metric_with_non_adjustable_filter__query_output.txt similarity index 100% rename from tests/snapshots/test_cumulative_metrics.py/str/Trino/test_cumulative_metric_with_non_adjustable_filter__query_output.txt rename to tests_metricflow/snapshots/test_cumulative_metrics.py/str/Trino/test_cumulative_metric_with_non_adjustable_filter__query_output.txt diff --git a/tests/snapshots/test_cumulative_metrics.py/str/Trino/test_grain_to_date_cumulative_metric__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Trino/test_grain_to_date_cumulative_metric__query_output.txt similarity index 100% rename from tests/snapshots/test_cumulative_metrics.py/str/Trino/test_grain_to_date_cumulative_metric__query_output.txt rename to tests_metricflow/snapshots/test_cumulative_metrics.py/str/Trino/test_grain_to_date_cumulative_metric__query_output.txt diff --git a/tests/snapshots/test_cumulative_metrics.py/str/Trino/test_multiple_cumulative_metrics__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Trino/test_multiple_cumulative_metrics__query_output.txt similarity index 100% rename from tests/snapshots/test_cumulative_metrics.py/str/Trino/test_multiple_cumulative_metrics__query_output.txt rename to tests_metricflow/snapshots/test_cumulative_metrics.py/str/Trino/test_multiple_cumulative_metrics__query_output.txt diff --git a/tests/snapshots/test_cumulative_metrics.py/str/Trino/test_non_additive_cumulative_metric__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Trino/test_non_additive_cumulative_metric__query_output.txt similarity index 100% rename from tests/snapshots/test_cumulative_metrics.py/str/Trino/test_non_additive_cumulative_metric__query_output.txt rename to tests_metricflow/snapshots/test_cumulative_metrics.py/str/Trino/test_non_additive_cumulative_metric__query_output.txt diff --git a/tests/snapshots/test_cumulative_metrics.py/str/Trino/test_simple_cumulative_metric__query_output.txt b/tests_metricflow/snapshots/test_cumulative_metrics.py/str/Trino/test_simple_cumulative_metric__query_output.txt similarity index 100% rename from tests/snapshots/test_cumulative_metrics.py/str/Trino/test_simple_cumulative_metric__query_output.txt rename to tests_metricflow/snapshots/test_cumulative_metrics.py/str/Trino/test_simple_cumulative_metric__query_output.txt diff --git a/tests/snapshots/test_cyclic_join.py/DataflowPlan/test_cyclic_join__dfp_0.xml b/tests_metricflow/snapshots/test_cyclic_join.py/DataflowPlan/test_cyclic_join__dfp_0.xml similarity index 100% rename from tests/snapshots/test_cyclic_join.py/DataflowPlan/test_cyclic_join__dfp_0.xml rename to tests_metricflow/snapshots/test_cyclic_join.py/DataflowPlan/test_cyclic_join__dfp_0.xml diff --git a/tests/snapshots/test_data_warehouse_tasks.py/str/BigQuery/test_build_metric_tasks__query0.sql b/tests_metricflow/snapshots/test_data_warehouse_tasks.py/str/BigQuery/test_build_metric_tasks__query0.sql similarity index 100% rename from tests/snapshots/test_data_warehouse_tasks.py/str/BigQuery/test_build_metric_tasks__query0.sql rename to tests_metricflow/snapshots/test_data_warehouse_tasks.py/str/BigQuery/test_build_metric_tasks__query0.sql diff --git a/tests/snapshots/test_data_warehouse_tasks.py/str/Databricks/test_build_metric_tasks__query0.sql b/tests_metricflow/snapshots/test_data_warehouse_tasks.py/str/Databricks/test_build_metric_tasks__query0.sql similarity index 100% rename from tests/snapshots/test_data_warehouse_tasks.py/str/Databricks/test_build_metric_tasks__query0.sql rename to tests_metricflow/snapshots/test_data_warehouse_tasks.py/str/Databricks/test_build_metric_tasks__query0.sql diff --git a/tests/snapshots/test_data_warehouse_tasks.py/str/DuckDB/test_build_metric_tasks__query0.sql b/tests_metricflow/snapshots/test_data_warehouse_tasks.py/str/DuckDB/test_build_metric_tasks__query0.sql similarity index 100% rename from tests/snapshots/test_data_warehouse_tasks.py/str/DuckDB/test_build_metric_tasks__query0.sql rename to tests_metricflow/snapshots/test_data_warehouse_tasks.py/str/DuckDB/test_build_metric_tasks__query0.sql diff --git a/tests/snapshots/test_data_warehouse_tasks.py/str/Postgres/test_build_metric_tasks__query0.sql b/tests_metricflow/snapshots/test_data_warehouse_tasks.py/str/Postgres/test_build_metric_tasks__query0.sql similarity index 100% rename from tests/snapshots/test_data_warehouse_tasks.py/str/Postgres/test_build_metric_tasks__query0.sql rename to tests_metricflow/snapshots/test_data_warehouse_tasks.py/str/Postgres/test_build_metric_tasks__query0.sql diff --git a/tests/snapshots/test_data_warehouse_tasks.py/str/Redshift/test_build_metric_tasks__query0.sql b/tests_metricflow/snapshots/test_data_warehouse_tasks.py/str/Redshift/test_build_metric_tasks__query0.sql similarity index 100% rename from tests/snapshots/test_data_warehouse_tasks.py/str/Redshift/test_build_metric_tasks__query0.sql rename to tests_metricflow/snapshots/test_data_warehouse_tasks.py/str/Redshift/test_build_metric_tasks__query0.sql diff --git a/tests/snapshots/test_data_warehouse_tasks.py/str/Snowflake/test_build_metric_tasks__query0.sql b/tests_metricflow/snapshots/test_data_warehouse_tasks.py/str/Snowflake/test_build_metric_tasks__query0.sql similarity index 100% rename from tests/snapshots/test_data_warehouse_tasks.py/str/Snowflake/test_build_metric_tasks__query0.sql rename to tests_metricflow/snapshots/test_data_warehouse_tasks.py/str/Snowflake/test_build_metric_tasks__query0.sql diff --git a/tests/snapshots/test_data_warehouse_tasks.py/str/Trino/test_build_metric_tasks__query0.sql b/tests_metricflow/snapshots/test_data_warehouse_tasks.py/str/Trino/test_build_metric_tasks__query0.sql similarity index 100% rename from tests/snapshots/test_data_warehouse_tasks.py/str/Trino/test_build_metric_tasks__query0.sql rename to tests_metricflow/snapshots/test_data_warehouse_tasks.py/str/Trino/test_build_metric_tasks__query0.sql diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_common_semantic_model__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_common_semantic_model__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_common_semantic_model__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_common_semantic_model__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_cumulative_metric_no_window_or_grain_with_metric_time__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_cumulative_metric_no_window_or_grain_with_metric_time__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_cumulative_metric_no_window_or_grain_with_metric_time__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_cumulative_metric_no_window_or_grain_with_metric_time__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_cumulative_metric_no_window_or_grain_without_metric_time__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_cumulative_metric_no_window_or_grain_without_metric_time__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_cumulative_metric_no_window_or_grain_without_metric_time__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_cumulative_metric_no_window_or_grain_without_metric_time__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_cumulative_metric_with_window__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_cumulative_metric_with_window__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_cumulative_metric_with_window__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_cumulative_metric_with_window__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_derived_metric_offset_to_grain__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_derived_metric_offset_to_grain__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_derived_metric_offset_to_grain__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_derived_metric_offset_to_grain__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_derived_metric_offset_window__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_derived_metric_offset_window__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_derived_metric_offset_window__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_derived_metric_offset_window__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_derived_metric_offset_with_granularity__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_derived_metric_offset_with_granularity__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_derived_metric_offset_with_granularity__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_derived_metric_offset_with_granularity__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_derived_offset_cumulative_metric__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_derived_offset_cumulative_metric__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_derived_offset_cumulative_metric__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_derived_offset_cumulative_metric__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_dimensions_with_time_constraint__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_dimensions_with_time_constraint__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_dimensions_with_time_constraint__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_dimensions_with_time_constraint__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_distinct_values_plan__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_distinct_values_plan__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_distinct_values_plan__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_distinct_values_plan__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_distinct_values_plan_with_join__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_distinct_values_plan_with_join__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_distinct_values_plan_with_join__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_distinct_values_plan_with_join__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_dont_join_to_time_spine_if_no_time_dimension_requested__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_dont_join_to_time_spine_if_no_time_dimension_requested__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_dont_join_to_time_spine_if_no_time_dimension_requested__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_dont_join_to_time_spine_if_no_time_dimension_requested__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_join_to_time_spine_derived_metric__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_join_to_time_spine_derived_metric__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_join_to_time_spine_derived_metric__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_join_to_time_spine_derived_metric__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_join_to_time_spine_with_filters__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_join_to_time_spine_with_filters__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_join_to_time_spine_with_filters__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_join_to_time_spine_with_filters__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_join_to_time_spine_with_metric_time__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_join_to_time_spine_with_metric_time__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_join_to_time_spine_with_metric_time__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_join_to_time_spine_with_metric_time__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_join_to_time_spine_with_non_metric_time__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_join_to_time_spine_with_non_metric_time__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_join_to_time_spine_with_non_metric_time__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_join_to_time_spine_with_non_metric_time__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_joined_plan__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_joined_plan__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_joined_plan__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_joined_plan__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_limit_rows_plan__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_limit_rows_plan__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_limit_rows_plan__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_limit_rows_plan__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_measure_constraint_plan__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_measure_constraint_plan__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_measure_constraint_plan__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_measure_constraint_plan__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_measure_constraint_with_reused_measure_plan__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_measure_constraint_with_reused_measure_plan__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_measure_constraint_with_reused_measure_plan__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_measure_constraint_with_reused_measure_plan__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_metric_in_metric_where_filter__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_metric_in_metric_where_filter__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_metric_in_metric_where_filter__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_metric_in_metric_where_filter__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_metric_in_query_where_filter__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_metric_in_query_where_filter__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_metric_in_query_where_filter__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_metric_in_query_where_filter__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_metric_time_only__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_metric_time_only__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_metric_time_only__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_metric_time_only__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_metric_time_quarter__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_metric_time_quarter__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_metric_time_quarter__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_metric_time_quarter__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_metric_time_with_other_dimensions__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_metric_time_with_other_dimensions__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_metric_time_with_other_dimensions__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_metric_time_with_other_dimensions__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_min_max_metric_time__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_min_max_metric_time__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_min_max_metric_time__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_min_max_metric_time__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_min_max_metric_time_week__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_min_max_metric_time_week__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_min_max_metric_time_week__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_min_max_metric_time_week__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_min_max_only_categorical__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_min_max_only_categorical__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_min_max_only_categorical__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_min_max_only_categorical__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_min_max_only_time__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_min_max_only_time__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_min_max_only_time__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_min_max_only_time__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_min_max_only_time_year__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_min_max_only_time_year__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_min_max_only_time_year__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_min_max_only_time_year__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_multi_semantic_model_ratio_metrics_plan__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_multi_semantic_model_ratio_metrics_plan__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_multi_semantic_model_ratio_metrics_plan__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_multi_semantic_model_ratio_metrics_plan__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_multihop_join_plan__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_multihop_join_plan__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_multihop_join_plan__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_multihop_join_plan__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_multiple_metrics_plan__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_multiple_metrics_plan__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_multiple_metrics_plan__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_multiple_metrics_plan__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_nested_derived_metric_with_outer_offset__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_nested_derived_metric_with_outer_offset__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_nested_derived_metric_with_outer_offset__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_nested_derived_metric_with_outer_offset__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_offset_to_grain_metric_filter_and_query_have_different_granularities__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_offset_to_grain_metric_filter_and_query_have_different_granularities__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_offset_to_grain_metric_filter_and_query_have_different_granularities__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_offset_to_grain_metric_filter_and_query_have_different_granularities__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_offset_window_metric_filter_and_query_have_different_granularities__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_offset_window_metric_filter_and_query_have_different_granularities__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_offset_window_metric_filter_and_query_have_different_granularities__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_offset_window_metric_filter_and_query_have_different_granularities__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_order_by_plan__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_order_by_plan__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_order_by_plan__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_order_by_plan__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_primary_entity_dimension__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_primary_entity_dimension__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_primary_entity_dimension__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_primary_entity_dimension__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_simple_plan__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_simple_plan__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_simple_plan__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_simple_plan__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_single_semantic_model_ratio_metrics_plan__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_single_semantic_model_ratio_metrics_plan__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_single_semantic_model_ratio_metrics_plan__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_single_semantic_model_ratio_metrics_plan__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_where_constrained_plan__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_where_constrained_plan__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_where_constrained_plan__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_where_constrained_plan__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_where_constrained_plan_time_dimension__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_where_constrained_plan_time_dimension__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_where_constrained_plan_time_dimension__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_where_constrained_plan_time_dimension__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_where_constrained_with_common_linkable_plan__dfp_0.xml b/tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_where_constrained_with_common_linkable_plan__dfp_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_where_constrained_with_common_linkable_plan__dfp_0.xml rename to tests_metricflow/snapshots/test_dataflow_plan_builder.py/DataflowPlan/test_where_constrained_with_common_linkable_plan__dfp_0.xml diff --git a/tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/BigQuery/test_combined_metrics_plan__ep_0.xml b/tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/BigQuery/test_combined_metrics_plan__ep_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/BigQuery/test_combined_metrics_plan__ep_0.xml rename to tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/BigQuery/test_combined_metrics_plan__ep_0.xml diff --git a/tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/BigQuery/test_joined_plan__ep_0.xml b/tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/BigQuery/test_joined_plan__ep_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/BigQuery/test_joined_plan__ep_0.xml rename to tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/BigQuery/test_joined_plan__ep_0.xml diff --git a/tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/BigQuery/test_multihop_joined_plan__ep_0.xml b/tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/BigQuery/test_multihop_joined_plan__ep_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/BigQuery/test_multihop_joined_plan__ep_0.xml rename to tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/BigQuery/test_multihop_joined_plan__ep_0.xml diff --git a/tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/BigQuery/test_small_combined_metrics_plan__ep_0.xml b/tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/BigQuery/test_small_combined_metrics_plan__ep_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/BigQuery/test_small_combined_metrics_plan__ep_0.xml rename to tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/BigQuery/test_small_combined_metrics_plan__ep_0.xml diff --git a/tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Databricks/test_combined_metrics_plan__ep_0.xml b/tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Databricks/test_combined_metrics_plan__ep_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Databricks/test_combined_metrics_plan__ep_0.xml rename to tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Databricks/test_combined_metrics_plan__ep_0.xml diff --git a/tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Databricks/test_joined_plan__ep_0.xml b/tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Databricks/test_joined_plan__ep_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Databricks/test_joined_plan__ep_0.xml rename to tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Databricks/test_joined_plan__ep_0.xml diff --git a/tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Databricks/test_multihop_joined_plan__ep_0.xml b/tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Databricks/test_multihop_joined_plan__ep_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Databricks/test_multihop_joined_plan__ep_0.xml rename to tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Databricks/test_multihop_joined_plan__ep_0.xml diff --git a/tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Databricks/test_small_combined_metrics_plan__ep_0.xml b/tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Databricks/test_small_combined_metrics_plan__ep_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Databricks/test_small_combined_metrics_plan__ep_0.xml rename to tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Databricks/test_small_combined_metrics_plan__ep_0.xml diff --git a/tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/DuckDB/test_combined_metrics_plan__ep_0.xml b/tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/DuckDB/test_combined_metrics_plan__ep_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/DuckDB/test_combined_metrics_plan__ep_0.xml rename to tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/DuckDB/test_combined_metrics_plan__ep_0.xml diff --git a/tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/DuckDB/test_joined_plan__ep_0.xml b/tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/DuckDB/test_joined_plan__ep_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/DuckDB/test_joined_plan__ep_0.xml rename to tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/DuckDB/test_joined_plan__ep_0.xml diff --git a/tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/DuckDB/test_multihop_joined_plan__ep_0.xml b/tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/DuckDB/test_multihop_joined_plan__ep_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/DuckDB/test_multihop_joined_plan__ep_0.xml rename to tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/DuckDB/test_multihop_joined_plan__ep_0.xml diff --git a/tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/DuckDB/test_small_combined_metrics_plan__ep_0.xml b/tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/DuckDB/test_small_combined_metrics_plan__ep_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/DuckDB/test_small_combined_metrics_plan__ep_0.xml rename to tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/DuckDB/test_small_combined_metrics_plan__ep_0.xml diff --git a/tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Postgres/test_combined_metrics_plan__ep_0.xml b/tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Postgres/test_combined_metrics_plan__ep_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Postgres/test_combined_metrics_plan__ep_0.xml rename to tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Postgres/test_combined_metrics_plan__ep_0.xml diff --git a/tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Postgres/test_joined_plan__ep_0.xml b/tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Postgres/test_joined_plan__ep_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Postgres/test_joined_plan__ep_0.xml rename to tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Postgres/test_joined_plan__ep_0.xml diff --git a/tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Postgres/test_multihop_joined_plan__ep_0.xml b/tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Postgres/test_multihop_joined_plan__ep_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Postgres/test_multihop_joined_plan__ep_0.xml rename to tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Postgres/test_multihop_joined_plan__ep_0.xml diff --git a/tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Postgres/test_small_combined_metrics_plan__ep_0.xml b/tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Postgres/test_small_combined_metrics_plan__ep_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Postgres/test_small_combined_metrics_plan__ep_0.xml rename to tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Postgres/test_small_combined_metrics_plan__ep_0.xml diff --git a/tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Redshift/test_combined_metrics_plan__ep_0.xml b/tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Redshift/test_combined_metrics_plan__ep_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Redshift/test_combined_metrics_plan__ep_0.xml rename to tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Redshift/test_combined_metrics_plan__ep_0.xml diff --git a/tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Redshift/test_joined_plan__ep_0.xml b/tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Redshift/test_joined_plan__ep_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Redshift/test_joined_plan__ep_0.xml rename to tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Redshift/test_joined_plan__ep_0.xml diff --git a/tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Redshift/test_multihop_joined_plan__ep_0.xml b/tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Redshift/test_multihop_joined_plan__ep_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Redshift/test_multihop_joined_plan__ep_0.xml rename to tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Redshift/test_multihop_joined_plan__ep_0.xml diff --git a/tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Redshift/test_small_combined_metrics_plan__ep_0.xml b/tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Redshift/test_small_combined_metrics_plan__ep_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Redshift/test_small_combined_metrics_plan__ep_0.xml rename to tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Redshift/test_small_combined_metrics_plan__ep_0.xml diff --git a/tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Snowflake/test_combined_metrics_plan__ep_0.xml b/tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Snowflake/test_combined_metrics_plan__ep_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Snowflake/test_combined_metrics_plan__ep_0.xml rename to tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Snowflake/test_combined_metrics_plan__ep_0.xml diff --git a/tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Snowflake/test_joined_plan__ep_0.xml b/tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Snowflake/test_joined_plan__ep_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Snowflake/test_joined_plan__ep_0.xml rename to tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Snowflake/test_joined_plan__ep_0.xml diff --git a/tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Snowflake/test_multihop_joined_plan__ep_0.xml b/tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Snowflake/test_multihop_joined_plan__ep_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Snowflake/test_multihop_joined_plan__ep_0.xml rename to tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Snowflake/test_multihop_joined_plan__ep_0.xml diff --git a/tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Snowflake/test_small_combined_metrics_plan__ep_0.xml b/tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Snowflake/test_small_combined_metrics_plan__ep_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Snowflake/test_small_combined_metrics_plan__ep_0.xml rename to tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Snowflake/test_small_combined_metrics_plan__ep_0.xml diff --git a/tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Trino/test_combined_metrics_plan__ep_0.xml b/tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Trino/test_combined_metrics_plan__ep_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Trino/test_combined_metrics_plan__ep_0.xml rename to tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Trino/test_combined_metrics_plan__ep_0.xml diff --git a/tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Trino/test_joined_plan__ep_0.xml b/tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Trino/test_joined_plan__ep_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Trino/test_joined_plan__ep_0.xml rename to tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Trino/test_joined_plan__ep_0.xml diff --git a/tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Trino/test_multihop_joined_plan__ep_0.xml b/tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Trino/test_multihop_joined_plan__ep_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Trino/test_multihop_joined_plan__ep_0.xml rename to tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Trino/test_multihop_joined_plan__ep_0.xml diff --git a/tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Trino/test_small_combined_metrics_plan__ep_0.xml b/tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Trino/test_small_combined_metrics_plan__ep_0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Trino/test_small_combined_metrics_plan__ep_0.xml rename to tests_metricflow/snapshots/test_dataflow_to_execution.py/ExecutionPlan/Trino/test_small_combined_metrics_plan__ep_0.xml diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/DataflowPlan/test_compute_metrics_node_simple_expr__plan0.xml b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/DataflowPlan/test_compute_metrics_node_simple_expr__plan0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/DataflowPlan/test_compute_metrics_node_simple_expr__plan0.xml rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/DataflowPlan/test_compute_metrics_node_simple_expr__plan0.xml diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/DataflowPlan/test_join_to_time_spine_node_with_offset_to_grain__plan0.xml b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/DataflowPlan/test_join_to_time_spine_node_with_offset_to_grain__plan0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/DataflowPlan/test_join_to_time_spine_node_with_offset_to_grain__plan0.xml rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/DataflowPlan/test_join_to_time_spine_node_with_offset_to_grain__plan0.xml diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/DataflowPlan/test_join_to_time_spine_node_with_offset_window__plan0.xml b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/DataflowPlan/test_join_to_time_spine_node_with_offset_window__plan0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/DataflowPlan/test_join_to_time_spine_node_with_offset_window__plan0.xml rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/DataflowPlan/test_join_to_time_spine_node_with_offset_window__plan0.xml diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/DataflowPlan/test_join_to_time_spine_node_without_offset__plan0.xml b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/DataflowPlan/test_join_to_time_spine_node_without_offset__plan0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/DataflowPlan/test_join_to_time_spine_node_without_offset__plan0.xml rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/DataflowPlan/test_join_to_time_spine_node_without_offset__plan0.xml diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_combine_output_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_combine_output_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_combine_output_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_combine_output_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_combine_output_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_combine_output_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_combine_output_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_combine_output_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_compute_metrics_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_compute_metrics_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_compute_metrics_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_compute_metrics_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_compute_metrics_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_compute_metrics_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_compute_metrics_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_compute_metrics_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_compute_metrics_node_ratio_from_single_semantic_model__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_compute_metrics_node_ratio_from_single_semantic_model__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_compute_metrics_node_ratio_from_single_semantic_model__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_compute_metrics_node_ratio_from_single_semantic_model__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_compute_metrics_node_simple_expr__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_compute_metrics_node_simple_expr__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_compute_metrics_node_simple_expr__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_compute_metrics_node_simple_expr__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_compute_metrics_node_simple_expr__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_compute_metrics_node_simple_expr__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_compute_metrics_node_simple_expr__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_compute_metrics_node_simple_expr__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_constrain_time_range_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_constrain_time_range_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_constrain_time_range_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_constrain_time_range_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_constrain_time_range_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_constrain_time_range_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_constrain_time_range_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_constrain_time_range_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_dimension_with_joined_where_constraint__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_dimension_with_joined_where_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_dimension_with_joined_where_constraint__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_dimension_with_joined_where_constraint__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_dimension_with_joined_where_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_dimension_with_joined_where_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_dimension_with_joined_where_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_dimension_with_joined_where_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_dimensions_requiring_join__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_dimensions_requiring_join__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_dimensions_requiring_join__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_dimensions_requiring_join__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_dimensions_requiring_join__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_dimensions_requiring_join__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_dimensions_requiring_join__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_dimensions_requiring_join__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_filter_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_filter_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_filter_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_filter_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_filter_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_filter_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_filter_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_filter_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_filter_with_where_constraint_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_filter_with_where_constraint_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_filter_with_where_constraint_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_filter_with_where_constraint_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_filter_with_where_constraint_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_filter_with_where_constraint_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_filter_with_where_constraint_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_filter_with_where_constraint_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_join_to_time_spine_node_with_offset_to_grain__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_join_to_time_spine_node_with_offset_to_grain__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_join_to_time_spine_node_with_offset_to_grain__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_join_to_time_spine_node_with_offset_to_grain__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_join_to_time_spine_node_with_offset_to_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_join_to_time_spine_node_with_offset_to_grain__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_join_to_time_spine_node_with_offset_to_grain__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_join_to_time_spine_node_with_offset_to_grain__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_join_to_time_spine_node_with_offset_window__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_join_to_time_spine_node_with_offset_window__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_join_to_time_spine_node_with_offset_window__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_join_to_time_spine_node_with_offset_window__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_join_to_time_spine_node_with_offset_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_join_to_time_spine_node_with_offset_window__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_join_to_time_spine_node_with_offset_window__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_join_to_time_spine_node_with_offset_window__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_join_to_time_spine_node_without_offset__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_join_to_time_spine_node_without_offset__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_join_to_time_spine_node_without_offset__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_join_to_time_spine_node_without_offset__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_join_to_time_spine_node_without_offset__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_join_to_time_spine_node_without_offset__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_join_to_time_spine_node_without_offset__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_join_to_time_spine_node_without_offset__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_measure_aggregation_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_measure_aggregation_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_measure_aggregation_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_measure_aggregation_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_measure_aggregation_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_measure_aggregation_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_measure_aggregation_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_measure_aggregation_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_multi_join_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_multi_join_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_multi_join_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_multi_join_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_multi_join_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_multi_join_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_multi_join_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_multi_join_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_order_by_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_order_by_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_order_by_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_order_by_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_order_by_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_order_by_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_order_by_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_order_by_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_semi_additive_join_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_semi_additive_join_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_semi_additive_join_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_semi_additive_join_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_semi_additive_join_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_semi_additive_join_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_semi_additive_join_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_semi_additive_join_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_semi_additive_join_node_with_grouping__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_semi_additive_join_node_with_grouping__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_semi_additive_join_node_with_grouping__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_semi_additive_join_node_with_grouping__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_semi_additive_join_node_with_grouping__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_semi_additive_join_node_with_grouping__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_semi_additive_join_node_with_grouping__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_semi_additive_join_node_with_grouping__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_semi_additive_join_node_with_queried_group_by__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_semi_additive_join_node_with_queried_group_by__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_semi_additive_join_node_with_queried_group_by__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_semi_additive_join_node_with_queried_group_by__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_semi_additive_join_node_with_queried_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_semi_additive_join_node_with_queried_group_by__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_semi_additive_join_node_with_queried_group_by__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_semi_additive_join_node_with_queried_group_by__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_single_join_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_single_join_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_single_join_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_single_join_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_single_join_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_single_join_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_single_join_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_single_join_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_source_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_source_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_source_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_source_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_source_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_source_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_source_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/BigQuery/test_source_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_combine_output_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_combine_output_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_combine_output_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_combine_output_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_combine_output_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_combine_output_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_combine_output_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_combine_output_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_compute_metrics_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_compute_metrics_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_compute_metrics_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_compute_metrics_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_compute_metrics_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_compute_metrics_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_compute_metrics_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_compute_metrics_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_compute_metrics_node_ratio_from_single_semantic_model__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_compute_metrics_node_ratio_from_single_semantic_model__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_compute_metrics_node_ratio_from_single_semantic_model__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_compute_metrics_node_ratio_from_single_semantic_model__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_compute_metrics_node_simple_expr__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_compute_metrics_node_simple_expr__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_compute_metrics_node_simple_expr__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_compute_metrics_node_simple_expr__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_compute_metrics_node_simple_expr__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_compute_metrics_node_simple_expr__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_compute_metrics_node_simple_expr__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_compute_metrics_node_simple_expr__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_constrain_time_range_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_constrain_time_range_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_constrain_time_range_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_constrain_time_range_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_constrain_time_range_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_constrain_time_range_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_constrain_time_range_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_constrain_time_range_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_dimension_with_joined_where_constraint__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_dimension_with_joined_where_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_dimension_with_joined_where_constraint__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_dimension_with_joined_where_constraint__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_dimension_with_joined_where_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_dimension_with_joined_where_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_dimension_with_joined_where_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_dimension_with_joined_where_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_dimensions_requiring_join__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_dimensions_requiring_join__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_dimensions_requiring_join__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_dimensions_requiring_join__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_dimensions_requiring_join__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_dimensions_requiring_join__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_dimensions_requiring_join__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_dimensions_requiring_join__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_filter_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_filter_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_filter_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_filter_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_filter_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_filter_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_filter_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_filter_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_filter_with_where_constraint_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_filter_with_where_constraint_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_filter_with_where_constraint_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_filter_with_where_constraint_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_filter_with_where_constraint_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_filter_with_where_constraint_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_filter_with_where_constraint_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_filter_with_where_constraint_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_join_to_time_spine_node_with_offset_to_grain__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_join_to_time_spine_node_with_offset_to_grain__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_join_to_time_spine_node_with_offset_to_grain__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_join_to_time_spine_node_with_offset_to_grain__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_join_to_time_spine_node_with_offset_to_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_join_to_time_spine_node_with_offset_to_grain__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_join_to_time_spine_node_with_offset_to_grain__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_join_to_time_spine_node_with_offset_to_grain__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_join_to_time_spine_node_with_offset_window__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_join_to_time_spine_node_with_offset_window__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_join_to_time_spine_node_with_offset_window__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_join_to_time_spine_node_with_offset_window__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_join_to_time_spine_node_with_offset_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_join_to_time_spine_node_with_offset_window__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_join_to_time_spine_node_with_offset_window__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_join_to_time_spine_node_with_offset_window__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_join_to_time_spine_node_without_offset__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_join_to_time_spine_node_without_offset__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_join_to_time_spine_node_without_offset__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_join_to_time_spine_node_without_offset__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_join_to_time_spine_node_without_offset__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_join_to_time_spine_node_without_offset__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_join_to_time_spine_node_without_offset__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_join_to_time_spine_node_without_offset__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_measure_aggregation_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_measure_aggregation_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_measure_aggregation_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_measure_aggregation_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_measure_aggregation_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_measure_aggregation_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_measure_aggregation_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_measure_aggregation_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_multi_join_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_multi_join_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_multi_join_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_multi_join_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_multi_join_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_multi_join_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_multi_join_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_multi_join_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_order_by_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_order_by_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_order_by_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_order_by_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_order_by_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_order_by_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_order_by_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_order_by_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_semi_additive_join_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_semi_additive_join_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_semi_additive_join_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_semi_additive_join_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_semi_additive_join_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_semi_additive_join_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_semi_additive_join_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_semi_additive_join_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_semi_additive_join_node_with_grouping__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_semi_additive_join_node_with_grouping__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_semi_additive_join_node_with_grouping__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_semi_additive_join_node_with_grouping__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_semi_additive_join_node_with_grouping__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_semi_additive_join_node_with_grouping__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_semi_additive_join_node_with_grouping__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_semi_additive_join_node_with_grouping__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_semi_additive_join_node_with_queried_group_by__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_semi_additive_join_node_with_queried_group_by__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_semi_additive_join_node_with_queried_group_by__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_semi_additive_join_node_with_queried_group_by__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_semi_additive_join_node_with_queried_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_semi_additive_join_node_with_queried_group_by__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_semi_additive_join_node_with_queried_group_by__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_semi_additive_join_node_with_queried_group_by__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_single_join_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_single_join_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_single_join_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_single_join_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_single_join_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_single_join_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_single_join_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_single_join_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_source_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_source_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_source_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_source_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_source_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_source_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_source_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Databricks/test_source_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_combine_output_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_combine_output_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_combine_output_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_combine_output_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_combine_output_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_combine_output_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_combine_output_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_combine_output_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_compute_metrics_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_compute_metrics_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_compute_metrics_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_compute_metrics_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_compute_metrics_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_compute_metrics_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_compute_metrics_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_compute_metrics_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_compute_metrics_node_ratio_from_single_semantic_model__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_compute_metrics_node_ratio_from_single_semantic_model__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_compute_metrics_node_ratio_from_single_semantic_model__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_compute_metrics_node_ratio_from_single_semantic_model__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_compute_metrics_node_simple_expr__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_compute_metrics_node_simple_expr__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_compute_metrics_node_simple_expr__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_compute_metrics_node_simple_expr__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_compute_metrics_node_simple_expr__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_compute_metrics_node_simple_expr__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_compute_metrics_node_simple_expr__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_compute_metrics_node_simple_expr__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_constrain_time_range_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_constrain_time_range_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_constrain_time_range_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_constrain_time_range_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_constrain_time_range_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_constrain_time_range_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_constrain_time_range_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_constrain_time_range_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_dimension_with_joined_where_constraint__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_dimension_with_joined_where_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_dimension_with_joined_where_constraint__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_dimension_with_joined_where_constraint__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_dimension_with_joined_where_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_dimension_with_joined_where_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_dimension_with_joined_where_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_dimension_with_joined_where_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_dimensions_requiring_join__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_dimensions_requiring_join__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_dimensions_requiring_join__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_dimensions_requiring_join__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_dimensions_requiring_join__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_dimensions_requiring_join__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_dimensions_requiring_join__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_dimensions_requiring_join__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_filter_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_filter_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_filter_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_filter_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_filter_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_filter_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_filter_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_filter_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_filter_with_where_constraint_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_filter_with_where_constraint_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_filter_with_where_constraint_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_filter_with_where_constraint_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_filter_with_where_constraint_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_filter_with_where_constraint_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_filter_with_where_constraint_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_filter_with_where_constraint_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_join_to_time_spine_node_with_offset_to_grain__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_join_to_time_spine_node_with_offset_to_grain__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_join_to_time_spine_node_with_offset_to_grain__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_join_to_time_spine_node_with_offset_to_grain__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_join_to_time_spine_node_with_offset_to_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_join_to_time_spine_node_with_offset_to_grain__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_join_to_time_spine_node_with_offset_to_grain__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_join_to_time_spine_node_with_offset_to_grain__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_join_to_time_spine_node_with_offset_window__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_join_to_time_spine_node_with_offset_window__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_join_to_time_spine_node_with_offset_window__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_join_to_time_spine_node_with_offset_window__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_join_to_time_spine_node_with_offset_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_join_to_time_spine_node_with_offset_window__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_join_to_time_spine_node_with_offset_window__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_join_to_time_spine_node_with_offset_window__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_join_to_time_spine_node_without_offset__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_join_to_time_spine_node_without_offset__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_join_to_time_spine_node_without_offset__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_join_to_time_spine_node_without_offset__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_join_to_time_spine_node_without_offset__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_join_to_time_spine_node_without_offset__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_join_to_time_spine_node_without_offset__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_join_to_time_spine_node_without_offset__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_measure_aggregation_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_measure_aggregation_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_measure_aggregation_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_measure_aggregation_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_measure_aggregation_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_measure_aggregation_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_measure_aggregation_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_measure_aggregation_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_multi_join_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_multi_join_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_multi_join_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_multi_join_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_multi_join_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_multi_join_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_multi_join_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_multi_join_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_order_by_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_order_by_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_order_by_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_order_by_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_order_by_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_order_by_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_order_by_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_order_by_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_semi_additive_join_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_semi_additive_join_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_semi_additive_join_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_semi_additive_join_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_semi_additive_join_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_semi_additive_join_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_semi_additive_join_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_semi_additive_join_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_semi_additive_join_node_with_grouping__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_semi_additive_join_node_with_grouping__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_semi_additive_join_node_with_grouping__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_semi_additive_join_node_with_grouping__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_semi_additive_join_node_with_grouping__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_semi_additive_join_node_with_grouping__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_semi_additive_join_node_with_grouping__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_semi_additive_join_node_with_grouping__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_semi_additive_join_node_with_queried_group_by__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_semi_additive_join_node_with_queried_group_by__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_semi_additive_join_node_with_queried_group_by__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_semi_additive_join_node_with_queried_group_by__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_semi_additive_join_node_with_queried_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_semi_additive_join_node_with_queried_group_by__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_semi_additive_join_node_with_queried_group_by__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_semi_additive_join_node_with_queried_group_by__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_single_join_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_single_join_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_single_join_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_single_join_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_single_join_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_single_join_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_single_join_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_single_join_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_source_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_source_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_source_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_source_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_source_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_source_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_source_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/DuckDB/test_source_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_combine_output_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_combine_output_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_combine_output_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_combine_output_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_combine_output_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_combine_output_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_combine_output_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_combine_output_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_compute_metrics_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_compute_metrics_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_compute_metrics_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_compute_metrics_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_compute_metrics_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_compute_metrics_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_compute_metrics_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_compute_metrics_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_compute_metrics_node_ratio_from_single_semantic_model__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_compute_metrics_node_ratio_from_single_semantic_model__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_compute_metrics_node_ratio_from_single_semantic_model__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_compute_metrics_node_ratio_from_single_semantic_model__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_compute_metrics_node_simple_expr__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_compute_metrics_node_simple_expr__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_compute_metrics_node_simple_expr__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_compute_metrics_node_simple_expr__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_compute_metrics_node_simple_expr__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_compute_metrics_node_simple_expr__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_compute_metrics_node_simple_expr__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_compute_metrics_node_simple_expr__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_constrain_time_range_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_constrain_time_range_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_constrain_time_range_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_constrain_time_range_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_constrain_time_range_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_constrain_time_range_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_constrain_time_range_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_constrain_time_range_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_dimension_with_joined_where_constraint__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_dimension_with_joined_where_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_dimension_with_joined_where_constraint__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_dimension_with_joined_where_constraint__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_dimension_with_joined_where_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_dimension_with_joined_where_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_dimension_with_joined_where_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_dimension_with_joined_where_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_dimensions_requiring_join__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_dimensions_requiring_join__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_dimensions_requiring_join__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_dimensions_requiring_join__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_dimensions_requiring_join__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_dimensions_requiring_join__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_dimensions_requiring_join__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_dimensions_requiring_join__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_filter_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_filter_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_filter_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_filter_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_filter_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_filter_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_filter_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_filter_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_filter_with_where_constraint_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_filter_with_where_constraint_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_filter_with_where_constraint_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_filter_with_where_constraint_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_filter_with_where_constraint_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_filter_with_where_constraint_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_filter_with_where_constraint_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_filter_with_where_constraint_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_join_to_time_spine_node_with_offset_to_grain__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_join_to_time_spine_node_with_offset_to_grain__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_join_to_time_spine_node_with_offset_to_grain__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_join_to_time_spine_node_with_offset_to_grain__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_join_to_time_spine_node_with_offset_to_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_join_to_time_spine_node_with_offset_to_grain__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_join_to_time_spine_node_with_offset_to_grain__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_join_to_time_spine_node_with_offset_to_grain__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_join_to_time_spine_node_with_offset_window__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_join_to_time_spine_node_with_offset_window__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_join_to_time_spine_node_with_offset_window__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_join_to_time_spine_node_with_offset_window__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_join_to_time_spine_node_with_offset_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_join_to_time_spine_node_with_offset_window__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_join_to_time_spine_node_with_offset_window__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_join_to_time_spine_node_with_offset_window__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_join_to_time_spine_node_without_offset__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_join_to_time_spine_node_without_offset__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_join_to_time_spine_node_without_offset__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_join_to_time_spine_node_without_offset__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_join_to_time_spine_node_without_offset__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_join_to_time_spine_node_without_offset__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_join_to_time_spine_node_without_offset__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_join_to_time_spine_node_without_offset__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_measure_aggregation_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_measure_aggregation_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_measure_aggregation_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_measure_aggregation_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_measure_aggregation_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_measure_aggregation_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_measure_aggregation_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_measure_aggregation_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_multi_join_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_multi_join_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_multi_join_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_multi_join_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_multi_join_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_multi_join_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_multi_join_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_multi_join_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_order_by_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_order_by_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_order_by_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_order_by_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_order_by_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_order_by_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_order_by_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_order_by_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_semi_additive_join_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_semi_additive_join_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_semi_additive_join_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_semi_additive_join_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_semi_additive_join_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_semi_additive_join_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_semi_additive_join_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_semi_additive_join_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_semi_additive_join_node_with_grouping__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_semi_additive_join_node_with_grouping__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_semi_additive_join_node_with_grouping__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_semi_additive_join_node_with_grouping__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_semi_additive_join_node_with_grouping__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_semi_additive_join_node_with_grouping__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_semi_additive_join_node_with_grouping__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_semi_additive_join_node_with_grouping__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_semi_additive_join_node_with_queried_group_by__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_semi_additive_join_node_with_queried_group_by__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_semi_additive_join_node_with_queried_group_by__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_semi_additive_join_node_with_queried_group_by__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_semi_additive_join_node_with_queried_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_semi_additive_join_node_with_queried_group_by__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_semi_additive_join_node_with_queried_group_by__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_semi_additive_join_node_with_queried_group_by__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_single_join_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_single_join_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_single_join_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_single_join_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_single_join_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_single_join_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_single_join_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_single_join_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_source_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_source_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_source_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_source_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_source_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_source_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_source_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Postgres/test_source_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_combine_output_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_combine_output_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_combine_output_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_combine_output_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_combine_output_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_combine_output_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_combine_output_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_combine_output_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_compute_metrics_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_compute_metrics_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_compute_metrics_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_compute_metrics_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_compute_metrics_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_compute_metrics_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_compute_metrics_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_compute_metrics_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_compute_metrics_node_ratio_from_single_semantic_model__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_compute_metrics_node_ratio_from_single_semantic_model__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_compute_metrics_node_ratio_from_single_semantic_model__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_compute_metrics_node_ratio_from_single_semantic_model__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_compute_metrics_node_simple_expr__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_compute_metrics_node_simple_expr__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_compute_metrics_node_simple_expr__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_compute_metrics_node_simple_expr__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_compute_metrics_node_simple_expr__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_compute_metrics_node_simple_expr__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_compute_metrics_node_simple_expr__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_compute_metrics_node_simple_expr__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_constrain_time_range_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_constrain_time_range_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_constrain_time_range_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_constrain_time_range_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_constrain_time_range_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_constrain_time_range_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_constrain_time_range_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_constrain_time_range_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_dimension_with_joined_where_constraint__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_dimension_with_joined_where_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_dimension_with_joined_where_constraint__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_dimension_with_joined_where_constraint__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_dimension_with_joined_where_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_dimension_with_joined_where_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_dimension_with_joined_where_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_dimension_with_joined_where_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_dimensions_requiring_join__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_dimensions_requiring_join__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_dimensions_requiring_join__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_dimensions_requiring_join__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_dimensions_requiring_join__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_dimensions_requiring_join__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_dimensions_requiring_join__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_dimensions_requiring_join__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_filter_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_filter_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_filter_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_filter_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_filter_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_filter_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_filter_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_filter_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_filter_with_where_constraint_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_filter_with_where_constraint_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_filter_with_where_constraint_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_filter_with_where_constraint_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_filter_with_where_constraint_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_filter_with_where_constraint_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_filter_with_where_constraint_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_filter_with_where_constraint_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_join_to_time_spine_node_with_offset_to_grain__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_join_to_time_spine_node_with_offset_to_grain__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_join_to_time_spine_node_with_offset_to_grain__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_join_to_time_spine_node_with_offset_to_grain__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_join_to_time_spine_node_with_offset_to_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_join_to_time_spine_node_with_offset_to_grain__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_join_to_time_spine_node_with_offset_to_grain__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_join_to_time_spine_node_with_offset_to_grain__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_join_to_time_spine_node_with_offset_window__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_join_to_time_spine_node_with_offset_window__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_join_to_time_spine_node_with_offset_window__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_join_to_time_spine_node_with_offset_window__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_join_to_time_spine_node_with_offset_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_join_to_time_spine_node_with_offset_window__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_join_to_time_spine_node_with_offset_window__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_join_to_time_spine_node_with_offset_window__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_join_to_time_spine_node_without_offset__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_join_to_time_spine_node_without_offset__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_join_to_time_spine_node_without_offset__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_join_to_time_spine_node_without_offset__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_join_to_time_spine_node_without_offset__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_join_to_time_spine_node_without_offset__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_join_to_time_spine_node_without_offset__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_join_to_time_spine_node_without_offset__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_measure_aggregation_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_measure_aggregation_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_measure_aggregation_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_measure_aggregation_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_measure_aggregation_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_measure_aggregation_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_measure_aggregation_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_measure_aggregation_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_multi_join_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_multi_join_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_multi_join_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_multi_join_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_multi_join_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_multi_join_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_multi_join_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_multi_join_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_order_by_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_order_by_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_order_by_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_order_by_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_order_by_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_order_by_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_order_by_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_order_by_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_semi_additive_join_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_semi_additive_join_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_semi_additive_join_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_semi_additive_join_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_semi_additive_join_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_semi_additive_join_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_semi_additive_join_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_semi_additive_join_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_semi_additive_join_node_with_grouping__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_semi_additive_join_node_with_grouping__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_semi_additive_join_node_with_grouping__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_semi_additive_join_node_with_grouping__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_semi_additive_join_node_with_grouping__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_semi_additive_join_node_with_grouping__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_semi_additive_join_node_with_grouping__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_semi_additive_join_node_with_grouping__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_semi_additive_join_node_with_queried_group_by__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_semi_additive_join_node_with_queried_group_by__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_semi_additive_join_node_with_queried_group_by__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_semi_additive_join_node_with_queried_group_by__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_semi_additive_join_node_with_queried_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_semi_additive_join_node_with_queried_group_by__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_semi_additive_join_node_with_queried_group_by__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_semi_additive_join_node_with_queried_group_by__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_single_join_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_single_join_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_single_join_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_single_join_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_single_join_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_single_join_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_single_join_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_single_join_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_source_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_source_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_source_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_source_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_source_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_source_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_source_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Redshift/test_source_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_combine_output_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_combine_output_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_combine_output_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_combine_output_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_combine_output_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_combine_output_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_combine_output_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_combine_output_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_compute_metrics_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_compute_metrics_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_compute_metrics_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_compute_metrics_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_compute_metrics_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_compute_metrics_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_compute_metrics_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_compute_metrics_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_compute_metrics_node_ratio_from_single_semantic_model__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_compute_metrics_node_ratio_from_single_semantic_model__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_compute_metrics_node_ratio_from_single_semantic_model__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_compute_metrics_node_ratio_from_single_semantic_model__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_compute_metrics_node_simple_expr__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_compute_metrics_node_simple_expr__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_compute_metrics_node_simple_expr__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_compute_metrics_node_simple_expr__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_compute_metrics_node_simple_expr__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_compute_metrics_node_simple_expr__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_compute_metrics_node_simple_expr__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_compute_metrics_node_simple_expr__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_constrain_time_range_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_constrain_time_range_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_constrain_time_range_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_constrain_time_range_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_constrain_time_range_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_constrain_time_range_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_constrain_time_range_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_constrain_time_range_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_dimension_with_joined_where_constraint__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_dimension_with_joined_where_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_dimension_with_joined_where_constraint__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_dimension_with_joined_where_constraint__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_dimension_with_joined_where_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_dimension_with_joined_where_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_dimension_with_joined_where_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_dimension_with_joined_where_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_dimensions_requiring_join__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_dimensions_requiring_join__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_dimensions_requiring_join__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_dimensions_requiring_join__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_dimensions_requiring_join__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_dimensions_requiring_join__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_dimensions_requiring_join__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_dimensions_requiring_join__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_filter_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_filter_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_filter_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_filter_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_filter_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_filter_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_filter_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_filter_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_filter_with_where_constraint_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_filter_with_where_constraint_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_filter_with_where_constraint_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_filter_with_where_constraint_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_filter_with_where_constraint_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_filter_with_where_constraint_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_filter_with_where_constraint_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_filter_with_where_constraint_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_join_to_time_spine_node_with_offset_to_grain__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_join_to_time_spine_node_with_offset_to_grain__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_join_to_time_spine_node_with_offset_to_grain__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_join_to_time_spine_node_with_offset_to_grain__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_join_to_time_spine_node_with_offset_to_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_join_to_time_spine_node_with_offset_to_grain__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_join_to_time_spine_node_with_offset_to_grain__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_join_to_time_spine_node_with_offset_to_grain__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_join_to_time_spine_node_with_offset_window__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_join_to_time_spine_node_with_offset_window__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_join_to_time_spine_node_with_offset_window__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_join_to_time_spine_node_with_offset_window__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_join_to_time_spine_node_with_offset_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_join_to_time_spine_node_with_offset_window__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_join_to_time_spine_node_with_offset_window__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_join_to_time_spine_node_with_offset_window__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_join_to_time_spine_node_without_offset__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_join_to_time_spine_node_without_offset__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_join_to_time_spine_node_without_offset__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_join_to_time_spine_node_without_offset__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_join_to_time_spine_node_without_offset__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_join_to_time_spine_node_without_offset__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_join_to_time_spine_node_without_offset__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_join_to_time_spine_node_without_offset__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_measure_aggregation_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_measure_aggregation_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_measure_aggregation_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_measure_aggregation_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_measure_aggregation_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_measure_aggregation_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_measure_aggregation_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_measure_aggregation_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_multi_join_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_multi_join_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_multi_join_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_multi_join_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_multi_join_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_multi_join_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_multi_join_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_multi_join_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_order_by_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_order_by_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_order_by_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_order_by_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_order_by_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_order_by_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_order_by_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_order_by_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_semi_additive_join_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_semi_additive_join_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_semi_additive_join_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_semi_additive_join_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_semi_additive_join_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_semi_additive_join_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_semi_additive_join_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_semi_additive_join_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_semi_additive_join_node_with_grouping__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_semi_additive_join_node_with_grouping__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_semi_additive_join_node_with_grouping__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_semi_additive_join_node_with_grouping__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_semi_additive_join_node_with_grouping__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_semi_additive_join_node_with_grouping__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_semi_additive_join_node_with_grouping__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_semi_additive_join_node_with_grouping__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_semi_additive_join_node_with_queried_group_by__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_semi_additive_join_node_with_queried_group_by__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_semi_additive_join_node_with_queried_group_by__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_semi_additive_join_node_with_queried_group_by__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_semi_additive_join_node_with_queried_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_semi_additive_join_node_with_queried_group_by__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_semi_additive_join_node_with_queried_group_by__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_semi_additive_join_node_with_queried_group_by__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_single_join_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_single_join_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_single_join_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_single_join_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_single_join_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_single_join_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_single_join_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_single_join_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_source_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_source_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_source_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_source_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_source_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_source_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_source_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Snowflake/test_source_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_combine_output_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_combine_output_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_combine_output_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_combine_output_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_combine_output_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_combine_output_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_combine_output_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_combine_output_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_compute_metrics_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_compute_metrics_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_compute_metrics_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_compute_metrics_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_compute_metrics_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_compute_metrics_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_compute_metrics_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_compute_metrics_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_compute_metrics_node_ratio_from_single_semantic_model__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_compute_metrics_node_ratio_from_single_semantic_model__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_compute_metrics_node_ratio_from_single_semantic_model__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_compute_metrics_node_ratio_from_single_semantic_model__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_compute_metrics_node_simple_expr__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_compute_metrics_node_simple_expr__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_compute_metrics_node_simple_expr__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_compute_metrics_node_simple_expr__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_compute_metrics_node_simple_expr__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_compute_metrics_node_simple_expr__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_compute_metrics_node_simple_expr__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_compute_metrics_node_simple_expr__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_constrain_time_range_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_constrain_time_range_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_constrain_time_range_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_constrain_time_range_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_constrain_time_range_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_constrain_time_range_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_constrain_time_range_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_constrain_time_range_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_dimension_with_joined_where_constraint__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_dimension_with_joined_where_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_dimension_with_joined_where_constraint__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_dimension_with_joined_where_constraint__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_dimension_with_joined_where_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_dimension_with_joined_where_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_dimension_with_joined_where_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_dimension_with_joined_where_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_dimensions_requiring_join__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_dimensions_requiring_join__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_dimensions_requiring_join__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_dimensions_requiring_join__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_dimensions_requiring_join__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_dimensions_requiring_join__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_dimensions_requiring_join__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_dimensions_requiring_join__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_filter_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_filter_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_filter_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_filter_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_filter_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_filter_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_filter_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_filter_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_filter_with_where_constraint_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_filter_with_where_constraint_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_filter_with_where_constraint_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_filter_with_where_constraint_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_filter_with_where_constraint_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_filter_with_where_constraint_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_filter_with_where_constraint_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_filter_with_where_constraint_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_join_to_time_spine_node_with_offset_to_grain__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_join_to_time_spine_node_with_offset_to_grain__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_join_to_time_spine_node_with_offset_to_grain__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_join_to_time_spine_node_with_offset_to_grain__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_join_to_time_spine_node_with_offset_to_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_join_to_time_spine_node_with_offset_to_grain__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_join_to_time_spine_node_with_offset_to_grain__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_join_to_time_spine_node_with_offset_to_grain__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_join_to_time_spine_node_with_offset_window__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_join_to_time_spine_node_with_offset_window__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_join_to_time_spine_node_with_offset_window__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_join_to_time_spine_node_with_offset_window__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_join_to_time_spine_node_with_offset_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_join_to_time_spine_node_with_offset_window__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_join_to_time_spine_node_with_offset_window__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_join_to_time_spine_node_with_offset_window__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_join_to_time_spine_node_without_offset__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_join_to_time_spine_node_without_offset__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_join_to_time_spine_node_without_offset__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_join_to_time_spine_node_without_offset__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_join_to_time_spine_node_without_offset__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_join_to_time_spine_node_without_offset__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_join_to_time_spine_node_without_offset__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_join_to_time_spine_node_without_offset__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_measure_aggregation_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_measure_aggregation_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_measure_aggregation_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_measure_aggregation_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_measure_aggregation_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_measure_aggregation_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_measure_aggregation_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_measure_aggregation_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_multi_join_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_multi_join_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_multi_join_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_multi_join_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_multi_join_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_multi_join_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_multi_join_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_multi_join_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_order_by_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_order_by_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_order_by_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_order_by_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_order_by_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_order_by_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_order_by_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_order_by_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_semi_additive_join_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_semi_additive_join_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_semi_additive_join_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_semi_additive_join_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_semi_additive_join_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_semi_additive_join_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_semi_additive_join_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_semi_additive_join_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_semi_additive_join_node_with_grouping__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_semi_additive_join_node_with_grouping__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_semi_additive_join_node_with_grouping__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_semi_additive_join_node_with_grouping__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_semi_additive_join_node_with_grouping__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_semi_additive_join_node_with_grouping__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_semi_additive_join_node_with_grouping__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_semi_additive_join_node_with_grouping__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_semi_additive_join_node_with_queried_group_by__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_semi_additive_join_node_with_queried_group_by__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_semi_additive_join_node_with_queried_group_by__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_semi_additive_join_node_with_queried_group_by__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_semi_additive_join_node_with_queried_group_by__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_semi_additive_join_node_with_queried_group_by__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_semi_additive_join_node_with_queried_group_by__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_semi_additive_join_node_with_queried_group_by__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_single_join_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_single_join_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_single_join_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_single_join_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_single_join_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_single_join_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_single_join_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_single_join_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_source_node__plan0.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_source_node__plan0.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_source_node__plan0.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_source_node__plan0.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_source_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_source_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_source_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/Trino/test_source_node__plan0_optimized.sql diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_combine_output_node__plan0.xml b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_combine_output_node__plan0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_combine_output_node__plan0.xml rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_combine_output_node__plan0.xml diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_compute_metrics_node__plan0.xml b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_compute_metrics_node__plan0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_compute_metrics_node__plan0.xml rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_compute_metrics_node__plan0.xml diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.xml b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.xml rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_compute_metrics_node_ratio_from_multiple_semantic_models__plan0.xml diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.xml b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.xml rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_compute_metrics_node_ratio_from_single_semantic_model__plan0.xml diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_compute_metrics_node_simple_expr__plan0.xml b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_compute_metrics_node_simple_expr__plan0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_compute_metrics_node_simple_expr__plan0.xml rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_compute_metrics_node_simple_expr__plan0.xml diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_constrain_time_range_node__plan0.xml b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_constrain_time_range_node__plan0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_constrain_time_range_node__plan0.xml rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_constrain_time_range_node__plan0.xml diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_dimension_with_joined_where_constraint__plan0.xml b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_dimension_with_joined_where_constraint__plan0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_dimension_with_joined_where_constraint__plan0.xml rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_dimension_with_joined_where_constraint__plan0.xml diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_dimensions_requiring_join__plan0.xml b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_dimensions_requiring_join__plan0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_dimensions_requiring_join__plan0.xml rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_dimensions_requiring_join__plan0.xml diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_filter_node__plan0.xml b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_filter_node__plan0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_filter_node__plan0.xml rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_filter_node__plan0.xml diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_filter_with_where_constraint_node__plan0.xml b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_filter_with_where_constraint_node__plan0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_filter_with_where_constraint_node__plan0.xml rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_filter_with_where_constraint_node__plan0.xml diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_join_to_time_spine_node_with_offset_to_grain__plan0.xml b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_join_to_time_spine_node_with_offset_to_grain__plan0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_join_to_time_spine_node_with_offset_to_grain__plan0.xml rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_join_to_time_spine_node_with_offset_to_grain__plan0.xml diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_join_to_time_spine_node_with_offset_window__plan0.xml b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_join_to_time_spine_node_with_offset_window__plan0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_join_to_time_spine_node_with_offset_window__plan0.xml rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_join_to_time_spine_node_with_offset_window__plan0.xml diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_join_to_time_spine_node_without_offset__plan0.xml b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_join_to_time_spine_node_without_offset__plan0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_join_to_time_spine_node_without_offset__plan0.xml rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_join_to_time_spine_node_without_offset__plan0.xml diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_measure_aggregation_node__plan0.xml b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_measure_aggregation_node__plan0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_measure_aggregation_node__plan0.xml rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_measure_aggregation_node__plan0.xml diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_multi_join_node__plan0.xml b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_multi_join_node__plan0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_multi_join_node__plan0.xml rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_multi_join_node__plan0.xml diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_order_by_node__plan0.xml b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_order_by_node__plan0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_order_by_node__plan0.xml rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_order_by_node__plan0.xml diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_semi_additive_join_node__plan0.xml b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_semi_additive_join_node__plan0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_semi_additive_join_node__plan0.xml rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_semi_additive_join_node__plan0.xml diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_semi_additive_join_node_with_grouping__plan0.xml b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_semi_additive_join_node_with_grouping__plan0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_semi_additive_join_node_with_grouping__plan0.xml rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_semi_additive_join_node_with_grouping__plan0.xml diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_semi_additive_join_node_with_queried_group_by__plan0.xml b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_semi_additive_join_node_with_queried_group_by__plan0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_semi_additive_join_node_with_queried_group_by__plan0.xml rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_semi_additive_join_node_with_queried_group_by__plan0.xml diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_single_join_node__plan0.xml b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_single_join_node__plan0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_single_join_node__plan0.xml rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_single_join_node__plan0.xml diff --git a/tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_source_node__plan0.xml b/tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_source_node__plan0.xml similarity index 100% rename from tests/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_source_node__plan0.xml rename to tests_metricflow/snapshots/test_dataflow_to_sql_plan.py/SqlQueryPlan/test_source_node__plan0.xml diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_time_offset_metric_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_time_offset_metric_with_time_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_time_offset_metric_with_time_constraint__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_time_offset_metric_with_time_constraint__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_time_offset_metric_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_time_offset_metric_with_time_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_time_offset_metric_with_time_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_time_offset_metric_with_time_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_month_dimension_and_offset_window__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_month_dimension_and_offset_window__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_month_dimension_and_offset_window__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_month_dimension_and_offset_window__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_month_dimension_and_offset_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_month_dimension_and_offset_window__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_month_dimension_and_offset_window__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_month_dimension_and_offset_window__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_to_grain__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_to_grain__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_to_grain__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_to_grain__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_to_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_to_grain__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_to_grain__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_to_grain__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_to_grain_and_granularity__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_to_grain_and_granularity__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_to_grain_and_granularity__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_to_grain_and_granularity__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_to_grain_and_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_to_grain_and_granularity__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_to_grain_and_granularity__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_to_grain_and_granularity__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_window__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_window__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_window__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_window__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_window__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_window__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_window__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_window_and_granularity__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_window_and_granularity__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_window_and_granularity__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_window_and_granularity__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_window_and_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_window_and_granularity__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_window_and_granularity__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_window_and_granularity__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_window_and_offset_to_grain__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_window_and_offset_to_grain__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_window_and_offset_to_grain__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_window_and_offset_to_grain__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_window_and_offset_to_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_window_and_offset_to_grain__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_window_and_offset_to_grain__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_window_and_offset_to_grain__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_window_and_time_filter__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_window_and_time_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_window_and_time_filter__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_window_and_time_filter__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_window_and_time_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_window_and_time_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_window_and_time_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_metric_with_offset_window_and_time_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_offset_cumulative_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_offset_cumulative_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_offset_cumulative_metric__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_offset_cumulative_metric__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_offset_cumulative_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_offset_cumulative_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_offset_cumulative_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_offset_cumulative_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_offset_metric_with_agg_time_dim__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_offset_metric_with_agg_time_dim__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_offset_metric_with_agg_time_dim__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_offset_metric_with_agg_time_dim__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_offset_metric_with_agg_time_dim__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_offset_metric_with_agg_time_dim__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_offset_metric_with_agg_time_dim__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_offset_metric_with_agg_time_dim__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_offset_metric_with_one_input_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_offset_metric_with_one_input_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_offset_metric_with_one_input_metric__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_offset_metric_with_one_input_metric__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_offset_metric_with_one_input_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_offset_metric_with_one_input_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_offset_metric_with_one_input_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_derived_offset_metric_with_one_input_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_multi_metric_fill_null__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_multi_metric_fill_null__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_multi_metric_fill_null__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_multi_metric_fill_null__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_multi_metric_fill_null__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_multi_metric_fill_null__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_multi_metric_fill_null__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_multi_metric_fill_null__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_derived_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_derived_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_derived_metric__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_derived_metric__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_derived_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_derived_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_derived_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_derived_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_fill_nulls_without_time_spine__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_fill_nulls_without_time_spine__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_fill_nulls_without_time_spine__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_fill_nulls_without_time_spine__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_fill_nulls_without_time_spine__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_fill_nulls_without_time_spine__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_fill_nulls_without_time_spine__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_fill_nulls_without_time_spine__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_fill_nulls_without_time_spine_multi_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_fill_nulls_without_time_spine_multi_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_fill_nulls_without_time_spine_multi_metric__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_fill_nulls_without_time_spine_multi_metric__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_fill_nulls_without_time_spine_multi_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_fill_nulls_without_time_spine_multi_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_fill_nulls_without_time_spine_multi_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_fill_nulls_without_time_spine_multi_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_filters__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_filters__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_filters__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_filters__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_filters__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_filters__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_filters__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_filters__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_offsets__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_offsets__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_offsets__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_offsets__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_offsets__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_offsets__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_offsets__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_offsets__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_offsets_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_offsets_with_time_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_offsets_with_time_constraint__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_offsets_with_time_constraint__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_offsets_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_offsets_with_time_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_offsets_with_time_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_offsets_with_time_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_offsets_with_where_constraint__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_offsets_with_where_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_offsets_with_where_constraint__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_offsets_with_where_constraint__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_offsets_with_where_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_offsets_with_where_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_offsets_with_where_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_nested_offsets_with_where_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_to_grain_metric_multiple_granularities__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_to_grain_metric_multiple_granularities__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_to_grain_metric_multiple_granularities__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_to_grain_metric_multiple_granularities__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_to_grain_metric_multiple_granularities__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_to_grain_metric_multiple_granularities__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_to_grain_metric_multiple_granularities__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_to_grain_metric_multiple_granularities__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_to_grain_with_agg_time_dim__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_to_grain_with_agg_time_dim__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_to_grain_with_agg_time_dim__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_to_grain_with_agg_time_dim__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_to_grain_with_agg_time_dim__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_to_grain_with_agg_time_dim__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_to_grain_with_agg_time_dim__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_to_grain_with_agg_time_dim__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_window_metric_filter_and_query_have_different_granularities__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_window_metric_filter_and_query_have_different_granularities__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_window_metric_filter_and_query_have_different_granularities__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_window_metric_filter_and_query_have_different_granularities__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_window_metric_filter_and_query_have_different_granularities__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_window_metric_filter_and_query_have_different_granularities__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_window_metric_filter_and_query_have_different_granularities__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_window_metric_filter_and_query_have_different_granularities__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_window_metric_multiple_granularities__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_window_metric_multiple_granularities__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_window_metric_multiple_granularities__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_window_metric_multiple_granularities__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_window_metric_multiple_granularities__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_window_metric_multiple_granularities__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_window_metric_multiple_granularities__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_window_metric_multiple_granularities__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_window_with_agg_time_dim__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_window_with_agg_time_dim__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_window_with_agg_time_dim__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_window_with_agg_time_dim__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_window_with_agg_time_dim__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_window_with_agg_time_dim__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_window_with_agg_time_dim__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_offset_window_with_agg_time_dim__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_time_offset_metric_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_time_offset_metric_with_time_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_time_offset_metric_with_time_constraint__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_time_offset_metric_with_time_constraint__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_time_offset_metric_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_time_offset_metric_with_time_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_time_offset_metric_with_time_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/BigQuery/test_time_offset_metric_with_time_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_time_offset_metric_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_time_offset_metric_with_time_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_time_offset_metric_with_time_constraint__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_time_offset_metric_with_time_constraint__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_time_offset_metric_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_time_offset_metric_with_time_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_time_offset_metric_with_time_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_cumulative_time_offset_metric_with_time_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_month_dimension_and_offset_window__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_month_dimension_and_offset_window__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_month_dimension_and_offset_window__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_month_dimension_and_offset_window__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_month_dimension_and_offset_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_month_dimension_and_offset_window__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_month_dimension_and_offset_window__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_month_dimension_and_offset_window__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_to_grain__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_to_grain__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_to_grain__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_to_grain__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_to_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_to_grain__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_to_grain__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_to_grain__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_to_grain_and_granularity__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_to_grain_and_granularity__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_to_grain_and_granularity__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_to_grain_and_granularity__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_to_grain_and_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_to_grain_and_granularity__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_to_grain_and_granularity__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_to_grain_and_granularity__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_window__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_window__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_window__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_window__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_window__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_window__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_window__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_window_and_granularity__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_window_and_granularity__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_window_and_granularity__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_window_and_granularity__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_window_and_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_window_and_granularity__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_window_and_granularity__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_window_and_granularity__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_window_and_offset_to_grain__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_window_and_offset_to_grain__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_window_and_offset_to_grain__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_window_and_offset_to_grain__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_window_and_offset_to_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_window_and_offset_to_grain__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_window_and_offset_to_grain__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_window_and_offset_to_grain__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_window_and_time_filter__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_window_and_time_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_window_and_time_filter__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_window_and_time_filter__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_window_and_time_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_window_and_time_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_window_and_time_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_metric_with_offset_window_and_time_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_offset_cumulative_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_offset_cumulative_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_offset_cumulative_metric__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_offset_cumulative_metric__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_offset_cumulative_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_offset_cumulative_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_offset_cumulative_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_offset_cumulative_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_offset_metric_with_agg_time_dim__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_offset_metric_with_agg_time_dim__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_offset_metric_with_agg_time_dim__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_offset_metric_with_agg_time_dim__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_offset_metric_with_agg_time_dim__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_offset_metric_with_agg_time_dim__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_offset_metric_with_agg_time_dim__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_offset_metric_with_agg_time_dim__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_offset_metric_with_one_input_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_offset_metric_with_one_input_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_offset_metric_with_one_input_metric__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_offset_metric_with_one_input_metric__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_offset_metric_with_one_input_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_offset_metric_with_one_input_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_offset_metric_with_one_input_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_derived_offset_metric_with_one_input_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_multi_metric_fill_null__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_multi_metric_fill_null__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_multi_metric_fill_null__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_multi_metric_fill_null__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_multi_metric_fill_null__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_multi_metric_fill_null__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_multi_metric_fill_null__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_multi_metric_fill_null__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_derived_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_derived_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_derived_metric__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_derived_metric__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_derived_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_derived_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_derived_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_derived_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_fill_nulls_without_time_spine__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_fill_nulls_without_time_spine__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_fill_nulls_without_time_spine__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_fill_nulls_without_time_spine__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_fill_nulls_without_time_spine__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_fill_nulls_without_time_spine__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_fill_nulls_without_time_spine__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_fill_nulls_without_time_spine__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_fill_nulls_without_time_spine_multi_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_fill_nulls_without_time_spine_multi_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_fill_nulls_without_time_spine_multi_metric__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_fill_nulls_without_time_spine_multi_metric__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_fill_nulls_without_time_spine_multi_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_fill_nulls_without_time_spine_multi_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_fill_nulls_without_time_spine_multi_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_fill_nulls_without_time_spine_multi_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_filters__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_filters__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_filters__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_filters__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_filters__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_filters__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_filters__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_filters__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_offsets__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_offsets__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_offsets__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_offsets__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_offsets__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_offsets__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_offsets__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_offsets__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_offsets_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_offsets_with_time_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_offsets_with_time_constraint__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_offsets_with_time_constraint__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_offsets_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_offsets_with_time_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_offsets_with_time_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_offsets_with_time_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_offsets_with_where_constraint__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_offsets_with_where_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_offsets_with_where_constraint__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_offsets_with_where_constraint__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_offsets_with_where_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_offsets_with_where_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_offsets_with_where_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_nested_offsets_with_where_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_to_grain_metric_multiple_granularities__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_to_grain_metric_multiple_granularities__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_to_grain_metric_multiple_granularities__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_to_grain_metric_multiple_granularities__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_to_grain_metric_multiple_granularities__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_to_grain_metric_multiple_granularities__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_to_grain_metric_multiple_granularities__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_to_grain_metric_multiple_granularities__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_to_grain_with_agg_time_dim__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_to_grain_with_agg_time_dim__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_to_grain_with_agg_time_dim__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_to_grain_with_agg_time_dim__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_to_grain_with_agg_time_dim__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_to_grain_with_agg_time_dim__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_to_grain_with_agg_time_dim__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_to_grain_with_agg_time_dim__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_window_metric_filter_and_query_have_different_granularities__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_window_metric_filter_and_query_have_different_granularities__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_window_metric_filter_and_query_have_different_granularities__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_window_metric_filter_and_query_have_different_granularities__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_window_metric_filter_and_query_have_different_granularities__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_window_metric_filter_and_query_have_different_granularities__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_window_metric_filter_and_query_have_different_granularities__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_window_metric_filter_and_query_have_different_granularities__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_window_metric_multiple_granularities__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_window_metric_multiple_granularities__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_window_metric_multiple_granularities__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_window_metric_multiple_granularities__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_window_metric_multiple_granularities__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_window_metric_multiple_granularities__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_window_metric_multiple_granularities__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_window_metric_multiple_granularities__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_window_with_agg_time_dim__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_window_with_agg_time_dim__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_window_with_agg_time_dim__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_window_with_agg_time_dim__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_window_with_agg_time_dim__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_window_with_agg_time_dim__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_window_with_agg_time_dim__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_offset_window_with_agg_time_dim__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_time_offset_metric_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_time_offset_metric_with_time_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_time_offset_metric_with_time_constraint__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_time_offset_metric_with_time_constraint__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_time_offset_metric_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_time_offset_metric_with_time_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_time_offset_metric_with_time_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Databricks/test_time_offset_metric_with_time_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_time_offset_metric_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_time_offset_metric_with_time_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_time_offset_metric_with_time_constraint__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_time_offset_metric_with_time_constraint__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_time_offset_metric_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_time_offset_metric_with_time_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_time_offset_metric_with_time_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_time_offset_metric_with_time_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_month_dimension_and_offset_window__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_month_dimension_and_offset_window__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_month_dimension_and_offset_window__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_month_dimension_and_offset_window__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_month_dimension_and_offset_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_month_dimension_and_offset_window__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_month_dimension_and_offset_window__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_month_dimension_and_offset_window__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_to_grain__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_to_grain__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_to_grain__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_to_grain__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_to_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_to_grain__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_to_grain__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_to_grain__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_to_grain_and_granularity__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_to_grain_and_granularity__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_to_grain_and_granularity__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_to_grain_and_granularity__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_to_grain_and_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_to_grain_and_granularity__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_to_grain_and_granularity__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_to_grain_and_granularity__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_window__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_window__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_window__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_window__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_window__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_window__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_window__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_window_and_granularity__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_window_and_granularity__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_window_and_granularity__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_window_and_granularity__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_window_and_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_window_and_granularity__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_window_and_granularity__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_window_and_granularity__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_window_and_offset_to_grain__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_window_and_offset_to_grain__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_window_and_offset_to_grain__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_window_and_offset_to_grain__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_window_and_offset_to_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_window_and_offset_to_grain__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_window_and_offset_to_grain__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_window_and_offset_to_grain__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_window_and_time_filter__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_window_and_time_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_window_and_time_filter__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_window_and_time_filter__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_window_and_time_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_window_and_time_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_window_and_time_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_metric_with_offset_window_and_time_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_offset_cumulative_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_offset_cumulative_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_offset_cumulative_metric__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_offset_cumulative_metric__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_offset_cumulative_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_offset_cumulative_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_offset_cumulative_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_offset_cumulative_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_offset_metric_with_agg_time_dim__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_offset_metric_with_agg_time_dim__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_offset_metric_with_agg_time_dim__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_offset_metric_with_agg_time_dim__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_offset_metric_with_agg_time_dim__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_offset_metric_with_agg_time_dim__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_offset_metric_with_agg_time_dim__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_offset_metric_with_agg_time_dim__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_offset_metric_with_one_input_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_offset_metric_with_one_input_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_offset_metric_with_one_input_metric__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_offset_metric_with_one_input_metric__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_offset_metric_with_one_input_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_offset_metric_with_one_input_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_offset_metric_with_one_input_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_derived_offset_metric_with_one_input_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_multi_metric_fill_null__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_multi_metric_fill_null__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_multi_metric_fill_null__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_multi_metric_fill_null__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_multi_metric_fill_null__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_multi_metric_fill_null__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_multi_metric_fill_null__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_multi_metric_fill_null__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_derived_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_derived_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_derived_metric__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_derived_metric__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_derived_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_derived_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_derived_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_derived_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_fill_nulls_without_time_spine__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_fill_nulls_without_time_spine__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_fill_nulls_without_time_spine__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_fill_nulls_without_time_spine__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_fill_nulls_without_time_spine__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_fill_nulls_without_time_spine__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_fill_nulls_without_time_spine__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_fill_nulls_without_time_spine__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_fill_nulls_without_time_spine_multi_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_fill_nulls_without_time_spine_multi_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_fill_nulls_without_time_spine_multi_metric__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_fill_nulls_without_time_spine_multi_metric__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_fill_nulls_without_time_spine_multi_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_fill_nulls_without_time_spine_multi_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_fill_nulls_without_time_spine_multi_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_fill_nulls_without_time_spine_multi_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_filters__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_filters__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_filters__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_filters__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_filters__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_filters__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_filters__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_filters__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_offsets__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_offsets__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_offsets__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_offsets__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_offsets__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_offsets__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_offsets__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_offsets__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_offsets_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_offsets_with_time_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_offsets_with_time_constraint__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_offsets_with_time_constraint__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_offsets_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_offsets_with_time_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_offsets_with_time_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_offsets_with_time_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_offsets_with_where_constraint__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_offsets_with_where_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_offsets_with_where_constraint__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_offsets_with_where_constraint__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_offsets_with_where_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_offsets_with_where_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_offsets_with_where_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_nested_offsets_with_where_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_to_grain_metric_multiple_granularities__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_to_grain_metric_multiple_granularities__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_to_grain_metric_multiple_granularities__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_to_grain_metric_multiple_granularities__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_to_grain_metric_multiple_granularities__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_to_grain_metric_multiple_granularities__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_to_grain_metric_multiple_granularities__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_to_grain_metric_multiple_granularities__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_to_grain_with_agg_time_dim__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_to_grain_with_agg_time_dim__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_to_grain_with_agg_time_dim__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_to_grain_with_agg_time_dim__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_to_grain_with_agg_time_dim__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_to_grain_with_agg_time_dim__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_to_grain_with_agg_time_dim__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_to_grain_with_agg_time_dim__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_window_metric_filter_and_query_have_different_granularities__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_window_metric_filter_and_query_have_different_granularities__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_window_metric_filter_and_query_have_different_granularities__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_window_metric_filter_and_query_have_different_granularities__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_window_metric_filter_and_query_have_different_granularities__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_window_metric_filter_and_query_have_different_granularities__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_window_metric_filter_and_query_have_different_granularities__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_window_metric_filter_and_query_have_different_granularities__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_window_metric_multiple_granularities__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_window_metric_multiple_granularities__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_window_metric_multiple_granularities__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_window_metric_multiple_granularities__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_window_metric_multiple_granularities__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_window_metric_multiple_granularities__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_window_metric_multiple_granularities__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_window_metric_multiple_granularities__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_window_with_agg_time_dim__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_window_with_agg_time_dim__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_window_with_agg_time_dim__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_window_with_agg_time_dim__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_window_with_agg_time_dim__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_window_with_agg_time_dim__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_window_with_agg_time_dim__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_offset_window_with_agg_time_dim__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_time_offset_metric_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_time_offset_metric_with_time_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_time_offset_metric_with_time_constraint__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_time_offset_metric_with_time_constraint__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_time_offset_metric_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_time_offset_metric_with_time_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_time_offset_metric_with_time_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/DuckDB/test_time_offset_metric_with_time_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_time_offset_metric_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_time_offset_metric_with_time_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_time_offset_metric_with_time_constraint__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_time_offset_metric_with_time_constraint__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_time_offset_metric_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_time_offset_metric_with_time_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_time_offset_metric_with_time_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_cumulative_time_offset_metric_with_time_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_month_dimension_and_offset_window__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_month_dimension_and_offset_window__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_month_dimension_and_offset_window__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_month_dimension_and_offset_window__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_month_dimension_and_offset_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_month_dimension_and_offset_window__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_month_dimension_and_offset_window__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_month_dimension_and_offset_window__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_to_grain__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_to_grain__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_to_grain__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_to_grain__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_to_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_to_grain__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_to_grain__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_to_grain__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_to_grain_and_granularity__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_to_grain_and_granularity__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_to_grain_and_granularity__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_to_grain_and_granularity__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_to_grain_and_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_to_grain_and_granularity__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_to_grain_and_granularity__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_to_grain_and_granularity__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_window__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_window__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_window__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_window__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_window__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_window__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_window__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_window_and_granularity__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_window_and_granularity__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_window_and_granularity__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_window_and_granularity__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_window_and_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_window_and_granularity__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_window_and_granularity__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_window_and_granularity__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_window_and_offset_to_grain__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_window_and_offset_to_grain__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_window_and_offset_to_grain__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_window_and_offset_to_grain__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_window_and_offset_to_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_window_and_offset_to_grain__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_window_and_offset_to_grain__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_window_and_offset_to_grain__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_window_and_time_filter__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_window_and_time_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_window_and_time_filter__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_window_and_time_filter__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_window_and_time_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_window_and_time_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_window_and_time_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_metric_with_offset_window_and_time_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_offset_cumulative_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_offset_cumulative_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_offset_cumulative_metric__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_offset_cumulative_metric__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_offset_cumulative_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_offset_cumulative_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_offset_cumulative_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_offset_cumulative_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_offset_metric_with_agg_time_dim__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_offset_metric_with_agg_time_dim__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_offset_metric_with_agg_time_dim__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_offset_metric_with_agg_time_dim__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_offset_metric_with_agg_time_dim__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_offset_metric_with_agg_time_dim__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_offset_metric_with_agg_time_dim__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_offset_metric_with_agg_time_dim__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_offset_metric_with_one_input_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_offset_metric_with_one_input_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_offset_metric_with_one_input_metric__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_offset_metric_with_one_input_metric__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_offset_metric_with_one_input_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_offset_metric_with_one_input_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_offset_metric_with_one_input_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_derived_offset_metric_with_one_input_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_multi_metric_fill_null__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_multi_metric_fill_null__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_multi_metric_fill_null__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_multi_metric_fill_null__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_multi_metric_fill_null__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_multi_metric_fill_null__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_multi_metric_fill_null__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_multi_metric_fill_null__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_derived_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_derived_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_derived_metric__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_derived_metric__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_derived_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_derived_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_derived_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_derived_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_fill_nulls_without_time_spine__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_fill_nulls_without_time_spine__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_fill_nulls_without_time_spine__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_fill_nulls_without_time_spine__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_fill_nulls_without_time_spine__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_fill_nulls_without_time_spine__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_fill_nulls_without_time_spine__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_fill_nulls_without_time_spine__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_fill_nulls_without_time_spine_multi_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_fill_nulls_without_time_spine_multi_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_fill_nulls_without_time_spine_multi_metric__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_fill_nulls_without_time_spine_multi_metric__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_fill_nulls_without_time_spine_multi_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_fill_nulls_without_time_spine_multi_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_fill_nulls_without_time_spine_multi_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_fill_nulls_without_time_spine_multi_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_filters__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_filters__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_filters__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_filters__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_filters__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_filters__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_filters__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_filters__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_offsets__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_offsets__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_offsets__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_offsets__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_offsets__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_offsets__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_offsets__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_offsets__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_offsets_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_offsets_with_time_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_offsets_with_time_constraint__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_offsets_with_time_constraint__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_offsets_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_offsets_with_time_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_offsets_with_time_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_offsets_with_time_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_offsets_with_where_constraint__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_offsets_with_where_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_offsets_with_where_constraint__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_offsets_with_where_constraint__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_offsets_with_where_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_offsets_with_where_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_offsets_with_where_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_nested_offsets_with_where_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_to_grain_metric_multiple_granularities__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_to_grain_metric_multiple_granularities__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_to_grain_metric_multiple_granularities__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_to_grain_metric_multiple_granularities__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_to_grain_metric_multiple_granularities__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_to_grain_metric_multiple_granularities__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_to_grain_metric_multiple_granularities__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_to_grain_metric_multiple_granularities__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_to_grain_with_agg_time_dim__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_to_grain_with_agg_time_dim__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_to_grain_with_agg_time_dim__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_to_grain_with_agg_time_dim__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_to_grain_with_agg_time_dim__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_to_grain_with_agg_time_dim__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_to_grain_with_agg_time_dim__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_to_grain_with_agg_time_dim__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_window_metric_filter_and_query_have_different_granularities__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_window_metric_filter_and_query_have_different_granularities__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_window_metric_filter_and_query_have_different_granularities__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_window_metric_filter_and_query_have_different_granularities__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_window_metric_filter_and_query_have_different_granularities__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_window_metric_filter_and_query_have_different_granularities__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_window_metric_filter_and_query_have_different_granularities__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_window_metric_filter_and_query_have_different_granularities__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_window_metric_multiple_granularities__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_window_metric_multiple_granularities__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_window_metric_multiple_granularities__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_window_metric_multiple_granularities__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_window_metric_multiple_granularities__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_window_metric_multiple_granularities__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_window_metric_multiple_granularities__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_window_metric_multiple_granularities__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_window_with_agg_time_dim__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_window_with_agg_time_dim__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_window_with_agg_time_dim__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_window_with_agg_time_dim__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_window_with_agg_time_dim__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_window_with_agg_time_dim__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_window_with_agg_time_dim__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_offset_window_with_agg_time_dim__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_time_offset_metric_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_time_offset_metric_with_time_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_time_offset_metric_with_time_constraint__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_time_offset_metric_with_time_constraint__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_time_offset_metric_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_time_offset_metric_with_time_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_time_offset_metric_with_time_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Postgres/test_time_offset_metric_with_time_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_time_offset_metric_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_time_offset_metric_with_time_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_time_offset_metric_with_time_constraint__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_time_offset_metric_with_time_constraint__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_time_offset_metric_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_time_offset_metric_with_time_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_time_offset_metric_with_time_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_cumulative_time_offset_metric_with_time_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_month_dimension_and_offset_window__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_month_dimension_and_offset_window__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_month_dimension_and_offset_window__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_month_dimension_and_offset_window__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_month_dimension_and_offset_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_month_dimension_and_offset_window__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_month_dimension_and_offset_window__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_month_dimension_and_offset_window__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_to_grain__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_to_grain__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_to_grain__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_to_grain__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_to_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_to_grain__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_to_grain__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_to_grain__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_to_grain_and_granularity__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_to_grain_and_granularity__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_to_grain_and_granularity__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_to_grain_and_granularity__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_to_grain_and_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_to_grain_and_granularity__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_to_grain_and_granularity__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_to_grain_and_granularity__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_window__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_window__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_window__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_window__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_window__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_window__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_window__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_window_and_granularity__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_window_and_granularity__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_window_and_granularity__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_window_and_granularity__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_window_and_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_window_and_granularity__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_window_and_granularity__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_window_and_granularity__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_window_and_offset_to_grain__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_window_and_offset_to_grain__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_window_and_offset_to_grain__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_window_and_offset_to_grain__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_window_and_offset_to_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_window_and_offset_to_grain__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_window_and_offset_to_grain__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_window_and_offset_to_grain__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_window_and_time_filter__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_window_and_time_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_window_and_time_filter__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_window_and_time_filter__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_window_and_time_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_window_and_time_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_window_and_time_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_metric_with_offset_window_and_time_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_offset_cumulative_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_offset_cumulative_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_offset_cumulative_metric__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_offset_cumulative_metric__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_offset_cumulative_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_offset_cumulative_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_offset_cumulative_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_offset_cumulative_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_offset_metric_with_agg_time_dim__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_offset_metric_with_agg_time_dim__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_offset_metric_with_agg_time_dim__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_offset_metric_with_agg_time_dim__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_offset_metric_with_agg_time_dim__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_offset_metric_with_agg_time_dim__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_offset_metric_with_agg_time_dim__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_offset_metric_with_agg_time_dim__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_offset_metric_with_one_input_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_offset_metric_with_one_input_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_offset_metric_with_one_input_metric__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_offset_metric_with_one_input_metric__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_offset_metric_with_one_input_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_offset_metric_with_one_input_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_offset_metric_with_one_input_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_derived_offset_metric_with_one_input_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_multi_metric_fill_null__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_multi_metric_fill_null__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_multi_metric_fill_null__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_multi_metric_fill_null__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_multi_metric_fill_null__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_multi_metric_fill_null__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_multi_metric_fill_null__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_multi_metric_fill_null__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_derived_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_derived_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_derived_metric__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_derived_metric__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_derived_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_derived_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_derived_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_derived_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_fill_nulls_without_time_spine__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_fill_nulls_without_time_spine__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_fill_nulls_without_time_spine__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_fill_nulls_without_time_spine__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_fill_nulls_without_time_spine__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_fill_nulls_without_time_spine__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_fill_nulls_without_time_spine__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_fill_nulls_without_time_spine__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_fill_nulls_without_time_spine_multi_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_fill_nulls_without_time_spine_multi_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_fill_nulls_without_time_spine_multi_metric__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_fill_nulls_without_time_spine_multi_metric__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_fill_nulls_without_time_spine_multi_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_fill_nulls_without_time_spine_multi_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_fill_nulls_without_time_spine_multi_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_fill_nulls_without_time_spine_multi_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_filters__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_filters__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_filters__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_filters__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_filters__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_filters__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_filters__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_filters__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_offsets__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_offsets__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_offsets__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_offsets__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_offsets__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_offsets__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_offsets__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_offsets__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_offsets_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_offsets_with_time_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_offsets_with_time_constraint__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_offsets_with_time_constraint__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_offsets_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_offsets_with_time_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_offsets_with_time_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_offsets_with_time_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_offsets_with_where_constraint__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_offsets_with_where_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_offsets_with_where_constraint__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_offsets_with_where_constraint__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_offsets_with_where_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_offsets_with_where_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_offsets_with_where_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_nested_offsets_with_where_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_to_grain_metric_multiple_granularities__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_to_grain_metric_multiple_granularities__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_to_grain_metric_multiple_granularities__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_to_grain_metric_multiple_granularities__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_to_grain_metric_multiple_granularities__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_to_grain_metric_multiple_granularities__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_to_grain_metric_multiple_granularities__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_to_grain_metric_multiple_granularities__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_to_grain_with_agg_time_dim__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_to_grain_with_agg_time_dim__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_to_grain_with_agg_time_dim__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_to_grain_with_agg_time_dim__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_to_grain_with_agg_time_dim__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_to_grain_with_agg_time_dim__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_to_grain_with_agg_time_dim__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_to_grain_with_agg_time_dim__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_window_metric_filter_and_query_have_different_granularities__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_window_metric_filter_and_query_have_different_granularities__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_window_metric_filter_and_query_have_different_granularities__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_window_metric_filter_and_query_have_different_granularities__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_window_metric_filter_and_query_have_different_granularities__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_window_metric_filter_and_query_have_different_granularities__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_window_metric_filter_and_query_have_different_granularities__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_window_metric_filter_and_query_have_different_granularities__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_window_metric_multiple_granularities__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_window_metric_multiple_granularities__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_window_metric_multiple_granularities__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_window_metric_multiple_granularities__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_window_metric_multiple_granularities__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_window_metric_multiple_granularities__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_window_metric_multiple_granularities__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_window_metric_multiple_granularities__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_window_with_agg_time_dim__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_window_with_agg_time_dim__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_window_with_agg_time_dim__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_window_with_agg_time_dim__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_window_with_agg_time_dim__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_window_with_agg_time_dim__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_window_with_agg_time_dim__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_offset_window_with_agg_time_dim__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_time_offset_metric_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_time_offset_metric_with_time_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_time_offset_metric_with_time_constraint__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_time_offset_metric_with_time_constraint__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_time_offset_metric_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_time_offset_metric_with_time_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_time_offset_metric_with_time_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Redshift/test_time_offset_metric_with_time_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_time_offset_metric_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_time_offset_metric_with_time_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_time_offset_metric_with_time_constraint__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_time_offset_metric_with_time_constraint__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_time_offset_metric_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_time_offset_metric_with_time_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_time_offset_metric_with_time_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_time_offset_metric_with_time_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_month_dimension_and_offset_window__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_month_dimension_and_offset_window__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_month_dimension_and_offset_window__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_month_dimension_and_offset_window__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_month_dimension_and_offset_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_month_dimension_and_offset_window__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_month_dimension_and_offset_window__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_month_dimension_and_offset_window__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_to_grain__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_to_grain__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_to_grain__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_to_grain__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_to_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_to_grain__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_to_grain__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_to_grain__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_to_grain_and_granularity__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_to_grain_and_granularity__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_to_grain_and_granularity__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_to_grain_and_granularity__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_to_grain_and_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_to_grain_and_granularity__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_to_grain_and_granularity__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_to_grain_and_granularity__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_window__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_window__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_window__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_window__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_window__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_window__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_window__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_window_and_granularity__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_window_and_granularity__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_window_and_granularity__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_window_and_granularity__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_window_and_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_window_and_granularity__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_window_and_granularity__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_window_and_granularity__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_window_and_offset_to_grain__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_window_and_offset_to_grain__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_window_and_offset_to_grain__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_window_and_offset_to_grain__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_window_and_offset_to_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_window_and_offset_to_grain__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_window_and_offset_to_grain__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_window_and_offset_to_grain__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_window_and_time_filter__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_window_and_time_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_window_and_time_filter__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_window_and_time_filter__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_window_and_time_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_window_and_time_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_window_and_time_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_metric_with_offset_window_and_time_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_offset_cumulative_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_offset_cumulative_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_offset_cumulative_metric__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_offset_cumulative_metric__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_offset_cumulative_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_offset_cumulative_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_offset_cumulative_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_offset_cumulative_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_offset_metric_with_agg_time_dim__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_offset_metric_with_agg_time_dim__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_offset_metric_with_agg_time_dim__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_offset_metric_with_agg_time_dim__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_offset_metric_with_agg_time_dim__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_offset_metric_with_agg_time_dim__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_offset_metric_with_agg_time_dim__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_offset_metric_with_agg_time_dim__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_offset_metric_with_one_input_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_offset_metric_with_one_input_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_offset_metric_with_one_input_metric__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_offset_metric_with_one_input_metric__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_offset_metric_with_one_input_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_offset_metric_with_one_input_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_offset_metric_with_one_input_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_derived_offset_metric_with_one_input_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_multi_metric_fill_null__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_multi_metric_fill_null__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_multi_metric_fill_null__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_multi_metric_fill_null__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_multi_metric_fill_null__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_multi_metric_fill_null__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_multi_metric_fill_null__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_multi_metric_fill_null__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_derived_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_derived_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_derived_metric__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_derived_metric__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_derived_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_derived_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_derived_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_derived_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_fill_nulls_without_time_spine__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_fill_nulls_without_time_spine__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_fill_nulls_without_time_spine__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_fill_nulls_without_time_spine__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_fill_nulls_without_time_spine__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_fill_nulls_without_time_spine__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_fill_nulls_without_time_spine__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_fill_nulls_without_time_spine__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_fill_nulls_without_time_spine_multi_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_fill_nulls_without_time_spine_multi_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_fill_nulls_without_time_spine_multi_metric__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_fill_nulls_without_time_spine_multi_metric__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_fill_nulls_without_time_spine_multi_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_fill_nulls_without_time_spine_multi_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_fill_nulls_without_time_spine_multi_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_fill_nulls_without_time_spine_multi_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_filters__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_filters__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_filters__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_filters__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_filters__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_filters__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_filters__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_filters__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_offsets__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_offsets__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_offsets__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_offsets__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_offsets__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_offsets__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_offsets__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_offsets__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_offsets_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_offsets_with_time_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_offsets_with_time_constraint__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_offsets_with_time_constraint__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_offsets_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_offsets_with_time_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_offsets_with_time_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_offsets_with_time_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_offsets_with_where_constraint__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_offsets_with_where_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_offsets_with_where_constraint__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_offsets_with_where_constraint__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_offsets_with_where_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_offsets_with_where_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_offsets_with_where_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_nested_offsets_with_where_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_to_grain_metric_multiple_granularities__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_to_grain_metric_multiple_granularities__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_to_grain_metric_multiple_granularities__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_to_grain_metric_multiple_granularities__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_to_grain_metric_multiple_granularities__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_to_grain_metric_multiple_granularities__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_to_grain_metric_multiple_granularities__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_to_grain_metric_multiple_granularities__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_to_grain_with_agg_time_dim__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_to_grain_with_agg_time_dim__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_to_grain_with_agg_time_dim__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_to_grain_with_agg_time_dim__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_to_grain_with_agg_time_dim__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_to_grain_with_agg_time_dim__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_to_grain_with_agg_time_dim__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_to_grain_with_agg_time_dim__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_window_metric_filter_and_query_have_different_granularities__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_window_metric_filter_and_query_have_different_granularities__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_window_metric_filter_and_query_have_different_granularities__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_window_metric_filter_and_query_have_different_granularities__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_window_metric_filter_and_query_have_different_granularities__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_window_metric_filter_and_query_have_different_granularities__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_window_metric_filter_and_query_have_different_granularities__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_window_metric_filter_and_query_have_different_granularities__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_window_metric_multiple_granularities__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_window_metric_multiple_granularities__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_window_metric_multiple_granularities__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_window_metric_multiple_granularities__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_window_metric_multiple_granularities__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_window_metric_multiple_granularities__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_window_metric_multiple_granularities__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_window_metric_multiple_granularities__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_window_with_agg_time_dim__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_window_with_agg_time_dim__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_window_with_agg_time_dim__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_window_with_agg_time_dim__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_window_with_agg_time_dim__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_window_with_agg_time_dim__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_window_with_agg_time_dim__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_offset_window_with_agg_time_dim__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_time_offset_metric_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_time_offset_metric_with_time_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_time_offset_metric_with_time_constraint__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_time_offset_metric_with_time_constraint__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_time_offset_metric_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_time_offset_metric_with_time_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_time_offset_metric_with_time_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Snowflake/test_time_offset_metric_with_time_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_time_offset_metric_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_time_offset_metric_with_time_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_time_offset_metric_with_time_constraint__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_time_offset_metric_with_time_constraint__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_time_offset_metric_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_time_offset_metric_with_time_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_time_offset_metric_with_time_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_cumulative_time_offset_metric_with_time_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_month_dimension_and_offset_window__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_month_dimension_and_offset_window__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_month_dimension_and_offset_window__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_month_dimension_and_offset_window__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_month_dimension_and_offset_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_month_dimension_and_offset_window__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_month_dimension_and_offset_window__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_month_dimension_and_offset_window__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_to_grain__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_to_grain__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_to_grain__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_to_grain__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_to_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_to_grain__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_to_grain__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_to_grain__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_to_grain_and_granularity__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_to_grain_and_granularity__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_to_grain_and_granularity__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_to_grain_and_granularity__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_to_grain_and_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_to_grain_and_granularity__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_to_grain_and_granularity__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_to_grain_and_granularity__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_window__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_window__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_window__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_window__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_window__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_window__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_window__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_window__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_window_and_granularity__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_window_and_granularity__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_window_and_granularity__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_window_and_granularity__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_window_and_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_window_and_granularity__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_window_and_granularity__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_window_and_granularity__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_window_and_offset_to_grain__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_window_and_offset_to_grain__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_window_and_offset_to_grain__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_window_and_offset_to_grain__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_window_and_offset_to_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_window_and_offset_to_grain__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_window_and_offset_to_grain__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_window_and_offset_to_grain__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_window_and_offset_to_grain_and_granularity__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_window_and_time_filter__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_window_and_time_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_window_and_time_filter__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_window_and_time_filter__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_window_and_time_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_window_and_time_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_window_and_time_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_metric_with_offset_window_and_time_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_offset_cumulative_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_offset_cumulative_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_offset_cumulative_metric__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_offset_cumulative_metric__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_offset_cumulative_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_offset_cumulative_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_offset_cumulative_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_offset_cumulative_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_offset_metric_with_agg_time_dim__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_offset_metric_with_agg_time_dim__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_offset_metric_with_agg_time_dim__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_offset_metric_with_agg_time_dim__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_offset_metric_with_agg_time_dim__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_offset_metric_with_agg_time_dim__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_offset_metric_with_agg_time_dim__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_offset_metric_with_agg_time_dim__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_offset_metric_with_one_input_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_offset_metric_with_one_input_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_offset_metric_with_one_input_metric__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_offset_metric_with_one_input_metric__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_offset_metric_with_one_input_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_offset_metric_with_one_input_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_offset_metric_with_one_input_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_derived_offset_metric_with_one_input_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_multi_metric_fill_null__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_multi_metric_fill_null__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_multi_metric_fill_null__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_multi_metric_fill_null__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_multi_metric_fill_null__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_multi_metric_fill_null__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_multi_metric_fill_null__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_multi_metric_fill_null__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_derived_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_derived_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_derived_metric__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_derived_metric__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_derived_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_derived_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_derived_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_derived_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_derived_metric_offset_with_joined_where_constraint_not_selected__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_derived_metric_with_offset_multiple_input_metrics__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_fill_nulls_without_time_spine__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_fill_nulls_without_time_spine__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_fill_nulls_without_time_spine__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_fill_nulls_without_time_spine__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_fill_nulls_without_time_spine__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_fill_nulls_without_time_spine__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_fill_nulls_without_time_spine__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_fill_nulls_without_time_spine__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_fill_nulls_without_time_spine_multi_metric__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_fill_nulls_without_time_spine_multi_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_fill_nulls_without_time_spine_multi_metric__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_fill_nulls_without_time_spine_multi_metric__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_fill_nulls_without_time_spine_multi_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_fill_nulls_without_time_spine_multi_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_fill_nulls_without_time_spine_multi_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_fill_nulls_without_time_spine_multi_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_filters__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_filters__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_filters__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_filters__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_filters__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_filters__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_filters__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_filters__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_offsets__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_offsets__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_offsets__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_offsets__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_offsets__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_offsets__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_offsets__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_offsets__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_offsets_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_offsets_with_time_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_offsets_with_time_constraint__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_offsets_with_time_constraint__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_offsets_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_offsets_with_time_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_offsets_with_time_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_offsets_with_time_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_offsets_with_where_constraint__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_offsets_with_where_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_offsets_with_where_constraint__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_offsets_with_where_constraint__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_offsets_with_where_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_offsets_with_where_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_offsets_with_where_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_nested_offsets_with_where_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_to_grain_metric_filter_and_query_have_different_granularities__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_to_grain_metric_multiple_granularities__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_to_grain_metric_multiple_granularities__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_to_grain_metric_multiple_granularities__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_to_grain_metric_multiple_granularities__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_to_grain_metric_multiple_granularities__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_to_grain_metric_multiple_granularities__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_to_grain_metric_multiple_granularities__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_to_grain_metric_multiple_granularities__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_to_grain_with_agg_time_dim__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_to_grain_with_agg_time_dim__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_to_grain_with_agg_time_dim__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_to_grain_with_agg_time_dim__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_to_grain_with_agg_time_dim__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_to_grain_with_agg_time_dim__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_to_grain_with_agg_time_dim__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_to_grain_with_agg_time_dim__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_window_metric_filter_and_query_have_different_granularities__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_window_metric_filter_and_query_have_different_granularities__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_window_metric_filter_and_query_have_different_granularities__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_window_metric_filter_and_query_have_different_granularities__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_window_metric_filter_and_query_have_different_granularities__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_window_metric_filter_and_query_have_different_granularities__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_window_metric_filter_and_query_have_different_granularities__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_window_metric_filter_and_query_have_different_granularities__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_window_metric_multiple_granularities__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_window_metric_multiple_granularities__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_window_metric_multiple_granularities__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_window_metric_multiple_granularities__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_window_metric_multiple_granularities__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_window_metric_multiple_granularities__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_window_metric_multiple_granularities__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_window_metric_multiple_granularities__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_window_with_agg_time_dim__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_window_with_agg_time_dim__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_window_with_agg_time_dim__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_window_with_agg_time_dim__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_window_with_agg_time_dim__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_window_with_agg_time_dim__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_window_with_agg_time_dim__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_offset_window_with_agg_time_dim__plan0_optimized.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_time_offset_metric_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_time_offset_metric_with_time_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_time_offset_metric_with_time_constraint__plan0.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_time_offset_metric_with_time_constraint__plan0.sql diff --git a/tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_time_offset_metric_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_time_offset_metric_with_time_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_time_offset_metric_with_time_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_derived_metric_rendering.py/SqlQueryPlan/Trino/test_time_offset_metric_with_time_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/BigQuery/test_dimension_values_with_a_join_and_a_filter__plan0.sql b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/BigQuery/test_dimension_values_with_a_join_and_a_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/BigQuery/test_dimension_values_with_a_join_and_a_filter__plan0.sql rename to tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/BigQuery/test_dimension_values_with_a_join_and_a_filter__plan0.sql diff --git a/tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/BigQuery/test_dimension_values_with_a_join_and_a_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/BigQuery/test_dimension_values_with_a_join_and_a_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/BigQuery/test_dimension_values_with_a_join_and_a_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/BigQuery/test_dimension_values_with_a_join_and_a_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/BigQuery/test_dimensions_requiring_join__plan0.sql b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/BigQuery/test_dimensions_requiring_join__plan0.sql similarity index 100% rename from tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/BigQuery/test_dimensions_requiring_join__plan0.sql rename to tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/BigQuery/test_dimensions_requiring_join__plan0.sql diff --git a/tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/BigQuery/test_dimensions_requiring_join__plan0_optimized.sql b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/BigQuery/test_dimensions_requiring_join__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/BigQuery/test_dimensions_requiring_join__plan0_optimized.sql rename to tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/BigQuery/test_dimensions_requiring_join__plan0_optimized.sql diff --git a/tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Databricks/test_dimension_values_with_a_join_and_a_filter__plan0.sql b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Databricks/test_dimension_values_with_a_join_and_a_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Databricks/test_dimension_values_with_a_join_and_a_filter__plan0.sql rename to tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Databricks/test_dimension_values_with_a_join_and_a_filter__plan0.sql diff --git a/tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Databricks/test_dimension_values_with_a_join_and_a_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Databricks/test_dimension_values_with_a_join_and_a_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Databricks/test_dimension_values_with_a_join_and_a_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Databricks/test_dimension_values_with_a_join_and_a_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Databricks/test_dimensions_requiring_join__plan0.sql b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Databricks/test_dimensions_requiring_join__plan0.sql similarity index 100% rename from tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Databricks/test_dimensions_requiring_join__plan0.sql rename to tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Databricks/test_dimensions_requiring_join__plan0.sql diff --git a/tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Databricks/test_dimensions_requiring_join__plan0_optimized.sql b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Databricks/test_dimensions_requiring_join__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Databricks/test_dimensions_requiring_join__plan0_optimized.sql rename to tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Databricks/test_dimensions_requiring_join__plan0_optimized.sql diff --git a/tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/DuckDB/test_dimension_values_with_a_join_and_a_filter__plan0.sql b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/DuckDB/test_dimension_values_with_a_join_and_a_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/DuckDB/test_dimension_values_with_a_join_and_a_filter__plan0.sql rename to tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/DuckDB/test_dimension_values_with_a_join_and_a_filter__plan0.sql diff --git a/tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/DuckDB/test_dimension_values_with_a_join_and_a_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/DuckDB/test_dimension_values_with_a_join_and_a_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/DuckDB/test_dimension_values_with_a_join_and_a_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/DuckDB/test_dimension_values_with_a_join_and_a_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/DuckDB/test_dimensions_requiring_join__plan0.sql b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/DuckDB/test_dimensions_requiring_join__plan0.sql similarity index 100% rename from tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/DuckDB/test_dimensions_requiring_join__plan0.sql rename to tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/DuckDB/test_dimensions_requiring_join__plan0.sql diff --git a/tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/DuckDB/test_dimensions_requiring_join__plan0_optimized.sql b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/DuckDB/test_dimensions_requiring_join__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/DuckDB/test_dimensions_requiring_join__plan0_optimized.sql rename to tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/DuckDB/test_dimensions_requiring_join__plan0_optimized.sql diff --git a/tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Postgres/test_dimension_values_with_a_join_and_a_filter__plan0.sql b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Postgres/test_dimension_values_with_a_join_and_a_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Postgres/test_dimension_values_with_a_join_and_a_filter__plan0.sql rename to tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Postgres/test_dimension_values_with_a_join_and_a_filter__plan0.sql diff --git a/tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Postgres/test_dimension_values_with_a_join_and_a_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Postgres/test_dimension_values_with_a_join_and_a_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Postgres/test_dimension_values_with_a_join_and_a_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Postgres/test_dimension_values_with_a_join_and_a_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Postgres/test_dimensions_requiring_join__plan0.sql b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Postgres/test_dimensions_requiring_join__plan0.sql similarity index 100% rename from tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Postgres/test_dimensions_requiring_join__plan0.sql rename to tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Postgres/test_dimensions_requiring_join__plan0.sql diff --git a/tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Postgres/test_dimensions_requiring_join__plan0_optimized.sql b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Postgres/test_dimensions_requiring_join__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Postgres/test_dimensions_requiring_join__plan0_optimized.sql rename to tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Postgres/test_dimensions_requiring_join__plan0_optimized.sql diff --git a/tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Redshift/test_dimension_values_with_a_join_and_a_filter__plan0.sql b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Redshift/test_dimension_values_with_a_join_and_a_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Redshift/test_dimension_values_with_a_join_and_a_filter__plan0.sql rename to tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Redshift/test_dimension_values_with_a_join_and_a_filter__plan0.sql diff --git a/tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Redshift/test_dimension_values_with_a_join_and_a_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Redshift/test_dimension_values_with_a_join_and_a_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Redshift/test_dimension_values_with_a_join_and_a_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Redshift/test_dimension_values_with_a_join_and_a_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Redshift/test_dimensions_requiring_join__plan0.sql b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Redshift/test_dimensions_requiring_join__plan0.sql similarity index 100% rename from tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Redshift/test_dimensions_requiring_join__plan0.sql rename to tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Redshift/test_dimensions_requiring_join__plan0.sql diff --git a/tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Redshift/test_dimensions_requiring_join__plan0_optimized.sql b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Redshift/test_dimensions_requiring_join__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Redshift/test_dimensions_requiring_join__plan0_optimized.sql rename to tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Redshift/test_dimensions_requiring_join__plan0_optimized.sql diff --git a/tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Snowflake/test_dimension_values_with_a_join_and_a_filter__plan0.sql b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Snowflake/test_dimension_values_with_a_join_and_a_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Snowflake/test_dimension_values_with_a_join_and_a_filter__plan0.sql rename to tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Snowflake/test_dimension_values_with_a_join_and_a_filter__plan0.sql diff --git a/tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Snowflake/test_dimension_values_with_a_join_and_a_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Snowflake/test_dimension_values_with_a_join_and_a_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Snowflake/test_dimension_values_with_a_join_and_a_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Snowflake/test_dimension_values_with_a_join_and_a_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Snowflake/test_dimensions_requiring_join__plan0.sql b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Snowflake/test_dimensions_requiring_join__plan0.sql similarity index 100% rename from tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Snowflake/test_dimensions_requiring_join__plan0.sql rename to tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Snowflake/test_dimensions_requiring_join__plan0.sql diff --git a/tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Snowflake/test_dimensions_requiring_join__plan0_optimized.sql b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Snowflake/test_dimensions_requiring_join__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Snowflake/test_dimensions_requiring_join__plan0_optimized.sql rename to tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Snowflake/test_dimensions_requiring_join__plan0_optimized.sql diff --git a/tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Trino/test_dimension_values_with_a_join_and_a_filter__plan0.sql b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Trino/test_dimension_values_with_a_join_and_a_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Trino/test_dimension_values_with_a_join_and_a_filter__plan0.sql rename to tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Trino/test_dimension_values_with_a_join_and_a_filter__plan0.sql diff --git a/tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Trino/test_dimension_values_with_a_join_and_a_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Trino/test_dimension_values_with_a_join_and_a_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Trino/test_dimension_values_with_a_join_and_a_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Trino/test_dimension_values_with_a_join_and_a_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Trino/test_dimensions_requiring_join__plan0.sql b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Trino/test_dimensions_requiring_join__plan0.sql similarity index 100% rename from tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Trino/test_dimensions_requiring_join__plan0.sql rename to tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Trino/test_dimensions_requiring_join__plan0.sql diff --git a/tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Trino/test_dimensions_requiring_join__plan0_optimized.sql b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Trino/test_dimensions_requiring_join__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Trino/test_dimensions_requiring_join__plan0_optimized.sql rename to tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/Trino/test_dimensions_requiring_join__plan0_optimized.sql diff --git a/tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/test_dimension_values_with_a_join_and_a_filter__plan0.xml b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/test_dimension_values_with_a_join_and_a_filter__plan0.xml similarity index 100% rename from tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/test_dimension_values_with_a_join_and_a_filter__plan0.xml rename to tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/test_dimension_values_with_a_join_and_a_filter__plan0.xml diff --git a/tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/test_dimensions_requiring_join__plan0.xml b/tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/test_dimensions_requiring_join__plan0.xml similarity index 100% rename from tests/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/test_dimensions_requiring_join__plan0.xml rename to tests_metricflow/snapshots/test_distinct_values_to_sql.py/SqlQueryPlan/test_dimensions_requiring_join__plan0.xml diff --git a/tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/BigQuery/test_approximate_continuous_percentile_expr__plan0.sql b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/BigQuery/test_approximate_continuous_percentile_expr__plan0.sql similarity index 100% rename from tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/BigQuery/test_approximate_continuous_percentile_expr__plan0.sql rename to tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/BigQuery/test_approximate_continuous_percentile_expr__plan0.sql diff --git a/tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/BigQuery/test_cast_to_timestamp__plan0.sql b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/BigQuery/test_cast_to_timestamp__plan0.sql similarity index 100% rename from tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/BigQuery/test_cast_to_timestamp__plan0.sql rename to tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/BigQuery/test_cast_to_timestamp__plan0.sql diff --git a/tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/BigQuery/test_generate_uuid__plan0.sql b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/BigQuery/test_generate_uuid__plan0.sql similarity index 100% rename from tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/BigQuery/test_generate_uuid__plan0.sql rename to tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/BigQuery/test_generate_uuid__plan0.sql diff --git a/tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Databricks/test_approximate_discrete_percentile_expr__plan0.sql b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Databricks/test_approximate_discrete_percentile_expr__plan0.sql similarity index 100% rename from tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Databricks/test_approximate_discrete_percentile_expr__plan0.sql rename to tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Databricks/test_approximate_discrete_percentile_expr__plan0.sql diff --git a/tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Databricks/test_cast_to_timestamp__plan0.sql b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Databricks/test_cast_to_timestamp__plan0.sql similarity index 100% rename from tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Databricks/test_cast_to_timestamp__plan0.sql rename to tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Databricks/test_cast_to_timestamp__plan0.sql diff --git a/tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Databricks/test_continuous_percentile_expr__plan0.sql b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Databricks/test_continuous_percentile_expr__plan0.sql similarity index 100% rename from tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Databricks/test_continuous_percentile_expr__plan0.sql rename to tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Databricks/test_continuous_percentile_expr__plan0.sql diff --git a/tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Databricks/test_generate_uuid__plan0.sql b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Databricks/test_generate_uuid__plan0.sql similarity index 100% rename from tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Databricks/test_generate_uuid__plan0.sql rename to tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Databricks/test_generate_uuid__plan0.sql diff --git a/tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/DuckDB/test_approximate_continuous_percentile_expr__plan0.sql b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/DuckDB/test_approximate_continuous_percentile_expr__plan0.sql similarity index 100% rename from tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/DuckDB/test_approximate_continuous_percentile_expr__plan0.sql rename to tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/DuckDB/test_approximate_continuous_percentile_expr__plan0.sql diff --git a/tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/DuckDB/test_cast_to_timestamp__plan0.sql b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/DuckDB/test_cast_to_timestamp__plan0.sql similarity index 100% rename from tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/DuckDB/test_cast_to_timestamp__plan0.sql rename to tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/DuckDB/test_cast_to_timestamp__plan0.sql diff --git a/tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/DuckDB/test_continuous_percentile_expr__plan0.sql b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/DuckDB/test_continuous_percentile_expr__plan0.sql similarity index 100% rename from tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/DuckDB/test_continuous_percentile_expr__plan0.sql rename to tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/DuckDB/test_continuous_percentile_expr__plan0.sql diff --git a/tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/DuckDB/test_discrete_percentile_expr__plan0.sql b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/DuckDB/test_discrete_percentile_expr__plan0.sql similarity index 100% rename from tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/DuckDB/test_discrete_percentile_expr__plan0.sql rename to tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/DuckDB/test_discrete_percentile_expr__plan0.sql diff --git a/tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/DuckDB/test_generate_uuid__plan0.sql b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/DuckDB/test_generate_uuid__plan0.sql similarity index 100% rename from tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/DuckDB/test_generate_uuid__plan0.sql rename to tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/DuckDB/test_generate_uuid__plan0.sql diff --git a/tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Postgres/test_cast_to_timestamp__plan0.sql b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Postgres/test_cast_to_timestamp__plan0.sql similarity index 100% rename from tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Postgres/test_cast_to_timestamp__plan0.sql rename to tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Postgres/test_cast_to_timestamp__plan0.sql diff --git a/tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Postgres/test_continuous_percentile_expr__plan0.sql b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Postgres/test_continuous_percentile_expr__plan0.sql similarity index 100% rename from tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Postgres/test_continuous_percentile_expr__plan0.sql rename to tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Postgres/test_continuous_percentile_expr__plan0.sql diff --git a/tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Postgres/test_discrete_percentile_expr__plan0.sql b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Postgres/test_discrete_percentile_expr__plan0.sql similarity index 100% rename from tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Postgres/test_discrete_percentile_expr__plan0.sql rename to tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Postgres/test_discrete_percentile_expr__plan0.sql diff --git a/tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Postgres/test_generate_uuid__plan0.sql b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Postgres/test_generate_uuid__plan0.sql similarity index 100% rename from tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Postgres/test_generate_uuid__plan0.sql rename to tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Postgres/test_generate_uuid__plan0.sql diff --git a/tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Redshift/test_approximate_discrete_percentile_expr__plan0.sql b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Redshift/test_approximate_discrete_percentile_expr__plan0.sql similarity index 100% rename from tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Redshift/test_approximate_discrete_percentile_expr__plan0.sql rename to tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Redshift/test_approximate_discrete_percentile_expr__plan0.sql diff --git a/tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Redshift/test_cast_to_timestamp__plan0.sql b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Redshift/test_cast_to_timestamp__plan0.sql similarity index 100% rename from tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Redshift/test_cast_to_timestamp__plan0.sql rename to tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Redshift/test_cast_to_timestamp__plan0.sql diff --git a/tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Redshift/test_continuous_percentile_expr__plan0.sql b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Redshift/test_continuous_percentile_expr__plan0.sql similarity index 100% rename from tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Redshift/test_continuous_percentile_expr__plan0.sql rename to tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Redshift/test_continuous_percentile_expr__plan0.sql diff --git a/tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Redshift/test_generate_uuid__plan0.sql b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Redshift/test_generate_uuid__plan0.sql similarity index 100% rename from tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Redshift/test_generate_uuid__plan0.sql rename to tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Redshift/test_generate_uuid__plan0.sql diff --git a/tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Snowflake/test_approximate_continuous_percentile_expr__plan0.sql b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Snowflake/test_approximate_continuous_percentile_expr__plan0.sql similarity index 100% rename from tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Snowflake/test_approximate_continuous_percentile_expr__plan0.sql rename to tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Snowflake/test_approximate_continuous_percentile_expr__plan0.sql diff --git a/tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Snowflake/test_cast_to_timestamp__plan0.sql b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Snowflake/test_cast_to_timestamp__plan0.sql similarity index 100% rename from tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Snowflake/test_cast_to_timestamp__plan0.sql rename to tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Snowflake/test_cast_to_timestamp__plan0.sql diff --git a/tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Snowflake/test_continuous_percentile_expr__plan0.sql b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Snowflake/test_continuous_percentile_expr__plan0.sql similarity index 100% rename from tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Snowflake/test_continuous_percentile_expr__plan0.sql rename to tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Snowflake/test_continuous_percentile_expr__plan0.sql diff --git a/tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Snowflake/test_discrete_percentile_expr__plan0.sql b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Snowflake/test_discrete_percentile_expr__plan0.sql similarity index 100% rename from tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Snowflake/test_discrete_percentile_expr__plan0.sql rename to tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Snowflake/test_discrete_percentile_expr__plan0.sql diff --git a/tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Snowflake/test_generate_uuid__plan0.sql b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Snowflake/test_generate_uuid__plan0.sql similarity index 100% rename from tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Snowflake/test_generate_uuid__plan0.sql rename to tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Snowflake/test_generate_uuid__plan0.sql diff --git a/tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Trino/test_approximate_continuous_percentile_expr__plan0.sql b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Trino/test_approximate_continuous_percentile_expr__plan0.sql similarity index 100% rename from tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Trino/test_approximate_continuous_percentile_expr__plan0.sql rename to tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Trino/test_approximate_continuous_percentile_expr__plan0.sql diff --git a/tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Trino/test_cast_to_timestamp__plan0.sql b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Trino/test_cast_to_timestamp__plan0.sql similarity index 100% rename from tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Trino/test_cast_to_timestamp__plan0.sql rename to tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Trino/test_cast_to_timestamp__plan0.sql diff --git a/tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Trino/test_generate_uuid__plan0.sql b/tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Trino/test_generate_uuid__plan0.sql similarity index 100% rename from tests/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Trino/test_generate_uuid__plan0.sql rename to tests_metricflow/snapshots/test_engine_specific_rendering.py/SqlQueryPlan/Trino/test_generate_uuid__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_0.py/str/BigQuery/test_fill_nulls_with_0_multi_metric_query__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/BigQuery/test_fill_nulls_with_0_multi_metric_query__query_output.txt similarity index 100% rename from tests/snapshots/test_fill_nulls_with_0.py/str/BigQuery/test_fill_nulls_with_0_multi_metric_query__query_output.txt rename to tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/BigQuery/test_fill_nulls_with_0_multi_metric_query__query_output.txt diff --git a/tests/snapshots/test_fill_nulls_with_0.py/str/BigQuery/test_fill_nulls_with_0_multi_metric_query_with_categorical_dimension__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/BigQuery/test_fill_nulls_with_0_multi_metric_query_with_categorical_dimension__query_output.txt similarity index 100% rename from tests/snapshots/test_fill_nulls_with_0.py/str/BigQuery/test_fill_nulls_with_0_multi_metric_query_with_categorical_dimension__query_output.txt rename to tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/BigQuery/test_fill_nulls_with_0_multi_metric_query_with_categorical_dimension__query_output.txt diff --git a/tests/snapshots/test_fill_nulls_with_0.py/str/BigQuery/test_simple_fill_nulls_with_0_metric_time__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/BigQuery/test_simple_fill_nulls_with_0_metric_time__query_output.txt similarity index 100% rename from tests/snapshots/test_fill_nulls_with_0.py/str/BigQuery/test_simple_fill_nulls_with_0_metric_time__query_output.txt rename to tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/BigQuery/test_simple_fill_nulls_with_0_metric_time__query_output.txt diff --git a/tests/snapshots/test_fill_nulls_with_0.py/str/BigQuery/test_simple_fill_nulls_with_0_month__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/BigQuery/test_simple_fill_nulls_with_0_month__query_output.txt similarity index 100% rename from tests/snapshots/test_fill_nulls_with_0.py/str/BigQuery/test_simple_fill_nulls_with_0_month__query_output.txt rename to tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/BigQuery/test_simple_fill_nulls_with_0_month__query_output.txt diff --git a/tests/snapshots/test_fill_nulls_with_0.py/str/BigQuery/test_simple_join_to_time_spine__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/BigQuery/test_simple_join_to_time_spine__query_output.txt similarity index 100% rename from tests/snapshots/test_fill_nulls_with_0.py/str/BigQuery/test_simple_join_to_time_spine__query_output.txt rename to tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/BigQuery/test_simple_join_to_time_spine__query_output.txt diff --git a/tests/snapshots/test_fill_nulls_with_0.py/str/Databricks/test_fill_nulls_with_0_multi_metric_query__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Databricks/test_fill_nulls_with_0_multi_metric_query__query_output.txt similarity index 100% rename from tests/snapshots/test_fill_nulls_with_0.py/str/Databricks/test_fill_nulls_with_0_multi_metric_query__query_output.txt rename to tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Databricks/test_fill_nulls_with_0_multi_metric_query__query_output.txt diff --git a/tests/snapshots/test_fill_nulls_with_0.py/str/Databricks/test_fill_nulls_with_0_multi_metric_query_with_categorical_dimension__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Databricks/test_fill_nulls_with_0_multi_metric_query_with_categorical_dimension__query_output.txt similarity index 100% rename from tests/snapshots/test_fill_nulls_with_0.py/str/Databricks/test_fill_nulls_with_0_multi_metric_query_with_categorical_dimension__query_output.txt rename to tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Databricks/test_fill_nulls_with_0_multi_metric_query_with_categorical_dimension__query_output.txt diff --git a/tests/snapshots/test_fill_nulls_with_0.py/str/Databricks/test_simple_fill_nulls_with_0_metric_time__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Databricks/test_simple_fill_nulls_with_0_metric_time__query_output.txt similarity index 100% rename from tests/snapshots/test_fill_nulls_with_0.py/str/Databricks/test_simple_fill_nulls_with_0_metric_time__query_output.txt rename to tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Databricks/test_simple_fill_nulls_with_0_metric_time__query_output.txt diff --git a/tests/snapshots/test_fill_nulls_with_0.py/str/Databricks/test_simple_fill_nulls_with_0_month__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Databricks/test_simple_fill_nulls_with_0_month__query_output.txt similarity index 100% rename from tests/snapshots/test_fill_nulls_with_0.py/str/Databricks/test_simple_fill_nulls_with_0_month__query_output.txt rename to tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Databricks/test_simple_fill_nulls_with_0_month__query_output.txt diff --git a/tests/snapshots/test_fill_nulls_with_0.py/str/Databricks/test_simple_join_to_time_spine__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Databricks/test_simple_join_to_time_spine__query_output.txt similarity index 100% rename from tests/snapshots/test_fill_nulls_with_0.py/str/Databricks/test_simple_join_to_time_spine__query_output.txt rename to tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Databricks/test_simple_join_to_time_spine__query_output.txt diff --git a/tests/snapshots/test_fill_nulls_with_0.py/str/DuckDB/test_fill_nulls_with_0_multi_metric_query__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/DuckDB/test_fill_nulls_with_0_multi_metric_query__query_output.txt similarity index 100% rename from tests/snapshots/test_fill_nulls_with_0.py/str/DuckDB/test_fill_nulls_with_0_multi_metric_query__query_output.txt rename to tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/DuckDB/test_fill_nulls_with_0_multi_metric_query__query_output.txt diff --git a/tests/snapshots/test_fill_nulls_with_0.py/str/DuckDB/test_fill_nulls_with_0_multi_metric_query_with_categorical_dimension__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/DuckDB/test_fill_nulls_with_0_multi_metric_query_with_categorical_dimension__query_output.txt similarity index 100% rename from tests/snapshots/test_fill_nulls_with_0.py/str/DuckDB/test_fill_nulls_with_0_multi_metric_query_with_categorical_dimension__query_output.txt rename to tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/DuckDB/test_fill_nulls_with_0_multi_metric_query_with_categorical_dimension__query_output.txt diff --git a/tests/snapshots/test_fill_nulls_with_0.py/str/DuckDB/test_simple_fill_nulls_with_0_metric_time__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/DuckDB/test_simple_fill_nulls_with_0_metric_time__query_output.txt similarity index 100% rename from tests/snapshots/test_fill_nulls_with_0.py/str/DuckDB/test_simple_fill_nulls_with_0_metric_time__query_output.txt rename to tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/DuckDB/test_simple_fill_nulls_with_0_metric_time__query_output.txt diff --git a/tests/snapshots/test_fill_nulls_with_0.py/str/DuckDB/test_simple_fill_nulls_with_0_month__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/DuckDB/test_simple_fill_nulls_with_0_month__query_output.txt similarity index 100% rename from tests/snapshots/test_fill_nulls_with_0.py/str/DuckDB/test_simple_fill_nulls_with_0_month__query_output.txt rename to tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/DuckDB/test_simple_fill_nulls_with_0_month__query_output.txt diff --git a/tests/snapshots/test_fill_nulls_with_0.py/str/DuckDB/test_simple_join_to_time_spine__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/DuckDB/test_simple_join_to_time_spine__query_output.txt similarity index 100% rename from tests/snapshots/test_fill_nulls_with_0.py/str/DuckDB/test_simple_join_to_time_spine__query_output.txt rename to tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/DuckDB/test_simple_join_to_time_spine__query_output.txt diff --git a/tests/snapshots/test_fill_nulls_with_0.py/str/Postgres/test_fill_nulls_with_0_multi_metric_query__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Postgres/test_fill_nulls_with_0_multi_metric_query__query_output.txt similarity index 100% rename from tests/snapshots/test_fill_nulls_with_0.py/str/Postgres/test_fill_nulls_with_0_multi_metric_query__query_output.txt rename to tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Postgres/test_fill_nulls_with_0_multi_metric_query__query_output.txt diff --git a/tests/snapshots/test_fill_nulls_with_0.py/str/Postgres/test_fill_nulls_with_0_multi_metric_query_with_categorical_dimension__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Postgres/test_fill_nulls_with_0_multi_metric_query_with_categorical_dimension__query_output.txt similarity index 100% rename from tests/snapshots/test_fill_nulls_with_0.py/str/Postgres/test_fill_nulls_with_0_multi_metric_query_with_categorical_dimension__query_output.txt rename to tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Postgres/test_fill_nulls_with_0_multi_metric_query_with_categorical_dimension__query_output.txt diff --git a/tests/snapshots/test_fill_nulls_with_0.py/str/Postgres/test_simple_fill_nulls_with_0_metric_time__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Postgres/test_simple_fill_nulls_with_0_metric_time__query_output.txt similarity index 100% rename from tests/snapshots/test_fill_nulls_with_0.py/str/Postgres/test_simple_fill_nulls_with_0_metric_time__query_output.txt rename to tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Postgres/test_simple_fill_nulls_with_0_metric_time__query_output.txt diff --git a/tests/snapshots/test_fill_nulls_with_0.py/str/Postgres/test_simple_fill_nulls_with_0_month__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Postgres/test_simple_fill_nulls_with_0_month__query_output.txt similarity index 100% rename from tests/snapshots/test_fill_nulls_with_0.py/str/Postgres/test_simple_fill_nulls_with_0_month__query_output.txt rename to tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Postgres/test_simple_fill_nulls_with_0_month__query_output.txt diff --git a/tests/snapshots/test_fill_nulls_with_0.py/str/Postgres/test_simple_join_to_time_spine__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Postgres/test_simple_join_to_time_spine__query_output.txt similarity index 100% rename from tests/snapshots/test_fill_nulls_with_0.py/str/Postgres/test_simple_join_to_time_spine__query_output.txt rename to tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Postgres/test_simple_join_to_time_spine__query_output.txt diff --git a/tests/snapshots/test_fill_nulls_with_0.py/str/Redshift/test_fill_nulls_with_0_multi_metric_query__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Redshift/test_fill_nulls_with_0_multi_metric_query__query_output.txt similarity index 100% rename from tests/snapshots/test_fill_nulls_with_0.py/str/Redshift/test_fill_nulls_with_0_multi_metric_query__query_output.txt rename to tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Redshift/test_fill_nulls_with_0_multi_metric_query__query_output.txt diff --git a/tests/snapshots/test_fill_nulls_with_0.py/str/Redshift/test_fill_nulls_with_0_multi_metric_query_with_categorical_dimension__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Redshift/test_fill_nulls_with_0_multi_metric_query_with_categorical_dimension__query_output.txt similarity index 100% rename from tests/snapshots/test_fill_nulls_with_0.py/str/Redshift/test_fill_nulls_with_0_multi_metric_query_with_categorical_dimension__query_output.txt rename to tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Redshift/test_fill_nulls_with_0_multi_metric_query_with_categorical_dimension__query_output.txt diff --git a/tests/snapshots/test_fill_nulls_with_0.py/str/Redshift/test_simple_fill_nulls_with_0_metric_time__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Redshift/test_simple_fill_nulls_with_0_metric_time__query_output.txt similarity index 100% rename from tests/snapshots/test_fill_nulls_with_0.py/str/Redshift/test_simple_fill_nulls_with_0_metric_time__query_output.txt rename to tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Redshift/test_simple_fill_nulls_with_0_metric_time__query_output.txt diff --git a/tests/snapshots/test_fill_nulls_with_0.py/str/Redshift/test_simple_fill_nulls_with_0_month__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Redshift/test_simple_fill_nulls_with_0_month__query_output.txt similarity index 100% rename from tests/snapshots/test_fill_nulls_with_0.py/str/Redshift/test_simple_fill_nulls_with_0_month__query_output.txt rename to tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Redshift/test_simple_fill_nulls_with_0_month__query_output.txt diff --git a/tests/snapshots/test_fill_nulls_with_0.py/str/Redshift/test_simple_join_to_time_spine__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Redshift/test_simple_join_to_time_spine__query_output.txt similarity index 100% rename from tests/snapshots/test_fill_nulls_with_0.py/str/Redshift/test_simple_join_to_time_spine__query_output.txt rename to tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Redshift/test_simple_join_to_time_spine__query_output.txt diff --git a/tests/snapshots/test_fill_nulls_with_0.py/str/Snowflake/test_fill_nulls_with_0_multi_metric_query__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Snowflake/test_fill_nulls_with_0_multi_metric_query__query_output.txt similarity index 100% rename from tests/snapshots/test_fill_nulls_with_0.py/str/Snowflake/test_fill_nulls_with_0_multi_metric_query__query_output.txt rename to tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Snowflake/test_fill_nulls_with_0_multi_metric_query__query_output.txt diff --git a/tests/snapshots/test_fill_nulls_with_0.py/str/Snowflake/test_fill_nulls_with_0_multi_metric_query_with_categorical_dimension__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Snowflake/test_fill_nulls_with_0_multi_metric_query_with_categorical_dimension__query_output.txt similarity index 100% rename from tests/snapshots/test_fill_nulls_with_0.py/str/Snowflake/test_fill_nulls_with_0_multi_metric_query_with_categorical_dimension__query_output.txt rename to tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Snowflake/test_fill_nulls_with_0_multi_metric_query_with_categorical_dimension__query_output.txt diff --git a/tests/snapshots/test_fill_nulls_with_0.py/str/Snowflake/test_simple_fill_nulls_with_0_metric_time__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Snowflake/test_simple_fill_nulls_with_0_metric_time__query_output.txt similarity index 100% rename from tests/snapshots/test_fill_nulls_with_0.py/str/Snowflake/test_simple_fill_nulls_with_0_metric_time__query_output.txt rename to tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Snowflake/test_simple_fill_nulls_with_0_metric_time__query_output.txt diff --git a/tests/snapshots/test_fill_nulls_with_0.py/str/Snowflake/test_simple_fill_nulls_with_0_month__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Snowflake/test_simple_fill_nulls_with_0_month__query_output.txt similarity index 100% rename from tests/snapshots/test_fill_nulls_with_0.py/str/Snowflake/test_simple_fill_nulls_with_0_month__query_output.txt rename to tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Snowflake/test_simple_fill_nulls_with_0_month__query_output.txt diff --git a/tests/snapshots/test_fill_nulls_with_0.py/str/Snowflake/test_simple_join_to_time_spine__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Snowflake/test_simple_join_to_time_spine__query_output.txt similarity index 100% rename from tests/snapshots/test_fill_nulls_with_0.py/str/Snowflake/test_simple_join_to_time_spine__query_output.txt rename to tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Snowflake/test_simple_join_to_time_spine__query_output.txt diff --git a/tests/snapshots/test_fill_nulls_with_0.py/str/Trino/test_fill_nulls_with_0_multi_metric_query__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Trino/test_fill_nulls_with_0_multi_metric_query__query_output.txt similarity index 100% rename from tests/snapshots/test_fill_nulls_with_0.py/str/Trino/test_fill_nulls_with_0_multi_metric_query__query_output.txt rename to tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Trino/test_fill_nulls_with_0_multi_metric_query__query_output.txt diff --git a/tests/snapshots/test_fill_nulls_with_0.py/str/Trino/test_fill_nulls_with_0_multi_metric_query_with_categorical_dimension__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Trino/test_fill_nulls_with_0_multi_metric_query_with_categorical_dimension__query_output.txt similarity index 100% rename from tests/snapshots/test_fill_nulls_with_0.py/str/Trino/test_fill_nulls_with_0_multi_metric_query_with_categorical_dimension__query_output.txt rename to tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Trino/test_fill_nulls_with_0_multi_metric_query_with_categorical_dimension__query_output.txt diff --git a/tests/snapshots/test_fill_nulls_with_0.py/str/Trino/test_simple_fill_nulls_with_0_metric_time__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Trino/test_simple_fill_nulls_with_0_metric_time__query_output.txt similarity index 100% rename from tests/snapshots/test_fill_nulls_with_0.py/str/Trino/test_simple_fill_nulls_with_0_metric_time__query_output.txt rename to tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Trino/test_simple_fill_nulls_with_0_metric_time__query_output.txt diff --git a/tests/snapshots/test_fill_nulls_with_0.py/str/Trino/test_simple_fill_nulls_with_0_month__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Trino/test_simple_fill_nulls_with_0_month__query_output.txt similarity index 100% rename from tests/snapshots/test_fill_nulls_with_0.py/str/Trino/test_simple_fill_nulls_with_0_month__query_output.txt rename to tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Trino/test_simple_fill_nulls_with_0_month__query_output.txt diff --git a/tests/snapshots/test_fill_nulls_with_0.py/str/Trino/test_simple_join_to_time_spine__query_output.txt b/tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Trino/test_simple_join_to_time_spine__query_output.txt similarity index 100% rename from tests/snapshots/test_fill_nulls_with_0.py/str/Trino/test_simple_join_to_time_spine__query_output.txt rename to tests_metricflow/snapshots/test_fill_nulls_with_0.py/str/Trino/test_simple_join_to_time_spine__query_output.txt diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_fill_nulls__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_fill_nulls__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_fill_nulls__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_fill_nulls__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_fill_nulls__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_fill_nulls__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_fill_nulls__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_cumulative_fill_nulls__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_derived_fill_nulls_for_one_input_metric__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_derived_fill_nulls_for_one_input_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_derived_fill_nulls_for_one_input_metric__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_derived_fill_nulls_for_one_input_metric__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_derived_fill_nulls_for_one_input_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_derived_fill_nulls_for_one_input_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_derived_fill_nulls_for_one_input_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_derived_fill_nulls_for_one_input_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_join_to_time_spine_with_filters__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_join_to_time_spine_with_filters__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_join_to_time_spine_with_filters__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_join_to_time_spine_with_filters__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_join_to_time_spine_with_filters__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_join_to_time_spine_with_filters__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_join_to_time_spine_with_filters__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_join_to_time_spine_with_filters__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_simple_fill_nulls_with_0_metric_time__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_simple_fill_nulls_with_0_metric_time__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_simple_fill_nulls_with_0_metric_time__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_simple_fill_nulls_with_0_metric_time__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_simple_fill_nulls_with_0_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_simple_fill_nulls_with_0_metric_time__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_simple_fill_nulls_with_0_metric_time__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_simple_fill_nulls_with_0_metric_time__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_simple_fill_nulls_with_0_month__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_simple_fill_nulls_with_0_month__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_simple_fill_nulls_with_0_month__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_simple_fill_nulls_with_0_month__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_simple_fill_nulls_with_0_month__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_simple_fill_nulls_with_0_month__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_simple_fill_nulls_with_0_month__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_simple_fill_nulls_with_0_month__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_simple_fill_nulls_with_0_with_non_metric_time__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_simple_fill_nulls_with_0_with_non_metric_time__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_simple_fill_nulls_with_0_with_non_metric_time__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_simple_fill_nulls_with_0_with_non_metric_time__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_simple_fill_nulls_with_0_with_non_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_simple_fill_nulls_with_0_with_non_metric_time__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_simple_fill_nulls_with_0_with_non_metric_time__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_simple_fill_nulls_with_0_with_non_metric_time__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_simple_fill_nulls_without_time_spine__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_simple_fill_nulls_without_time_spine__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_simple_fill_nulls_without_time_spine__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_simple_fill_nulls_without_time_spine__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_simple_fill_nulls_without_time_spine__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_simple_fill_nulls_without_time_spine__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_simple_fill_nulls_without_time_spine__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/BigQuery/test_simple_fill_nulls_without_time_spine__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_cumulative_fill_nulls__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_cumulative_fill_nulls__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_cumulative_fill_nulls__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_cumulative_fill_nulls__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_cumulative_fill_nulls__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_cumulative_fill_nulls__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_cumulative_fill_nulls__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_cumulative_fill_nulls__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_derived_fill_nulls_for_one_input_metric__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_derived_fill_nulls_for_one_input_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_derived_fill_nulls_for_one_input_metric__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_derived_fill_nulls_for_one_input_metric__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_derived_fill_nulls_for_one_input_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_derived_fill_nulls_for_one_input_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_derived_fill_nulls_for_one_input_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_derived_fill_nulls_for_one_input_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_join_to_time_spine_with_filters__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_join_to_time_spine_with_filters__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_join_to_time_spine_with_filters__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_join_to_time_spine_with_filters__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_join_to_time_spine_with_filters__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_join_to_time_spine_with_filters__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_join_to_time_spine_with_filters__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_join_to_time_spine_with_filters__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_simple_fill_nulls_with_0_metric_time__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_simple_fill_nulls_with_0_metric_time__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_simple_fill_nulls_with_0_metric_time__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_simple_fill_nulls_with_0_metric_time__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_simple_fill_nulls_with_0_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_simple_fill_nulls_with_0_metric_time__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_simple_fill_nulls_with_0_metric_time__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_simple_fill_nulls_with_0_metric_time__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_simple_fill_nulls_with_0_month__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_simple_fill_nulls_with_0_month__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_simple_fill_nulls_with_0_month__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_simple_fill_nulls_with_0_month__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_simple_fill_nulls_with_0_month__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_simple_fill_nulls_with_0_month__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_simple_fill_nulls_with_0_month__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_simple_fill_nulls_with_0_month__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_simple_fill_nulls_with_0_with_non_metric_time__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_simple_fill_nulls_with_0_with_non_metric_time__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_simple_fill_nulls_with_0_with_non_metric_time__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_simple_fill_nulls_with_0_with_non_metric_time__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_simple_fill_nulls_with_0_with_non_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_simple_fill_nulls_with_0_with_non_metric_time__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_simple_fill_nulls_with_0_with_non_metric_time__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_simple_fill_nulls_with_0_with_non_metric_time__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_simple_fill_nulls_without_time_spine__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_simple_fill_nulls_without_time_spine__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_simple_fill_nulls_without_time_spine__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_simple_fill_nulls_without_time_spine__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_simple_fill_nulls_without_time_spine__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_simple_fill_nulls_without_time_spine__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_simple_fill_nulls_without_time_spine__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Databricks/test_simple_fill_nulls_without_time_spine__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_fill_nulls__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_fill_nulls__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_fill_nulls__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_fill_nulls__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_fill_nulls__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_fill_nulls__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_fill_nulls__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_cumulative_fill_nulls__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_derived_fill_nulls_for_one_input_metric__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_derived_fill_nulls_for_one_input_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_derived_fill_nulls_for_one_input_metric__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_derived_fill_nulls_for_one_input_metric__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_derived_fill_nulls_for_one_input_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_derived_fill_nulls_for_one_input_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_derived_fill_nulls_for_one_input_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_derived_fill_nulls_for_one_input_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_join_to_time_spine_with_filters__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_join_to_time_spine_with_filters__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_join_to_time_spine_with_filters__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_join_to_time_spine_with_filters__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_join_to_time_spine_with_filters__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_join_to_time_spine_with_filters__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_join_to_time_spine_with_filters__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_join_to_time_spine_with_filters__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_simple_fill_nulls_with_0_metric_time__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_simple_fill_nulls_with_0_metric_time__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_simple_fill_nulls_with_0_metric_time__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_simple_fill_nulls_with_0_metric_time__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_simple_fill_nulls_with_0_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_simple_fill_nulls_with_0_metric_time__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_simple_fill_nulls_with_0_metric_time__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_simple_fill_nulls_with_0_metric_time__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_simple_fill_nulls_with_0_month__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_simple_fill_nulls_with_0_month__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_simple_fill_nulls_with_0_month__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_simple_fill_nulls_with_0_month__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_simple_fill_nulls_with_0_month__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_simple_fill_nulls_with_0_month__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_simple_fill_nulls_with_0_month__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_simple_fill_nulls_with_0_month__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_simple_fill_nulls_with_0_with_non_metric_time__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_simple_fill_nulls_with_0_with_non_metric_time__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_simple_fill_nulls_with_0_with_non_metric_time__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_simple_fill_nulls_with_0_with_non_metric_time__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_simple_fill_nulls_with_0_with_non_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_simple_fill_nulls_with_0_with_non_metric_time__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_simple_fill_nulls_with_0_with_non_metric_time__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_simple_fill_nulls_with_0_with_non_metric_time__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_simple_fill_nulls_without_time_spine__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_simple_fill_nulls_without_time_spine__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_simple_fill_nulls_without_time_spine__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_simple_fill_nulls_without_time_spine__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_simple_fill_nulls_without_time_spine__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_simple_fill_nulls_without_time_spine__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_simple_fill_nulls_without_time_spine__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/DuckDB/test_simple_fill_nulls_without_time_spine__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_cumulative_fill_nulls__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_cumulative_fill_nulls__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_cumulative_fill_nulls__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_cumulative_fill_nulls__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_cumulative_fill_nulls__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_cumulative_fill_nulls__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_cumulative_fill_nulls__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_cumulative_fill_nulls__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_derived_fill_nulls_for_one_input_metric__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_derived_fill_nulls_for_one_input_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_derived_fill_nulls_for_one_input_metric__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_derived_fill_nulls_for_one_input_metric__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_derived_fill_nulls_for_one_input_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_derived_fill_nulls_for_one_input_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_derived_fill_nulls_for_one_input_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_derived_fill_nulls_for_one_input_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_join_to_time_spine_with_filters__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_join_to_time_spine_with_filters__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_join_to_time_spine_with_filters__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_join_to_time_spine_with_filters__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_join_to_time_spine_with_filters__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_join_to_time_spine_with_filters__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_join_to_time_spine_with_filters__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_join_to_time_spine_with_filters__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_simple_fill_nulls_with_0_metric_time__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_simple_fill_nulls_with_0_metric_time__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_simple_fill_nulls_with_0_metric_time__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_simple_fill_nulls_with_0_metric_time__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_simple_fill_nulls_with_0_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_simple_fill_nulls_with_0_metric_time__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_simple_fill_nulls_with_0_metric_time__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_simple_fill_nulls_with_0_metric_time__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_simple_fill_nulls_with_0_month__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_simple_fill_nulls_with_0_month__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_simple_fill_nulls_with_0_month__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_simple_fill_nulls_with_0_month__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_simple_fill_nulls_with_0_month__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_simple_fill_nulls_with_0_month__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_simple_fill_nulls_with_0_month__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_simple_fill_nulls_with_0_month__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_simple_fill_nulls_with_0_with_non_metric_time__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_simple_fill_nulls_with_0_with_non_metric_time__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_simple_fill_nulls_with_0_with_non_metric_time__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_simple_fill_nulls_with_0_with_non_metric_time__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_simple_fill_nulls_with_0_with_non_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_simple_fill_nulls_with_0_with_non_metric_time__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_simple_fill_nulls_with_0_with_non_metric_time__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_simple_fill_nulls_with_0_with_non_metric_time__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_simple_fill_nulls_without_time_spine__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_simple_fill_nulls_without_time_spine__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_simple_fill_nulls_without_time_spine__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_simple_fill_nulls_without_time_spine__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_simple_fill_nulls_without_time_spine__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_simple_fill_nulls_without_time_spine__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_simple_fill_nulls_without_time_spine__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Postgres/test_simple_fill_nulls_without_time_spine__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_cumulative_fill_nulls__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_cumulative_fill_nulls__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_cumulative_fill_nulls__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_cumulative_fill_nulls__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_cumulative_fill_nulls__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_cumulative_fill_nulls__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_cumulative_fill_nulls__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_cumulative_fill_nulls__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_derived_fill_nulls_for_one_input_metric__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_derived_fill_nulls_for_one_input_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_derived_fill_nulls_for_one_input_metric__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_derived_fill_nulls_for_one_input_metric__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_derived_fill_nulls_for_one_input_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_derived_fill_nulls_for_one_input_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_derived_fill_nulls_for_one_input_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_derived_fill_nulls_for_one_input_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_join_to_time_spine_with_filters__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_join_to_time_spine_with_filters__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_join_to_time_spine_with_filters__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_join_to_time_spine_with_filters__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_join_to_time_spine_with_filters__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_join_to_time_spine_with_filters__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_join_to_time_spine_with_filters__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_join_to_time_spine_with_filters__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_simple_fill_nulls_with_0_metric_time__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_simple_fill_nulls_with_0_metric_time__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_simple_fill_nulls_with_0_metric_time__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_simple_fill_nulls_with_0_metric_time__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_simple_fill_nulls_with_0_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_simple_fill_nulls_with_0_metric_time__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_simple_fill_nulls_with_0_metric_time__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_simple_fill_nulls_with_0_metric_time__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_simple_fill_nulls_with_0_month__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_simple_fill_nulls_with_0_month__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_simple_fill_nulls_with_0_month__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_simple_fill_nulls_with_0_month__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_simple_fill_nulls_with_0_month__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_simple_fill_nulls_with_0_month__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_simple_fill_nulls_with_0_month__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_simple_fill_nulls_with_0_month__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_simple_fill_nulls_with_0_with_non_metric_time__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_simple_fill_nulls_with_0_with_non_metric_time__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_simple_fill_nulls_with_0_with_non_metric_time__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_simple_fill_nulls_with_0_with_non_metric_time__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_simple_fill_nulls_with_0_with_non_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_simple_fill_nulls_with_0_with_non_metric_time__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_simple_fill_nulls_with_0_with_non_metric_time__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_simple_fill_nulls_with_0_with_non_metric_time__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_simple_fill_nulls_without_time_spine__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_simple_fill_nulls_without_time_spine__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_simple_fill_nulls_without_time_spine__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_simple_fill_nulls_without_time_spine__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_simple_fill_nulls_without_time_spine__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_simple_fill_nulls_without_time_spine__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_simple_fill_nulls_without_time_spine__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Redshift/test_simple_fill_nulls_without_time_spine__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_fill_nulls__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_fill_nulls__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_fill_nulls__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_fill_nulls__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_fill_nulls__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_fill_nulls__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_fill_nulls__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_cumulative_fill_nulls__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_derived_fill_nulls_for_one_input_metric__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_derived_fill_nulls_for_one_input_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_derived_fill_nulls_for_one_input_metric__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_derived_fill_nulls_for_one_input_metric__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_derived_fill_nulls_for_one_input_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_derived_fill_nulls_for_one_input_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_derived_fill_nulls_for_one_input_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_derived_fill_nulls_for_one_input_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_join_to_time_spine_with_filters__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_join_to_time_spine_with_filters__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_join_to_time_spine_with_filters__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_join_to_time_spine_with_filters__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_join_to_time_spine_with_filters__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_join_to_time_spine_with_filters__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_join_to_time_spine_with_filters__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_join_to_time_spine_with_filters__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_simple_fill_nulls_with_0_metric_time__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_simple_fill_nulls_with_0_metric_time__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_simple_fill_nulls_with_0_metric_time__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_simple_fill_nulls_with_0_metric_time__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_simple_fill_nulls_with_0_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_simple_fill_nulls_with_0_metric_time__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_simple_fill_nulls_with_0_metric_time__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_simple_fill_nulls_with_0_metric_time__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_simple_fill_nulls_with_0_month__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_simple_fill_nulls_with_0_month__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_simple_fill_nulls_with_0_month__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_simple_fill_nulls_with_0_month__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_simple_fill_nulls_with_0_month__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_simple_fill_nulls_with_0_month__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_simple_fill_nulls_with_0_month__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_simple_fill_nulls_with_0_month__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_simple_fill_nulls_with_0_with_non_metric_time__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_simple_fill_nulls_with_0_with_non_metric_time__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_simple_fill_nulls_with_0_with_non_metric_time__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_simple_fill_nulls_with_0_with_non_metric_time__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_simple_fill_nulls_with_0_with_non_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_simple_fill_nulls_with_0_with_non_metric_time__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_simple_fill_nulls_with_0_with_non_metric_time__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_simple_fill_nulls_with_0_with_non_metric_time__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_simple_fill_nulls_without_time_spine__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_simple_fill_nulls_without_time_spine__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_simple_fill_nulls_without_time_spine__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_simple_fill_nulls_without_time_spine__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_simple_fill_nulls_without_time_spine__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_simple_fill_nulls_without_time_spine__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_simple_fill_nulls_without_time_spine__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Snowflake/test_simple_fill_nulls_without_time_spine__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_cumulative_fill_nulls__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_cumulative_fill_nulls__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_cumulative_fill_nulls__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_cumulative_fill_nulls__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_cumulative_fill_nulls__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_cumulative_fill_nulls__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_cumulative_fill_nulls__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_cumulative_fill_nulls__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_derived_fill_nulls_for_one_input_metric__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_derived_fill_nulls_for_one_input_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_derived_fill_nulls_for_one_input_metric__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_derived_fill_nulls_for_one_input_metric__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_derived_fill_nulls_for_one_input_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_derived_fill_nulls_for_one_input_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_derived_fill_nulls_for_one_input_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_derived_fill_nulls_for_one_input_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_join_to_time_spine_with_filters__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_join_to_time_spine_with_filters__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_join_to_time_spine_with_filters__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_join_to_time_spine_with_filters__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_join_to_time_spine_with_filters__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_join_to_time_spine_with_filters__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_join_to_time_spine_with_filters__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_join_to_time_spine_with_filters__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_simple_fill_nulls_with_0_metric_time__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_simple_fill_nulls_with_0_metric_time__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_simple_fill_nulls_with_0_metric_time__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_simple_fill_nulls_with_0_metric_time__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_simple_fill_nulls_with_0_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_simple_fill_nulls_with_0_metric_time__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_simple_fill_nulls_with_0_metric_time__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_simple_fill_nulls_with_0_metric_time__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_simple_fill_nulls_with_0_month__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_simple_fill_nulls_with_0_month__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_simple_fill_nulls_with_0_month__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_simple_fill_nulls_with_0_month__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_simple_fill_nulls_with_0_month__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_simple_fill_nulls_with_0_month__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_simple_fill_nulls_with_0_month__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_simple_fill_nulls_with_0_month__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_simple_fill_nulls_with_0_with_categorical_dimension__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_simple_fill_nulls_with_0_with_non_metric_time__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_simple_fill_nulls_with_0_with_non_metric_time__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_simple_fill_nulls_with_0_with_non_metric_time__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_simple_fill_nulls_with_0_with_non_metric_time__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_simple_fill_nulls_with_0_with_non_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_simple_fill_nulls_with_0_with_non_metric_time__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_simple_fill_nulls_with_0_with_non_metric_time__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_simple_fill_nulls_with_0_with_non_metric_time__plan0_optimized.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_simple_fill_nulls_without_time_spine__plan0.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_simple_fill_nulls_without_time_spine__plan0.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_simple_fill_nulls_without_time_spine__plan0.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_simple_fill_nulls_without_time_spine__plan0.sql diff --git a/tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_simple_fill_nulls_without_time_spine__plan0_optimized.sql b/tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_simple_fill_nulls_without_time_spine__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_simple_fill_nulls_without_time_spine__plan0_optimized.sql rename to tests_metricflow/snapshots/test_fill_nulls_with_rendering.py/SqlQueryPlan/Trino/test_simple_fill_nulls_without_time_spine__plan0_optimized.sql diff --git a/tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/BigQuery/test_offset_window_with_date_part__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/BigQuery/test_offset_window_with_date_part__plan0.sql similarity index 100% rename from tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/BigQuery/test_offset_window_with_date_part__plan0.sql rename to tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/BigQuery/test_offset_window_with_date_part__plan0.sql diff --git a/tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/BigQuery/test_offset_window_with_date_part__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/BigQuery/test_offset_window_with_date_part__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/BigQuery/test_offset_window_with_date_part__plan0_optimized.sql rename to tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/BigQuery/test_offset_window_with_date_part__plan0_optimized.sql diff --git a/tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/BigQuery/test_simple_query_with_date_part__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/BigQuery/test_simple_query_with_date_part__plan0.sql similarity index 100% rename from tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/BigQuery/test_simple_query_with_date_part__plan0.sql rename to tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/BigQuery/test_simple_query_with_date_part__plan0.sql diff --git a/tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/BigQuery/test_simple_query_with_date_part__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/BigQuery/test_simple_query_with_date_part__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/BigQuery/test_simple_query_with_date_part__plan0_optimized.sql rename to tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/BigQuery/test_simple_query_with_date_part__plan0_optimized.sql diff --git a/tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/BigQuery/test_simple_query_with_multiple_date_parts__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/BigQuery/test_simple_query_with_multiple_date_parts__plan0.sql similarity index 100% rename from tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/BigQuery/test_simple_query_with_multiple_date_parts__plan0.sql rename to tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/BigQuery/test_simple_query_with_multiple_date_parts__plan0.sql diff --git a/tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/BigQuery/test_simple_query_with_multiple_date_parts__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/BigQuery/test_simple_query_with_multiple_date_parts__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/BigQuery/test_simple_query_with_multiple_date_parts__plan0_optimized.sql rename to tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/BigQuery/test_simple_query_with_multiple_date_parts__plan0_optimized.sql diff --git a/tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Databricks/test_offset_window_with_date_part__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Databricks/test_offset_window_with_date_part__plan0.sql similarity index 100% rename from tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Databricks/test_offset_window_with_date_part__plan0.sql rename to tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Databricks/test_offset_window_with_date_part__plan0.sql diff --git a/tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Databricks/test_offset_window_with_date_part__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Databricks/test_offset_window_with_date_part__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Databricks/test_offset_window_with_date_part__plan0_optimized.sql rename to tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Databricks/test_offset_window_with_date_part__plan0_optimized.sql diff --git a/tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Databricks/test_simple_query_with_date_part__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Databricks/test_simple_query_with_date_part__plan0.sql similarity index 100% rename from tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Databricks/test_simple_query_with_date_part__plan0.sql rename to tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Databricks/test_simple_query_with_date_part__plan0.sql diff --git a/tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Databricks/test_simple_query_with_date_part__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Databricks/test_simple_query_with_date_part__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Databricks/test_simple_query_with_date_part__plan0_optimized.sql rename to tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Databricks/test_simple_query_with_date_part__plan0_optimized.sql diff --git a/tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Databricks/test_simple_query_with_multiple_date_parts__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Databricks/test_simple_query_with_multiple_date_parts__plan0.sql similarity index 100% rename from tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Databricks/test_simple_query_with_multiple_date_parts__plan0.sql rename to tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Databricks/test_simple_query_with_multiple_date_parts__plan0.sql diff --git a/tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Databricks/test_simple_query_with_multiple_date_parts__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Databricks/test_simple_query_with_multiple_date_parts__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Databricks/test_simple_query_with_multiple_date_parts__plan0_optimized.sql rename to tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Databricks/test_simple_query_with_multiple_date_parts__plan0_optimized.sql diff --git a/tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/DuckDB/test_offset_window_with_date_part__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/DuckDB/test_offset_window_with_date_part__plan0.sql similarity index 100% rename from tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/DuckDB/test_offset_window_with_date_part__plan0.sql rename to tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/DuckDB/test_offset_window_with_date_part__plan0.sql diff --git a/tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/DuckDB/test_offset_window_with_date_part__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/DuckDB/test_offset_window_with_date_part__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/DuckDB/test_offset_window_with_date_part__plan0_optimized.sql rename to tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/DuckDB/test_offset_window_with_date_part__plan0_optimized.sql diff --git a/tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/DuckDB/test_simple_query_with_date_part__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/DuckDB/test_simple_query_with_date_part__plan0.sql similarity index 100% rename from tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/DuckDB/test_simple_query_with_date_part__plan0.sql rename to tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/DuckDB/test_simple_query_with_date_part__plan0.sql diff --git a/tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/DuckDB/test_simple_query_with_date_part__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/DuckDB/test_simple_query_with_date_part__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/DuckDB/test_simple_query_with_date_part__plan0_optimized.sql rename to tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/DuckDB/test_simple_query_with_date_part__plan0_optimized.sql diff --git a/tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/DuckDB/test_simple_query_with_multiple_date_parts__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/DuckDB/test_simple_query_with_multiple_date_parts__plan0.sql similarity index 100% rename from tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/DuckDB/test_simple_query_with_multiple_date_parts__plan0.sql rename to tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/DuckDB/test_simple_query_with_multiple_date_parts__plan0.sql diff --git a/tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/DuckDB/test_simple_query_with_multiple_date_parts__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/DuckDB/test_simple_query_with_multiple_date_parts__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/DuckDB/test_simple_query_with_multiple_date_parts__plan0_optimized.sql rename to tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/DuckDB/test_simple_query_with_multiple_date_parts__plan0_optimized.sql diff --git a/tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Postgres/test_offset_window_with_date_part__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Postgres/test_offset_window_with_date_part__plan0.sql similarity index 100% rename from tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Postgres/test_offset_window_with_date_part__plan0.sql rename to tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Postgres/test_offset_window_with_date_part__plan0.sql diff --git a/tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Postgres/test_offset_window_with_date_part__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Postgres/test_offset_window_with_date_part__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Postgres/test_offset_window_with_date_part__plan0_optimized.sql rename to tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Postgres/test_offset_window_with_date_part__plan0_optimized.sql diff --git a/tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Postgres/test_simple_query_with_date_part__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Postgres/test_simple_query_with_date_part__plan0.sql similarity index 100% rename from tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Postgres/test_simple_query_with_date_part__plan0.sql rename to tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Postgres/test_simple_query_with_date_part__plan0.sql diff --git a/tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Postgres/test_simple_query_with_date_part__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Postgres/test_simple_query_with_date_part__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Postgres/test_simple_query_with_date_part__plan0_optimized.sql rename to tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Postgres/test_simple_query_with_date_part__plan0_optimized.sql diff --git a/tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Postgres/test_simple_query_with_multiple_date_parts__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Postgres/test_simple_query_with_multiple_date_parts__plan0.sql similarity index 100% rename from tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Postgres/test_simple_query_with_multiple_date_parts__plan0.sql rename to tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Postgres/test_simple_query_with_multiple_date_parts__plan0.sql diff --git a/tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Postgres/test_simple_query_with_multiple_date_parts__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Postgres/test_simple_query_with_multiple_date_parts__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Postgres/test_simple_query_with_multiple_date_parts__plan0_optimized.sql rename to tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Postgres/test_simple_query_with_multiple_date_parts__plan0_optimized.sql diff --git a/tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Redshift/test_offset_window_with_date_part__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Redshift/test_offset_window_with_date_part__plan0.sql similarity index 100% rename from tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Redshift/test_offset_window_with_date_part__plan0.sql rename to tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Redshift/test_offset_window_with_date_part__plan0.sql diff --git a/tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Redshift/test_offset_window_with_date_part__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Redshift/test_offset_window_with_date_part__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Redshift/test_offset_window_with_date_part__plan0_optimized.sql rename to tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Redshift/test_offset_window_with_date_part__plan0_optimized.sql diff --git a/tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Redshift/test_simple_query_with_date_part__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Redshift/test_simple_query_with_date_part__plan0.sql similarity index 100% rename from tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Redshift/test_simple_query_with_date_part__plan0.sql rename to tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Redshift/test_simple_query_with_date_part__plan0.sql diff --git a/tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Redshift/test_simple_query_with_date_part__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Redshift/test_simple_query_with_date_part__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Redshift/test_simple_query_with_date_part__plan0_optimized.sql rename to tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Redshift/test_simple_query_with_date_part__plan0_optimized.sql diff --git a/tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Redshift/test_simple_query_with_multiple_date_parts__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Redshift/test_simple_query_with_multiple_date_parts__plan0.sql similarity index 100% rename from tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Redshift/test_simple_query_with_multiple_date_parts__plan0.sql rename to tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Redshift/test_simple_query_with_multiple_date_parts__plan0.sql diff --git a/tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Redshift/test_simple_query_with_multiple_date_parts__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Redshift/test_simple_query_with_multiple_date_parts__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Redshift/test_simple_query_with_multiple_date_parts__plan0_optimized.sql rename to tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Redshift/test_simple_query_with_multiple_date_parts__plan0_optimized.sql diff --git a/tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Snowflake/test_offset_window_with_date_part__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Snowflake/test_offset_window_with_date_part__plan0.sql similarity index 100% rename from tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Snowflake/test_offset_window_with_date_part__plan0.sql rename to tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Snowflake/test_offset_window_with_date_part__plan0.sql diff --git a/tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Snowflake/test_offset_window_with_date_part__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Snowflake/test_offset_window_with_date_part__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Snowflake/test_offset_window_with_date_part__plan0_optimized.sql rename to tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Snowflake/test_offset_window_with_date_part__plan0_optimized.sql diff --git a/tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Snowflake/test_simple_query_with_date_part__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Snowflake/test_simple_query_with_date_part__plan0.sql similarity index 100% rename from tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Snowflake/test_simple_query_with_date_part__plan0.sql rename to tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Snowflake/test_simple_query_with_date_part__plan0.sql diff --git a/tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Snowflake/test_simple_query_with_date_part__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Snowflake/test_simple_query_with_date_part__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Snowflake/test_simple_query_with_date_part__plan0_optimized.sql rename to tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Snowflake/test_simple_query_with_date_part__plan0_optimized.sql diff --git a/tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Snowflake/test_simple_query_with_multiple_date_parts__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Snowflake/test_simple_query_with_multiple_date_parts__plan0.sql similarity index 100% rename from tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Snowflake/test_simple_query_with_multiple_date_parts__plan0.sql rename to tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Snowflake/test_simple_query_with_multiple_date_parts__plan0.sql diff --git a/tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Snowflake/test_simple_query_with_multiple_date_parts__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Snowflake/test_simple_query_with_multiple_date_parts__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Snowflake/test_simple_query_with_multiple_date_parts__plan0_optimized.sql rename to tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Snowflake/test_simple_query_with_multiple_date_parts__plan0_optimized.sql diff --git a/tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Trino/test_offset_window_with_date_part__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Trino/test_offset_window_with_date_part__plan0.sql similarity index 100% rename from tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Trino/test_offset_window_with_date_part__plan0.sql rename to tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Trino/test_offset_window_with_date_part__plan0.sql diff --git a/tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Trino/test_offset_window_with_date_part__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Trino/test_offset_window_with_date_part__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Trino/test_offset_window_with_date_part__plan0_optimized.sql rename to tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Trino/test_offset_window_with_date_part__plan0_optimized.sql diff --git a/tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Trino/test_simple_query_with_date_part__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Trino/test_simple_query_with_date_part__plan0.sql similarity index 100% rename from tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Trino/test_simple_query_with_date_part__plan0.sql rename to tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Trino/test_simple_query_with_date_part__plan0.sql diff --git a/tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Trino/test_simple_query_with_date_part__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Trino/test_simple_query_with_date_part__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Trino/test_simple_query_with_date_part__plan0_optimized.sql rename to tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Trino/test_simple_query_with_date_part__plan0_optimized.sql diff --git a/tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Trino/test_simple_query_with_multiple_date_parts__plan0.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Trino/test_simple_query_with_multiple_date_parts__plan0.sql similarity index 100% rename from tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Trino/test_simple_query_with_multiple_date_parts__plan0.sql rename to tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Trino/test_simple_query_with_multiple_date_parts__plan0.sql diff --git a/tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Trino/test_simple_query_with_multiple_date_parts__plan0_optimized.sql b/tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Trino/test_simple_query_with_multiple_date_parts__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Trino/test_simple_query_with_multiple_date_parts__plan0_optimized.sql rename to tests_metricflow/snapshots/test_granularity_date_part_rendering.py/SqlQueryPlan/Trino/test_simple_query_with_multiple_date_parts__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_output.py/str/BigQuery/test_metric_with_metric_in_where_filter__query_output.txt b/tests_metricflow/snapshots/test_metric_filter_output.py/str/BigQuery/test_metric_with_metric_in_where_filter__query_output.txt similarity index 100% rename from tests/snapshots/test_metric_filter_output.py/str/BigQuery/test_metric_with_metric_in_where_filter__query_output.txt rename to tests_metricflow/snapshots/test_metric_filter_output.py/str/BigQuery/test_metric_with_metric_in_where_filter__query_output.txt diff --git a/tests/snapshots/test_metric_filter_output.py/str/BigQuery/test_query_with_simple_metric_in_where_filter__query_output.txt b/tests_metricflow/snapshots/test_metric_filter_output.py/str/BigQuery/test_query_with_simple_metric_in_where_filter__query_output.txt similarity index 100% rename from tests/snapshots/test_metric_filter_output.py/str/BigQuery/test_query_with_simple_metric_in_where_filter__query_output.txt rename to tests_metricflow/snapshots/test_metric_filter_output.py/str/BigQuery/test_query_with_simple_metric_in_where_filter__query_output.txt diff --git a/tests/snapshots/test_metric_filter_output.py/str/Databricks/test_metric_with_metric_in_where_filter__query_output.txt b/tests_metricflow/snapshots/test_metric_filter_output.py/str/Databricks/test_metric_with_metric_in_where_filter__query_output.txt similarity index 100% rename from tests/snapshots/test_metric_filter_output.py/str/Databricks/test_metric_with_metric_in_where_filter__query_output.txt rename to tests_metricflow/snapshots/test_metric_filter_output.py/str/Databricks/test_metric_with_metric_in_where_filter__query_output.txt diff --git a/tests/snapshots/test_metric_filter_output.py/str/Databricks/test_query_with_simple_metric_in_where_filter__query_output.txt b/tests_metricflow/snapshots/test_metric_filter_output.py/str/Databricks/test_query_with_simple_metric_in_where_filter__query_output.txt similarity index 100% rename from tests/snapshots/test_metric_filter_output.py/str/Databricks/test_query_with_simple_metric_in_where_filter__query_output.txt rename to tests_metricflow/snapshots/test_metric_filter_output.py/str/Databricks/test_query_with_simple_metric_in_where_filter__query_output.txt diff --git a/tests/snapshots/test_metric_filter_output.py/str/DuckDB/test_metric_with_metric_in_where_filter__query_output.txt b/tests_metricflow/snapshots/test_metric_filter_output.py/str/DuckDB/test_metric_with_metric_in_where_filter__query_output.txt similarity index 100% rename from tests/snapshots/test_metric_filter_output.py/str/DuckDB/test_metric_with_metric_in_where_filter__query_output.txt rename to tests_metricflow/snapshots/test_metric_filter_output.py/str/DuckDB/test_metric_with_metric_in_where_filter__query_output.txt diff --git a/tests/snapshots/test_metric_filter_output.py/str/DuckDB/test_query_with_simple_metric_in_where_filter__query_output.txt b/tests_metricflow/snapshots/test_metric_filter_output.py/str/DuckDB/test_query_with_simple_metric_in_where_filter__query_output.txt similarity index 100% rename from tests/snapshots/test_metric_filter_output.py/str/DuckDB/test_query_with_simple_metric_in_where_filter__query_output.txt rename to tests_metricflow/snapshots/test_metric_filter_output.py/str/DuckDB/test_query_with_simple_metric_in_where_filter__query_output.txt diff --git a/tests/snapshots/test_metric_filter_output.py/str/Postgres/test_metric_with_metric_in_where_filter__query_output.txt b/tests_metricflow/snapshots/test_metric_filter_output.py/str/Postgres/test_metric_with_metric_in_where_filter__query_output.txt similarity index 100% rename from tests/snapshots/test_metric_filter_output.py/str/Postgres/test_metric_with_metric_in_where_filter__query_output.txt rename to tests_metricflow/snapshots/test_metric_filter_output.py/str/Postgres/test_metric_with_metric_in_where_filter__query_output.txt diff --git a/tests/snapshots/test_metric_filter_output.py/str/Postgres/test_query_with_simple_metric_in_where_filter__query_output.txt b/tests_metricflow/snapshots/test_metric_filter_output.py/str/Postgres/test_query_with_simple_metric_in_where_filter__query_output.txt similarity index 100% rename from tests/snapshots/test_metric_filter_output.py/str/Postgres/test_query_with_simple_metric_in_where_filter__query_output.txt rename to tests_metricflow/snapshots/test_metric_filter_output.py/str/Postgres/test_query_with_simple_metric_in_where_filter__query_output.txt diff --git a/tests/snapshots/test_metric_filter_output.py/str/Redshift/test_metric_with_metric_in_where_filter__query_output.txt b/tests_metricflow/snapshots/test_metric_filter_output.py/str/Redshift/test_metric_with_metric_in_where_filter__query_output.txt similarity index 100% rename from tests/snapshots/test_metric_filter_output.py/str/Redshift/test_metric_with_metric_in_where_filter__query_output.txt rename to tests_metricflow/snapshots/test_metric_filter_output.py/str/Redshift/test_metric_with_metric_in_where_filter__query_output.txt diff --git a/tests/snapshots/test_metric_filter_output.py/str/Redshift/test_query_with_simple_metric_in_where_filter__query_output.txt b/tests_metricflow/snapshots/test_metric_filter_output.py/str/Redshift/test_query_with_simple_metric_in_where_filter__query_output.txt similarity index 100% rename from tests/snapshots/test_metric_filter_output.py/str/Redshift/test_query_with_simple_metric_in_where_filter__query_output.txt rename to tests_metricflow/snapshots/test_metric_filter_output.py/str/Redshift/test_query_with_simple_metric_in_where_filter__query_output.txt diff --git a/tests/snapshots/test_metric_filter_output.py/str/Snowflake/test_metric_with_metric_in_where_filter__query_output.txt b/tests_metricflow/snapshots/test_metric_filter_output.py/str/Snowflake/test_metric_with_metric_in_where_filter__query_output.txt similarity index 100% rename from tests/snapshots/test_metric_filter_output.py/str/Snowflake/test_metric_with_metric_in_where_filter__query_output.txt rename to tests_metricflow/snapshots/test_metric_filter_output.py/str/Snowflake/test_metric_with_metric_in_where_filter__query_output.txt diff --git a/tests/snapshots/test_metric_filter_output.py/str/Snowflake/test_query_with_simple_metric_in_where_filter__query_output.txt b/tests_metricflow/snapshots/test_metric_filter_output.py/str/Snowflake/test_query_with_simple_metric_in_where_filter__query_output.txt similarity index 100% rename from tests/snapshots/test_metric_filter_output.py/str/Snowflake/test_query_with_simple_metric_in_where_filter__query_output.txt rename to tests_metricflow/snapshots/test_metric_filter_output.py/str/Snowflake/test_query_with_simple_metric_in_where_filter__query_output.txt diff --git a/tests/snapshots/test_metric_filter_output.py/str/Trino/test_metric_with_metric_in_where_filter__query_output.txt b/tests_metricflow/snapshots/test_metric_filter_output.py/str/Trino/test_metric_with_metric_in_where_filter__query_output.txt similarity index 100% rename from tests/snapshots/test_metric_filter_output.py/str/Trino/test_metric_with_metric_in_where_filter__query_output.txt rename to tests_metricflow/snapshots/test_metric_filter_output.py/str/Trino/test_metric_with_metric_in_where_filter__query_output.txt diff --git a/tests/snapshots/test_metric_filter_output.py/str/Trino/test_query_with_simple_metric_in_where_filter__query_output.txt b/tests_metricflow/snapshots/test_metric_filter_output.py/str/Trino/test_query_with_simple_metric_in_where_filter__query_output.txt similarity index 100% rename from tests/snapshots/test_metric_filter_output.py/str/Trino/test_query_with_simple_metric_in_where_filter__query_output.txt rename to tests_metricflow/snapshots/test_metric_filter_output.py/str/Trino/test_query_with_simple_metric_in_where_filter__query_output.txt diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_distinct_values_query_with_metric_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_distinct_values_query_with_metric_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_distinct_values_query_with_metric_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_distinct_values_query_with_metric_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_distinct_values_query_with_metric_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_distinct_values_query_with_metric_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_distinct_values_query_with_metric_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_distinct_values_query_with_metric_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_metric_with_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_metric_with_metric_in_where_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_metric_with_metric_in_where_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_metric_with_metric_in_where_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_metric_with_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_metric_with_metric_in_where_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_metric_with_metric_in_where_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_metric_with_metric_in_where_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_query_with_cumulative_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_query_with_cumulative_metric_in_where_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_query_with_cumulative_metric_in_where_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_query_with_cumulative_metric_in_where_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_query_with_cumulative_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_query_with_cumulative_metric_in_where_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_query_with_cumulative_metric_in_where_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_query_with_cumulative_metric_in_where_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_query_with_derived_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_query_with_derived_metric_in_where_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_query_with_derived_metric_in_where_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_query_with_derived_metric_in_where_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_query_with_derived_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_query_with_derived_metric_in_where_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_query_with_derived_metric_in_where_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_query_with_derived_metric_in_where_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_query_with_multiple_metrics_in_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_query_with_multiple_metrics_in_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_query_with_multiple_metrics_in_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_query_with_multiple_metrics_in_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_query_with_multiple_metrics_in_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_query_with_multiple_metrics_in_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_query_with_multiple_metrics_in_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_query_with_multiple_metrics_in_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_query_with_ratio_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_query_with_ratio_metric_in_where_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_query_with_ratio_metric_in_where_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_query_with_ratio_metric_in_where_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_query_with_ratio_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_query_with_ratio_metric_in_where_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_query_with_ratio_metric_in_where_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_query_with_ratio_metric_in_where_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_query_with_simple_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_query_with_simple_metric_in_where_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_query_with_simple_metric_in_where_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_query_with_simple_metric_in_where_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_query_with_simple_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_query_with_simple_metric_in_where_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_query_with_simple_metric_in_where_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/BigQuery/test_query_with_simple_metric_in_where_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_distinct_values_query_with_metric_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_distinct_values_query_with_metric_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_distinct_values_query_with_metric_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_distinct_values_query_with_metric_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_distinct_values_query_with_metric_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_distinct_values_query_with_metric_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_distinct_values_query_with_metric_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_distinct_values_query_with_metric_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_metric_with_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_metric_with_metric_in_where_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_metric_with_metric_in_where_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_metric_with_metric_in_where_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_metric_with_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_metric_with_metric_in_where_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_metric_with_metric_in_where_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_metric_with_metric_in_where_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_query_with_cumulative_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_query_with_cumulative_metric_in_where_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_query_with_cumulative_metric_in_where_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_query_with_cumulative_metric_in_where_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_query_with_cumulative_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_query_with_cumulative_metric_in_where_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_query_with_cumulative_metric_in_where_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_query_with_cumulative_metric_in_where_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_query_with_derived_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_query_with_derived_metric_in_where_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_query_with_derived_metric_in_where_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_query_with_derived_metric_in_where_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_query_with_derived_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_query_with_derived_metric_in_where_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_query_with_derived_metric_in_where_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_query_with_derived_metric_in_where_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_query_with_multiple_metrics_in_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_query_with_multiple_metrics_in_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_query_with_multiple_metrics_in_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_query_with_multiple_metrics_in_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_query_with_multiple_metrics_in_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_query_with_multiple_metrics_in_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_query_with_multiple_metrics_in_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_query_with_multiple_metrics_in_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_query_with_ratio_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_query_with_ratio_metric_in_where_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_query_with_ratio_metric_in_where_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_query_with_ratio_metric_in_where_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_query_with_ratio_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_query_with_ratio_metric_in_where_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_query_with_ratio_metric_in_where_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_query_with_ratio_metric_in_where_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_query_with_simple_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_query_with_simple_metric_in_where_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_query_with_simple_metric_in_where_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_query_with_simple_metric_in_where_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_query_with_simple_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_query_with_simple_metric_in_where_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_query_with_simple_metric_in_where_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Databricks/test_query_with_simple_metric_in_where_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_distinct_values_query_with_metric_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_distinct_values_query_with_metric_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_distinct_values_query_with_metric_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_distinct_values_query_with_metric_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_distinct_values_query_with_metric_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_distinct_values_query_with_metric_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_distinct_values_query_with_metric_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_distinct_values_query_with_metric_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_metric_with_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_metric_with_metric_in_where_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_metric_with_metric_in_where_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_metric_with_metric_in_where_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_metric_with_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_metric_with_metric_in_where_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_metric_with_metric_in_where_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_metric_with_metric_in_where_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_query_with_cumulative_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_query_with_cumulative_metric_in_where_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_query_with_cumulative_metric_in_where_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_query_with_cumulative_metric_in_where_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_query_with_cumulative_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_query_with_cumulative_metric_in_where_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_query_with_cumulative_metric_in_where_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_query_with_cumulative_metric_in_where_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_query_with_derived_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_query_with_derived_metric_in_where_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_query_with_derived_metric_in_where_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_query_with_derived_metric_in_where_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_query_with_derived_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_query_with_derived_metric_in_where_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_query_with_derived_metric_in_where_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_query_with_derived_metric_in_where_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_query_with_multiple_metrics_in_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_query_with_multiple_metrics_in_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_query_with_multiple_metrics_in_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_query_with_multiple_metrics_in_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_query_with_multiple_metrics_in_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_query_with_multiple_metrics_in_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_query_with_multiple_metrics_in_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_query_with_multiple_metrics_in_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_query_with_ratio_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_query_with_ratio_metric_in_where_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_query_with_ratio_metric_in_where_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_query_with_ratio_metric_in_where_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_query_with_ratio_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_query_with_ratio_metric_in_where_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_query_with_ratio_metric_in_where_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_query_with_ratio_metric_in_where_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_query_with_simple_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_query_with_simple_metric_in_where_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_query_with_simple_metric_in_where_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_query_with_simple_metric_in_where_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_query_with_simple_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_query_with_simple_metric_in_where_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_query_with_simple_metric_in_where_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/DuckDB/test_query_with_simple_metric_in_where_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_distinct_values_query_with_metric_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_distinct_values_query_with_metric_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_distinct_values_query_with_metric_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_distinct_values_query_with_metric_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_distinct_values_query_with_metric_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_distinct_values_query_with_metric_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_distinct_values_query_with_metric_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_distinct_values_query_with_metric_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_metric_with_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_metric_with_metric_in_where_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_metric_with_metric_in_where_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_metric_with_metric_in_where_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_metric_with_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_metric_with_metric_in_where_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_metric_with_metric_in_where_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_metric_with_metric_in_where_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_query_with_cumulative_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_query_with_cumulative_metric_in_where_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_query_with_cumulative_metric_in_where_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_query_with_cumulative_metric_in_where_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_query_with_cumulative_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_query_with_cumulative_metric_in_where_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_query_with_cumulative_metric_in_where_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_query_with_cumulative_metric_in_where_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_query_with_derived_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_query_with_derived_metric_in_where_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_query_with_derived_metric_in_where_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_query_with_derived_metric_in_where_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_query_with_derived_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_query_with_derived_metric_in_where_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_query_with_derived_metric_in_where_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_query_with_derived_metric_in_where_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_query_with_multiple_metrics_in_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_query_with_multiple_metrics_in_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_query_with_multiple_metrics_in_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_query_with_multiple_metrics_in_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_query_with_multiple_metrics_in_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_query_with_multiple_metrics_in_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_query_with_multiple_metrics_in_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_query_with_multiple_metrics_in_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_query_with_ratio_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_query_with_ratio_metric_in_where_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_query_with_ratio_metric_in_where_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_query_with_ratio_metric_in_where_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_query_with_ratio_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_query_with_ratio_metric_in_where_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_query_with_ratio_metric_in_where_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_query_with_ratio_metric_in_where_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_query_with_simple_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_query_with_simple_metric_in_where_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_query_with_simple_metric_in_where_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_query_with_simple_metric_in_where_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_query_with_simple_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_query_with_simple_metric_in_where_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_query_with_simple_metric_in_where_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Postgres/test_query_with_simple_metric_in_where_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_distinct_values_query_with_metric_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_distinct_values_query_with_metric_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_distinct_values_query_with_metric_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_distinct_values_query_with_metric_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_distinct_values_query_with_metric_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_distinct_values_query_with_metric_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_distinct_values_query_with_metric_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_distinct_values_query_with_metric_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_metric_with_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_metric_with_metric_in_where_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_metric_with_metric_in_where_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_metric_with_metric_in_where_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_metric_with_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_metric_with_metric_in_where_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_metric_with_metric_in_where_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_metric_with_metric_in_where_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_query_with_cumulative_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_query_with_cumulative_metric_in_where_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_query_with_cumulative_metric_in_where_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_query_with_cumulative_metric_in_where_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_query_with_cumulative_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_query_with_cumulative_metric_in_where_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_query_with_cumulative_metric_in_where_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_query_with_cumulative_metric_in_where_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_query_with_derived_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_query_with_derived_metric_in_where_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_query_with_derived_metric_in_where_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_query_with_derived_metric_in_where_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_query_with_derived_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_query_with_derived_metric_in_where_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_query_with_derived_metric_in_where_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_query_with_derived_metric_in_where_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_query_with_multiple_metrics_in_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_query_with_multiple_metrics_in_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_query_with_multiple_metrics_in_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_query_with_multiple_metrics_in_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_query_with_multiple_metrics_in_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_query_with_multiple_metrics_in_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_query_with_multiple_metrics_in_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_query_with_multiple_metrics_in_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_query_with_ratio_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_query_with_ratio_metric_in_where_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_query_with_ratio_metric_in_where_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_query_with_ratio_metric_in_where_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_query_with_ratio_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_query_with_ratio_metric_in_where_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_query_with_ratio_metric_in_where_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_query_with_ratio_metric_in_where_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_query_with_simple_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_query_with_simple_metric_in_where_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_query_with_simple_metric_in_where_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_query_with_simple_metric_in_where_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_query_with_simple_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_query_with_simple_metric_in_where_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_query_with_simple_metric_in_where_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Redshift/test_query_with_simple_metric_in_where_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_distinct_values_query_with_metric_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_distinct_values_query_with_metric_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_distinct_values_query_with_metric_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_distinct_values_query_with_metric_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_distinct_values_query_with_metric_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_distinct_values_query_with_metric_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_distinct_values_query_with_metric_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_distinct_values_query_with_metric_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_metric_with_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_metric_with_metric_in_where_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_metric_with_metric_in_where_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_metric_with_metric_in_where_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_metric_with_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_metric_with_metric_in_where_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_metric_with_metric_in_where_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_metric_with_metric_in_where_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_query_with_cumulative_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_query_with_cumulative_metric_in_where_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_query_with_cumulative_metric_in_where_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_query_with_cumulative_metric_in_where_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_query_with_cumulative_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_query_with_cumulative_metric_in_where_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_query_with_cumulative_metric_in_where_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_query_with_cumulative_metric_in_where_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_query_with_derived_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_query_with_derived_metric_in_where_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_query_with_derived_metric_in_where_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_query_with_derived_metric_in_where_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_query_with_derived_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_query_with_derived_metric_in_where_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_query_with_derived_metric_in_where_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_query_with_derived_metric_in_where_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_query_with_multiple_metrics_in_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_query_with_multiple_metrics_in_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_query_with_multiple_metrics_in_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_query_with_multiple_metrics_in_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_query_with_multiple_metrics_in_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_query_with_multiple_metrics_in_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_query_with_multiple_metrics_in_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_query_with_multiple_metrics_in_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_query_with_ratio_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_query_with_ratio_metric_in_where_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_query_with_ratio_metric_in_where_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_query_with_ratio_metric_in_where_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_query_with_ratio_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_query_with_ratio_metric_in_where_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_query_with_ratio_metric_in_where_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_query_with_ratio_metric_in_where_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_query_with_simple_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_query_with_simple_metric_in_where_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_query_with_simple_metric_in_where_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_query_with_simple_metric_in_where_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_query_with_simple_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_query_with_simple_metric_in_where_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_query_with_simple_metric_in_where_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Snowflake/test_query_with_simple_metric_in_where_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_distinct_values_query_with_metric_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_distinct_values_query_with_metric_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_distinct_values_query_with_metric_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_distinct_values_query_with_metric_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_distinct_values_query_with_metric_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_distinct_values_query_with_metric_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_distinct_values_query_with_metric_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_distinct_values_query_with_metric_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_filter_by_metric_in_same_semantic_model_as_queried_metric__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_metric_with_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_metric_with_metric_in_where_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_metric_with_metric_in_where_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_metric_with_metric_in_where_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_metric_with_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_metric_with_metric_in_where_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_metric_with_metric_in_where_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_metric_with_metric_in_where_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_query_with_cumulative_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_query_with_cumulative_metric_in_where_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_query_with_cumulative_metric_in_where_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_query_with_cumulative_metric_in_where_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_query_with_cumulative_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_query_with_cumulative_metric_in_where_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_query_with_cumulative_metric_in_where_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_query_with_cumulative_metric_in_where_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_query_with_derived_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_query_with_derived_metric_in_where_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_query_with_derived_metric_in_where_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_query_with_derived_metric_in_where_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_query_with_derived_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_query_with_derived_metric_in_where_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_query_with_derived_metric_in_where_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_query_with_derived_metric_in_where_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_query_with_multiple_metrics_in_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_query_with_multiple_metrics_in_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_query_with_multiple_metrics_in_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_query_with_multiple_metrics_in_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_query_with_multiple_metrics_in_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_query_with_multiple_metrics_in_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_query_with_multiple_metrics_in_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_query_with_multiple_metrics_in_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_query_with_ratio_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_query_with_ratio_metric_in_where_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_query_with_ratio_metric_in_where_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_query_with_ratio_metric_in_where_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_query_with_ratio_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_query_with_ratio_metric_in_where_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_query_with_ratio_metric_in_where_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_query_with_ratio_metric_in_where_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_query_with_simple_metric_in_where_filter__plan0.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_query_with_simple_metric_in_where_filter__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_query_with_simple_metric_in_where_filter__plan0.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_query_with_simple_metric_in_where_filter__plan0.sql diff --git a/tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_query_with_simple_metric_in_where_filter__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_query_with_simple_metric_in_where_filter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_query_with_simple_metric_in_where_filter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_filter_rendering.py/SqlQueryPlan/Trino/test_query_with_simple_metric_in_where_filter__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/BigQuery/test_metric_time_dimension_transform_node_using_non_primary_time__plan0.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/BigQuery/test_metric_time_dimension_transform_node_using_non_primary_time__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/BigQuery/test_metric_time_dimension_transform_node_using_non_primary_time__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/BigQuery/test_metric_time_dimension_transform_node_using_non_primary_time__plan0.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/BigQuery/test_metric_time_dimension_transform_node_using_non_primary_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/BigQuery/test_metric_time_dimension_transform_node_using_non_primary_time__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/BigQuery/test_metric_time_dimension_transform_node_using_non_primary_time__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/BigQuery/test_metric_time_dimension_transform_node_using_non_primary_time__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/BigQuery/test_metric_time_dimension_transform_node_using_primary_time__plan0.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/BigQuery/test_metric_time_dimension_transform_node_using_primary_time__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/BigQuery/test_metric_time_dimension_transform_node_using_primary_time__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/BigQuery/test_metric_time_dimension_transform_node_using_primary_time__plan0.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/BigQuery/test_metric_time_dimension_transform_node_using_primary_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/BigQuery/test_metric_time_dimension_transform_node_using_primary_time__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/BigQuery/test_metric_time_dimension_transform_node_using_primary_time__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/BigQuery/test_metric_time_dimension_transform_node_using_primary_time__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/BigQuery/test_simple_query_with_metric_time_dimension__plan0.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/BigQuery/test_simple_query_with_metric_time_dimension__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/BigQuery/test_simple_query_with_metric_time_dimension__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/BigQuery/test_simple_query_with_metric_time_dimension__plan0.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/BigQuery/test_simple_query_with_metric_time_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/BigQuery/test_simple_query_with_metric_time_dimension__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/BigQuery/test_simple_query_with_metric_time_dimension__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/BigQuery/test_simple_query_with_metric_time_dimension__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Databricks/test_metric_time_dimension_transform_node_using_non_primary_time__plan0.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Databricks/test_metric_time_dimension_transform_node_using_non_primary_time__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Databricks/test_metric_time_dimension_transform_node_using_non_primary_time__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Databricks/test_metric_time_dimension_transform_node_using_non_primary_time__plan0.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Databricks/test_metric_time_dimension_transform_node_using_non_primary_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Databricks/test_metric_time_dimension_transform_node_using_non_primary_time__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Databricks/test_metric_time_dimension_transform_node_using_non_primary_time__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Databricks/test_metric_time_dimension_transform_node_using_non_primary_time__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Databricks/test_metric_time_dimension_transform_node_using_primary_time__plan0.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Databricks/test_metric_time_dimension_transform_node_using_primary_time__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Databricks/test_metric_time_dimension_transform_node_using_primary_time__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Databricks/test_metric_time_dimension_transform_node_using_primary_time__plan0.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Databricks/test_metric_time_dimension_transform_node_using_primary_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Databricks/test_metric_time_dimension_transform_node_using_primary_time__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Databricks/test_metric_time_dimension_transform_node_using_primary_time__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Databricks/test_metric_time_dimension_transform_node_using_primary_time__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Databricks/test_simple_query_with_metric_time_dimension__plan0.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Databricks/test_simple_query_with_metric_time_dimension__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Databricks/test_simple_query_with_metric_time_dimension__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Databricks/test_simple_query_with_metric_time_dimension__plan0.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Databricks/test_simple_query_with_metric_time_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Databricks/test_simple_query_with_metric_time_dimension__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Databricks/test_simple_query_with_metric_time_dimension__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Databricks/test_simple_query_with_metric_time_dimension__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/DuckDB/test_metric_time_dimension_transform_node_using_non_primary_time__plan0.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/DuckDB/test_metric_time_dimension_transform_node_using_non_primary_time__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/DuckDB/test_metric_time_dimension_transform_node_using_non_primary_time__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/DuckDB/test_metric_time_dimension_transform_node_using_non_primary_time__plan0.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/DuckDB/test_metric_time_dimension_transform_node_using_non_primary_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/DuckDB/test_metric_time_dimension_transform_node_using_non_primary_time__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/DuckDB/test_metric_time_dimension_transform_node_using_non_primary_time__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/DuckDB/test_metric_time_dimension_transform_node_using_non_primary_time__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/DuckDB/test_metric_time_dimension_transform_node_using_primary_time__plan0.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/DuckDB/test_metric_time_dimension_transform_node_using_primary_time__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/DuckDB/test_metric_time_dimension_transform_node_using_primary_time__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/DuckDB/test_metric_time_dimension_transform_node_using_primary_time__plan0.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/DuckDB/test_metric_time_dimension_transform_node_using_primary_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/DuckDB/test_metric_time_dimension_transform_node_using_primary_time__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/DuckDB/test_metric_time_dimension_transform_node_using_primary_time__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/DuckDB/test_metric_time_dimension_transform_node_using_primary_time__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/DuckDB/test_simple_query_with_metric_time_dimension__plan0.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/DuckDB/test_simple_query_with_metric_time_dimension__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/DuckDB/test_simple_query_with_metric_time_dimension__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/DuckDB/test_simple_query_with_metric_time_dimension__plan0.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/DuckDB/test_simple_query_with_metric_time_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/DuckDB/test_simple_query_with_metric_time_dimension__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/DuckDB/test_simple_query_with_metric_time_dimension__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/DuckDB/test_simple_query_with_metric_time_dimension__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Postgres/test_metric_time_dimension_transform_node_using_non_primary_time__plan0.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Postgres/test_metric_time_dimension_transform_node_using_non_primary_time__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Postgres/test_metric_time_dimension_transform_node_using_non_primary_time__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Postgres/test_metric_time_dimension_transform_node_using_non_primary_time__plan0.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Postgres/test_metric_time_dimension_transform_node_using_non_primary_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Postgres/test_metric_time_dimension_transform_node_using_non_primary_time__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Postgres/test_metric_time_dimension_transform_node_using_non_primary_time__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Postgres/test_metric_time_dimension_transform_node_using_non_primary_time__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Postgres/test_metric_time_dimension_transform_node_using_primary_time__plan0.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Postgres/test_metric_time_dimension_transform_node_using_primary_time__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Postgres/test_metric_time_dimension_transform_node_using_primary_time__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Postgres/test_metric_time_dimension_transform_node_using_primary_time__plan0.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Postgres/test_metric_time_dimension_transform_node_using_primary_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Postgres/test_metric_time_dimension_transform_node_using_primary_time__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Postgres/test_metric_time_dimension_transform_node_using_primary_time__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Postgres/test_metric_time_dimension_transform_node_using_primary_time__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Postgres/test_simple_query_with_metric_time_dimension__plan0.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Postgres/test_simple_query_with_metric_time_dimension__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Postgres/test_simple_query_with_metric_time_dimension__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Postgres/test_simple_query_with_metric_time_dimension__plan0.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Postgres/test_simple_query_with_metric_time_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Postgres/test_simple_query_with_metric_time_dimension__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Postgres/test_simple_query_with_metric_time_dimension__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Postgres/test_simple_query_with_metric_time_dimension__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Redshift/test_metric_time_dimension_transform_node_using_non_primary_time__plan0.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Redshift/test_metric_time_dimension_transform_node_using_non_primary_time__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Redshift/test_metric_time_dimension_transform_node_using_non_primary_time__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Redshift/test_metric_time_dimension_transform_node_using_non_primary_time__plan0.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Redshift/test_metric_time_dimension_transform_node_using_non_primary_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Redshift/test_metric_time_dimension_transform_node_using_non_primary_time__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Redshift/test_metric_time_dimension_transform_node_using_non_primary_time__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Redshift/test_metric_time_dimension_transform_node_using_non_primary_time__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Redshift/test_metric_time_dimension_transform_node_using_primary_time__plan0.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Redshift/test_metric_time_dimension_transform_node_using_primary_time__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Redshift/test_metric_time_dimension_transform_node_using_primary_time__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Redshift/test_metric_time_dimension_transform_node_using_primary_time__plan0.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Redshift/test_metric_time_dimension_transform_node_using_primary_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Redshift/test_metric_time_dimension_transform_node_using_primary_time__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Redshift/test_metric_time_dimension_transform_node_using_primary_time__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Redshift/test_metric_time_dimension_transform_node_using_primary_time__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Redshift/test_simple_query_with_metric_time_dimension__plan0.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Redshift/test_simple_query_with_metric_time_dimension__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Redshift/test_simple_query_with_metric_time_dimension__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Redshift/test_simple_query_with_metric_time_dimension__plan0.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Redshift/test_simple_query_with_metric_time_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Redshift/test_simple_query_with_metric_time_dimension__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Redshift/test_simple_query_with_metric_time_dimension__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Redshift/test_simple_query_with_metric_time_dimension__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Snowflake/test_metric_time_dimension_transform_node_using_non_primary_time__plan0.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Snowflake/test_metric_time_dimension_transform_node_using_non_primary_time__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Snowflake/test_metric_time_dimension_transform_node_using_non_primary_time__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Snowflake/test_metric_time_dimension_transform_node_using_non_primary_time__plan0.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Snowflake/test_metric_time_dimension_transform_node_using_non_primary_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Snowflake/test_metric_time_dimension_transform_node_using_non_primary_time__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Snowflake/test_metric_time_dimension_transform_node_using_non_primary_time__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Snowflake/test_metric_time_dimension_transform_node_using_non_primary_time__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Snowflake/test_metric_time_dimension_transform_node_using_primary_time__plan0.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Snowflake/test_metric_time_dimension_transform_node_using_primary_time__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Snowflake/test_metric_time_dimension_transform_node_using_primary_time__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Snowflake/test_metric_time_dimension_transform_node_using_primary_time__plan0.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Snowflake/test_metric_time_dimension_transform_node_using_primary_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Snowflake/test_metric_time_dimension_transform_node_using_primary_time__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Snowflake/test_metric_time_dimension_transform_node_using_primary_time__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Snowflake/test_metric_time_dimension_transform_node_using_primary_time__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Snowflake/test_simple_query_with_metric_time_dimension__plan0.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Snowflake/test_simple_query_with_metric_time_dimension__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Snowflake/test_simple_query_with_metric_time_dimension__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Snowflake/test_simple_query_with_metric_time_dimension__plan0.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Snowflake/test_simple_query_with_metric_time_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Snowflake/test_simple_query_with_metric_time_dimension__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Snowflake/test_simple_query_with_metric_time_dimension__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Snowflake/test_simple_query_with_metric_time_dimension__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Trino/test_metric_time_dimension_transform_node_using_non_primary_time__plan0.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Trino/test_metric_time_dimension_transform_node_using_non_primary_time__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Trino/test_metric_time_dimension_transform_node_using_non_primary_time__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Trino/test_metric_time_dimension_transform_node_using_non_primary_time__plan0.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Trino/test_metric_time_dimension_transform_node_using_non_primary_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Trino/test_metric_time_dimension_transform_node_using_non_primary_time__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Trino/test_metric_time_dimension_transform_node_using_non_primary_time__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Trino/test_metric_time_dimension_transform_node_using_non_primary_time__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Trino/test_metric_time_dimension_transform_node_using_primary_time__plan0.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Trino/test_metric_time_dimension_transform_node_using_primary_time__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Trino/test_metric_time_dimension_transform_node_using_primary_time__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Trino/test_metric_time_dimension_transform_node_using_primary_time__plan0.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Trino/test_metric_time_dimension_transform_node_using_primary_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Trino/test_metric_time_dimension_transform_node_using_primary_time__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Trino/test_metric_time_dimension_transform_node_using_primary_time__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Trino/test_metric_time_dimension_transform_node_using_primary_time__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Trino/test_simple_query_with_metric_time_dimension__plan0.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Trino/test_simple_query_with_metric_time_dimension__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Trino/test_simple_query_with_metric_time_dimension__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Trino/test_simple_query_with_metric_time_dimension__plan0.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Trino/test_simple_query_with_metric_time_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Trino/test_simple_query_with_metric_time_dimension__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Trino/test_simple_query_with_metric_time_dimension__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/Trino/test_simple_query_with_metric_time_dimension__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/test_metric_time_dimension_transform_node_using_non_primary_time__plan0.xml b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/test_metric_time_dimension_transform_node_using_non_primary_time__plan0.xml similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/test_metric_time_dimension_transform_node_using_non_primary_time__plan0.xml rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/test_metric_time_dimension_transform_node_using_non_primary_time__plan0.xml diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/test_metric_time_dimension_transform_node_using_primary_time__plan0.xml b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/test_metric_time_dimension_transform_node_using_primary_time__plan0.xml similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/test_metric_time_dimension_transform_node_using_primary_time__plan0.xml rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/test_metric_time_dimension_transform_node_using_primary_time__plan0.xml diff --git a/tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/test_simple_query_with_metric_time_dimension__plan0.xml b/tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/test_simple_query_with_metric_time_dimension__plan0.xml similarity index 100% rename from tests/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/test_simple_query_with_metric_time_dimension__plan0.xml rename to tests_metricflow/snapshots/test_metric_time_dimension_to_sql.py/SqlQueryPlan/test_simple_query_with_metric_time_dimension__plan0.xml diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/BigQuery/test_dimensions_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/BigQuery/test_dimensions_with_time_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/BigQuery/test_dimensions_with_time_constraint__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/BigQuery/test_dimensions_with_time_constraint__plan0.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/BigQuery/test_dimensions_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/BigQuery/test_dimensions_with_time_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/BigQuery/test_dimensions_with_time_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/BigQuery/test_dimensions_with_time_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/BigQuery/test_metric_time_only__plan0.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/BigQuery/test_metric_time_only__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/BigQuery/test_metric_time_only__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/BigQuery/test_metric_time_only__plan0.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/BigQuery/test_metric_time_only__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/BigQuery/test_metric_time_only__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/BigQuery/test_metric_time_only__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/BigQuery/test_metric_time_only__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/BigQuery/test_metric_time_quarter_alone__plan0.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/BigQuery/test_metric_time_quarter_alone__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/BigQuery/test_metric_time_quarter_alone__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/BigQuery/test_metric_time_quarter_alone__plan0.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/BigQuery/test_metric_time_quarter_alone__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/BigQuery/test_metric_time_quarter_alone__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/BigQuery/test_metric_time_quarter_alone__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/BigQuery/test_metric_time_quarter_alone__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/BigQuery/test_metric_time_with_other_dimensions__plan0.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/BigQuery/test_metric_time_with_other_dimensions__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/BigQuery/test_metric_time_with_other_dimensions__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/BigQuery/test_metric_time_with_other_dimensions__plan0.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/BigQuery/test_metric_time_with_other_dimensions__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/BigQuery/test_metric_time_with_other_dimensions__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/BigQuery/test_metric_time_with_other_dimensions__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/BigQuery/test_metric_time_with_other_dimensions__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Databricks/test_dimensions_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Databricks/test_dimensions_with_time_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Databricks/test_dimensions_with_time_constraint__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Databricks/test_dimensions_with_time_constraint__plan0.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Databricks/test_dimensions_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Databricks/test_dimensions_with_time_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Databricks/test_dimensions_with_time_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Databricks/test_dimensions_with_time_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Databricks/test_metric_time_only__plan0.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Databricks/test_metric_time_only__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Databricks/test_metric_time_only__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Databricks/test_metric_time_only__plan0.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Databricks/test_metric_time_only__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Databricks/test_metric_time_only__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Databricks/test_metric_time_only__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Databricks/test_metric_time_only__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Databricks/test_metric_time_quarter_alone__plan0.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Databricks/test_metric_time_quarter_alone__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Databricks/test_metric_time_quarter_alone__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Databricks/test_metric_time_quarter_alone__plan0.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Databricks/test_metric_time_quarter_alone__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Databricks/test_metric_time_quarter_alone__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Databricks/test_metric_time_quarter_alone__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Databricks/test_metric_time_quarter_alone__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Databricks/test_metric_time_with_other_dimensions__plan0.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Databricks/test_metric_time_with_other_dimensions__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Databricks/test_metric_time_with_other_dimensions__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Databricks/test_metric_time_with_other_dimensions__plan0.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Databricks/test_metric_time_with_other_dimensions__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Databricks/test_metric_time_with_other_dimensions__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Databricks/test_metric_time_with_other_dimensions__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Databricks/test_metric_time_with_other_dimensions__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/DuckDB/test_dimensions_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/DuckDB/test_dimensions_with_time_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/DuckDB/test_dimensions_with_time_constraint__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/DuckDB/test_dimensions_with_time_constraint__plan0.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/DuckDB/test_dimensions_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/DuckDB/test_dimensions_with_time_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/DuckDB/test_dimensions_with_time_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/DuckDB/test_dimensions_with_time_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/DuckDB/test_metric_time_only__plan0.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/DuckDB/test_metric_time_only__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/DuckDB/test_metric_time_only__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/DuckDB/test_metric_time_only__plan0.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/DuckDB/test_metric_time_only__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/DuckDB/test_metric_time_only__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/DuckDB/test_metric_time_only__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/DuckDB/test_metric_time_only__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/DuckDB/test_metric_time_quarter_alone__plan0.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/DuckDB/test_metric_time_quarter_alone__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/DuckDB/test_metric_time_quarter_alone__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/DuckDB/test_metric_time_quarter_alone__plan0.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/DuckDB/test_metric_time_quarter_alone__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/DuckDB/test_metric_time_quarter_alone__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/DuckDB/test_metric_time_quarter_alone__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/DuckDB/test_metric_time_quarter_alone__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/DuckDB/test_metric_time_with_other_dimensions__plan0.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/DuckDB/test_metric_time_with_other_dimensions__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/DuckDB/test_metric_time_with_other_dimensions__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/DuckDB/test_metric_time_with_other_dimensions__plan0.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/DuckDB/test_metric_time_with_other_dimensions__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/DuckDB/test_metric_time_with_other_dimensions__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/DuckDB/test_metric_time_with_other_dimensions__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/DuckDB/test_metric_time_with_other_dimensions__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Postgres/test_dimensions_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Postgres/test_dimensions_with_time_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Postgres/test_dimensions_with_time_constraint__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Postgres/test_dimensions_with_time_constraint__plan0.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Postgres/test_dimensions_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Postgres/test_dimensions_with_time_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Postgres/test_dimensions_with_time_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Postgres/test_dimensions_with_time_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Postgres/test_metric_time_only__plan0.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Postgres/test_metric_time_only__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Postgres/test_metric_time_only__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Postgres/test_metric_time_only__plan0.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Postgres/test_metric_time_only__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Postgres/test_metric_time_only__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Postgres/test_metric_time_only__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Postgres/test_metric_time_only__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Postgres/test_metric_time_quarter_alone__plan0.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Postgres/test_metric_time_quarter_alone__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Postgres/test_metric_time_quarter_alone__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Postgres/test_metric_time_quarter_alone__plan0.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Postgres/test_metric_time_quarter_alone__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Postgres/test_metric_time_quarter_alone__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Postgres/test_metric_time_quarter_alone__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Postgres/test_metric_time_quarter_alone__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Postgres/test_metric_time_with_other_dimensions__plan0.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Postgres/test_metric_time_with_other_dimensions__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Postgres/test_metric_time_with_other_dimensions__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Postgres/test_metric_time_with_other_dimensions__plan0.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Postgres/test_metric_time_with_other_dimensions__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Postgres/test_metric_time_with_other_dimensions__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Postgres/test_metric_time_with_other_dimensions__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Postgres/test_metric_time_with_other_dimensions__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Redshift/test_dimensions_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Redshift/test_dimensions_with_time_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Redshift/test_dimensions_with_time_constraint__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Redshift/test_dimensions_with_time_constraint__plan0.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Redshift/test_dimensions_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Redshift/test_dimensions_with_time_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Redshift/test_dimensions_with_time_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Redshift/test_dimensions_with_time_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Redshift/test_metric_time_only__plan0.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Redshift/test_metric_time_only__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Redshift/test_metric_time_only__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Redshift/test_metric_time_only__plan0.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Redshift/test_metric_time_only__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Redshift/test_metric_time_only__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Redshift/test_metric_time_only__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Redshift/test_metric_time_only__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Redshift/test_metric_time_quarter_alone__plan0.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Redshift/test_metric_time_quarter_alone__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Redshift/test_metric_time_quarter_alone__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Redshift/test_metric_time_quarter_alone__plan0.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Redshift/test_metric_time_quarter_alone__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Redshift/test_metric_time_quarter_alone__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Redshift/test_metric_time_quarter_alone__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Redshift/test_metric_time_quarter_alone__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Redshift/test_metric_time_with_other_dimensions__plan0.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Redshift/test_metric_time_with_other_dimensions__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Redshift/test_metric_time_with_other_dimensions__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Redshift/test_metric_time_with_other_dimensions__plan0.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Redshift/test_metric_time_with_other_dimensions__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Redshift/test_metric_time_with_other_dimensions__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Redshift/test_metric_time_with_other_dimensions__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Redshift/test_metric_time_with_other_dimensions__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Snowflake/test_dimensions_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Snowflake/test_dimensions_with_time_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Snowflake/test_dimensions_with_time_constraint__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Snowflake/test_dimensions_with_time_constraint__plan0.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Snowflake/test_dimensions_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Snowflake/test_dimensions_with_time_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Snowflake/test_dimensions_with_time_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Snowflake/test_dimensions_with_time_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Snowflake/test_metric_time_only__plan0.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Snowflake/test_metric_time_only__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Snowflake/test_metric_time_only__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Snowflake/test_metric_time_only__plan0.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Snowflake/test_metric_time_only__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Snowflake/test_metric_time_only__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Snowflake/test_metric_time_only__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Snowflake/test_metric_time_only__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Snowflake/test_metric_time_quarter_alone__plan0.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Snowflake/test_metric_time_quarter_alone__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Snowflake/test_metric_time_quarter_alone__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Snowflake/test_metric_time_quarter_alone__plan0.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Snowflake/test_metric_time_quarter_alone__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Snowflake/test_metric_time_quarter_alone__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Snowflake/test_metric_time_quarter_alone__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Snowflake/test_metric_time_quarter_alone__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Snowflake/test_metric_time_with_other_dimensions__plan0.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Snowflake/test_metric_time_with_other_dimensions__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Snowflake/test_metric_time_with_other_dimensions__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Snowflake/test_metric_time_with_other_dimensions__plan0.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Snowflake/test_metric_time_with_other_dimensions__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Snowflake/test_metric_time_with_other_dimensions__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Snowflake/test_metric_time_with_other_dimensions__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Snowflake/test_metric_time_with_other_dimensions__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Trino/test_dimensions_with_time_constraint__plan0.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Trino/test_dimensions_with_time_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Trino/test_dimensions_with_time_constraint__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Trino/test_dimensions_with_time_constraint__plan0.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Trino/test_dimensions_with_time_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Trino/test_dimensions_with_time_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Trino/test_dimensions_with_time_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Trino/test_dimensions_with_time_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Trino/test_metric_time_only__plan0.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Trino/test_metric_time_only__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Trino/test_metric_time_only__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Trino/test_metric_time_only__plan0.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Trino/test_metric_time_only__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Trino/test_metric_time_only__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Trino/test_metric_time_only__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Trino/test_metric_time_only__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Trino/test_metric_time_quarter_alone__plan0.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Trino/test_metric_time_quarter_alone__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Trino/test_metric_time_quarter_alone__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Trino/test_metric_time_quarter_alone__plan0.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Trino/test_metric_time_quarter_alone__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Trino/test_metric_time_quarter_alone__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Trino/test_metric_time_quarter_alone__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Trino/test_metric_time_quarter_alone__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Trino/test_metric_time_with_other_dimensions__plan0.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Trino/test_metric_time_with_other_dimensions__plan0.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Trino/test_metric_time_with_other_dimensions__plan0.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Trino/test_metric_time_with_other_dimensions__plan0.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Trino/test_metric_time_with_other_dimensions__plan0_optimized.sql b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Trino/test_metric_time_with_other_dimensions__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Trino/test_metric_time_with_other_dimensions__plan0_optimized.sql rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/Trino/test_metric_time_with_other_dimensions__plan0_optimized.sql diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/test_dimensions_with_time_constraint__plan0.xml b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/test_dimensions_with_time_constraint__plan0.xml similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/test_dimensions_with_time_constraint__plan0.xml rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/test_dimensions_with_time_constraint__plan0.xml diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/test_metric_time_only__plan0.xml b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/test_metric_time_only__plan0.xml similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/test_metric_time_only__plan0.xml rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/test_metric_time_only__plan0.xml diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/test_metric_time_quarter_alone__plan0.xml b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/test_metric_time_quarter_alone__plan0.xml similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/test_metric_time_quarter_alone__plan0.xml rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/test_metric_time_quarter_alone__plan0.xml diff --git a/tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/test_metric_time_with_other_dimensions__plan0.xml b/tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/test_metric_time_with_other_dimensions__plan0.xml similarity index 100% rename from tests/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/test_metric_time_with_other_dimensions__plan0.xml rename to tests_metricflow/snapshots/test_metric_time_without_metrics.py/SqlQueryPlan/test_metric_time_with_other_dimensions__plan0.xml diff --git a/tests/snapshots/test_mf_engine.py/list/test_list_dimensions__result0.txt b/tests_metricflow/snapshots/test_mf_engine.py/list/test_list_dimensions__result0.txt similarity index 100% rename from tests/snapshots/test_mf_engine.py/list/test_list_dimensions__result0.txt rename to tests_metricflow/snapshots/test_mf_engine.py/list/test_list_dimensions__result0.txt diff --git a/tests/snapshots/test_node_data_set.py/list/test_joined_node_data_set__result0.txt b/tests_metricflow/snapshots/test_node_data_set.py/list/test_joined_node_data_set__result0.txt similarity index 100% rename from tests/snapshots/test_node_data_set.py/list/test_joined_node_data_set__result0.txt rename to tests_metricflow/snapshots/test_node_data_set.py/list/test_joined_node_data_set__result0.txt diff --git a/tests/snapshots/test_offset_metrics.py/str/BigQuery/test_offset_to_grain_with_multiple_granularities__query_output.txt b/tests_metricflow/snapshots/test_offset_metrics.py/str/BigQuery/test_offset_to_grain_with_multiple_granularities__query_output.txt similarity index 100% rename from tests/snapshots/test_offset_metrics.py/str/BigQuery/test_offset_to_grain_with_multiple_granularities__query_output.txt rename to tests_metricflow/snapshots/test_offset_metrics.py/str/BigQuery/test_offset_to_grain_with_multiple_granularities__query_output.txt diff --git a/tests/snapshots/test_offset_metrics.py/str/BigQuery/test_offset_to_grain_with_single_granularity__query_output.txt b/tests_metricflow/snapshots/test_offset_metrics.py/str/BigQuery/test_offset_to_grain_with_single_granularity__query_output.txt similarity index 100% rename from tests/snapshots/test_offset_metrics.py/str/BigQuery/test_offset_to_grain_with_single_granularity__query_output.txt rename to tests_metricflow/snapshots/test_offset_metrics.py/str/BigQuery/test_offset_to_grain_with_single_granularity__query_output.txt diff --git a/tests/snapshots/test_offset_metrics.py/str/Databricks/test_offset_to_grain_with_multiple_granularities__query_output.txt b/tests_metricflow/snapshots/test_offset_metrics.py/str/Databricks/test_offset_to_grain_with_multiple_granularities__query_output.txt similarity index 100% rename from tests/snapshots/test_offset_metrics.py/str/Databricks/test_offset_to_grain_with_multiple_granularities__query_output.txt rename to tests_metricflow/snapshots/test_offset_metrics.py/str/Databricks/test_offset_to_grain_with_multiple_granularities__query_output.txt diff --git a/tests/snapshots/test_offset_metrics.py/str/Databricks/test_offset_to_grain_with_single_granularity__query_output.txt b/tests_metricflow/snapshots/test_offset_metrics.py/str/Databricks/test_offset_to_grain_with_single_granularity__query_output.txt similarity index 100% rename from tests/snapshots/test_offset_metrics.py/str/Databricks/test_offset_to_grain_with_single_granularity__query_output.txt rename to tests_metricflow/snapshots/test_offset_metrics.py/str/Databricks/test_offset_to_grain_with_single_granularity__query_output.txt diff --git a/tests/snapshots/test_offset_metrics.py/str/DuckDB/test_offset_to_grain_with_multiple_granularities__query_output.txt b/tests_metricflow/snapshots/test_offset_metrics.py/str/DuckDB/test_offset_to_grain_with_multiple_granularities__query_output.txt similarity index 100% rename from tests/snapshots/test_offset_metrics.py/str/DuckDB/test_offset_to_grain_with_multiple_granularities__query_output.txt rename to tests_metricflow/snapshots/test_offset_metrics.py/str/DuckDB/test_offset_to_grain_with_multiple_granularities__query_output.txt diff --git a/tests/snapshots/test_offset_metrics.py/str/DuckDB/test_offset_to_grain_with_single_granularity__query_output.txt b/tests_metricflow/snapshots/test_offset_metrics.py/str/DuckDB/test_offset_to_grain_with_single_granularity__query_output.txt similarity index 100% rename from tests/snapshots/test_offset_metrics.py/str/DuckDB/test_offset_to_grain_with_single_granularity__query_output.txt rename to tests_metricflow/snapshots/test_offset_metrics.py/str/DuckDB/test_offset_to_grain_with_single_granularity__query_output.txt diff --git a/tests/snapshots/test_offset_metrics.py/str/Postgres/test_offset_to_grain_with_multiple_granularities__query_output.txt b/tests_metricflow/snapshots/test_offset_metrics.py/str/Postgres/test_offset_to_grain_with_multiple_granularities__query_output.txt similarity index 100% rename from tests/snapshots/test_offset_metrics.py/str/Postgres/test_offset_to_grain_with_multiple_granularities__query_output.txt rename to tests_metricflow/snapshots/test_offset_metrics.py/str/Postgres/test_offset_to_grain_with_multiple_granularities__query_output.txt diff --git a/tests/snapshots/test_offset_metrics.py/str/Postgres/test_offset_to_grain_with_single_granularity__query_output.txt b/tests_metricflow/snapshots/test_offset_metrics.py/str/Postgres/test_offset_to_grain_with_single_granularity__query_output.txt similarity index 100% rename from tests/snapshots/test_offset_metrics.py/str/Postgres/test_offset_to_grain_with_single_granularity__query_output.txt rename to tests_metricflow/snapshots/test_offset_metrics.py/str/Postgres/test_offset_to_grain_with_single_granularity__query_output.txt diff --git a/tests/snapshots/test_offset_metrics.py/str/Redshift/test_offset_to_grain_with_multiple_granularities__query_output.txt b/tests_metricflow/snapshots/test_offset_metrics.py/str/Redshift/test_offset_to_grain_with_multiple_granularities__query_output.txt similarity index 100% rename from tests/snapshots/test_offset_metrics.py/str/Redshift/test_offset_to_grain_with_multiple_granularities__query_output.txt rename to tests_metricflow/snapshots/test_offset_metrics.py/str/Redshift/test_offset_to_grain_with_multiple_granularities__query_output.txt diff --git a/tests/snapshots/test_offset_metrics.py/str/Redshift/test_offset_to_grain_with_single_granularity__query_output.txt b/tests_metricflow/snapshots/test_offset_metrics.py/str/Redshift/test_offset_to_grain_with_single_granularity__query_output.txt similarity index 100% rename from tests/snapshots/test_offset_metrics.py/str/Redshift/test_offset_to_grain_with_single_granularity__query_output.txt rename to tests_metricflow/snapshots/test_offset_metrics.py/str/Redshift/test_offset_to_grain_with_single_granularity__query_output.txt diff --git a/tests/snapshots/test_offset_metrics.py/str/Snowflake/test_offset_to_grain_with_multiple_granularities__query_output.txt b/tests_metricflow/snapshots/test_offset_metrics.py/str/Snowflake/test_offset_to_grain_with_multiple_granularities__query_output.txt similarity index 100% rename from tests/snapshots/test_offset_metrics.py/str/Snowflake/test_offset_to_grain_with_multiple_granularities__query_output.txt rename to tests_metricflow/snapshots/test_offset_metrics.py/str/Snowflake/test_offset_to_grain_with_multiple_granularities__query_output.txt diff --git a/tests/snapshots/test_offset_metrics.py/str/Snowflake/test_offset_to_grain_with_single_granularity__query_output.txt b/tests_metricflow/snapshots/test_offset_metrics.py/str/Snowflake/test_offset_to_grain_with_single_granularity__query_output.txt similarity index 100% rename from tests/snapshots/test_offset_metrics.py/str/Snowflake/test_offset_to_grain_with_single_granularity__query_output.txt rename to tests_metricflow/snapshots/test_offset_metrics.py/str/Snowflake/test_offset_to_grain_with_single_granularity__query_output.txt diff --git a/tests/snapshots/test_offset_metrics.py/str/Trino/test_offset_to_grain_with_multiple_granularities__query_output.txt b/tests_metricflow/snapshots/test_offset_metrics.py/str/Trino/test_offset_to_grain_with_multiple_granularities__query_output.txt similarity index 100% rename from tests/snapshots/test_offset_metrics.py/str/Trino/test_offset_to_grain_with_multiple_granularities__query_output.txt rename to tests_metricflow/snapshots/test_offset_metrics.py/str/Trino/test_offset_to_grain_with_multiple_granularities__query_output.txt diff --git a/tests/snapshots/test_offset_metrics.py/str/Trino/test_offset_to_grain_with_single_granularity__query_output.txt b/tests_metricflow/snapshots/test_offset_metrics.py/str/Trino/test_offset_to_grain_with_single_granularity__query_output.txt similarity index 100% rename from tests/snapshots/test_offset_metrics.py/str/Trino/test_offset_to_grain_with_single_granularity__query_output.txt rename to tests_metricflow/snapshots/test_offset_metrics.py/str/Trino/test_offset_to_grain_with_single_granularity__query_output.txt diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_common_semantic_model__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_common_semantic_model__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_common_semantic_model__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_common_semantic_model__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_common_semantic_model__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_common_semantic_model__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_common_semantic_model__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_common_semantic_model__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_distinct_values__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_distinct_values__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_distinct_values__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_distinct_values__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_distinct_values__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_distinct_values__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_distinct_values__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_distinct_values__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_filter_with_where_constraint_on_join_dim__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_filter_with_where_constraint_on_join_dim__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_filter_with_where_constraint_on_join_dim__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_filter_with_where_constraint_on_join_dim__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_filter_with_where_constraint_on_join_dim__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_filter_with_where_constraint_on_join_dim__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_filter_with_where_constraint_on_join_dim__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_filter_with_where_constraint_on_join_dim__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_join_to_scd_dimension__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_join_to_scd_dimension__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_join_to_scd_dimension__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_join_to_scd_dimension__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_join_to_scd_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_join_to_scd_dimension__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_join_to_scd_dimension__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_join_to_scd_dimension__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_limit_rows__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_limit_rows__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_limit_rows__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_limit_rows__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_limit_rows__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_limit_rows__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_limit_rows__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_limit_rows__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_local_dimension_using_local_entity__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_local_dimension_using_local_entity__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_local_dimension_using_local_entity__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_local_dimension_using_local_entity__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_local_dimension_using_local_entity__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_local_dimension_using_local_entity__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_local_dimension_using_local_entity__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_local_dimension_using_local_entity__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_measure_constraint__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_measure_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_measure_constraint__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_measure_constraint__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_measure_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_measure_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_measure_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_measure_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_measure_constraint_with_reused_measure__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_measure_constraint_with_reused_measure__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_measure_constraint_with_reused_measure__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_measure_constraint_with_reused_measure__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_measure_constraint_with_reused_measure__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_measure_constraint_with_reused_measure__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_measure_constraint_with_reused_measure__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_measure_constraint_with_reused_measure__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_measure_constraint_with_single_expr_and_alias__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_measure_constraint_with_single_expr_and_alias__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_measure_constraint_with_single_expr_and_alias__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_measure_constraint_with_single_expr_and_alias__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_measure_constraint_with_single_expr_and_alias__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_measure_constraint_with_single_expr_and_alias__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_measure_constraint_with_single_expr_and_alias__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_measure_constraint_with_single_expr_and_alias__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_min_max_metric_time__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_min_max_metric_time__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_min_max_metric_time__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_min_max_metric_time__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_min_max_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_min_max_metric_time__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_min_max_metric_time__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_min_max_metric_time__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_min_max_metric_time_week__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_min_max_metric_time_week__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_min_max_metric_time_week__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_min_max_metric_time_week__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_min_max_metric_time_week__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_min_max_metric_time_week__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_min_max_metric_time_week__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_min_max_metric_time_week__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_min_max_only_categorical__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_min_max_only_categorical__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_min_max_only_categorical__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_min_max_only_categorical__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_min_max_only_categorical__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_min_max_only_categorical__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_min_max_only_categorical__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_min_max_only_categorical__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_min_max_only_time__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_min_max_only_time__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_min_max_only_time__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_min_max_only_time__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_min_max_only_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_min_max_only_time__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_min_max_only_time__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_min_max_only_time__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_min_max_only_time_quarter__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_min_max_only_time_quarter__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_min_max_only_time_quarter__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_min_max_only_time_quarter__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_min_max_only_time_quarter__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_min_max_only_time_quarter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_min_max_only_time_quarter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_min_max_only_time_quarter__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_multi_hop_through_scd_dimension__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_multi_hop_through_scd_dimension__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_multi_hop_through_scd_dimension__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_multi_hop_through_scd_dimension__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_multi_hop_through_scd_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_multi_hop_through_scd_dimension__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_multi_hop_through_scd_dimension__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_multi_hop_through_scd_dimension__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_multi_hop_to_scd_dimension__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_multi_hop_to_scd_dimension__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_multi_hop_to_scd_dimension__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_multi_hop_to_scd_dimension__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_multi_hop_to_scd_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_multi_hop_to_scd_dimension__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_multi_hop_to_scd_dimension__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_multi_hop_to_scd_dimension__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_multihop_node__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_multihop_node__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_multihop_node__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_multihop_node__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_multihop_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_multihop_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_multihop_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_multihop_node__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_multiple_metrics_no_dimensions__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_multiple_metrics_no_dimensions__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_multiple_metrics_no_dimensions__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_multiple_metrics_no_dimensions__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_multiple_metrics_no_dimensions__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_multiple_metrics_no_dimensions__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_multiple_metrics_no_dimensions__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_multiple_metrics_no_dimensions__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_partitioned_join__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_partitioned_join__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_partitioned_join__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_partitioned_join__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_partitioned_join__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_partitioned_join__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_partitioned_join__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/BigQuery/test_partitioned_join__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_common_semantic_model__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_common_semantic_model__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_common_semantic_model__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_common_semantic_model__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_common_semantic_model__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_common_semantic_model__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_common_semantic_model__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_common_semantic_model__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_distinct_values__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_distinct_values__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_distinct_values__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_distinct_values__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_distinct_values__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_distinct_values__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_distinct_values__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_distinct_values__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_filter_with_where_constraint_on_join_dim__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_filter_with_where_constraint_on_join_dim__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_filter_with_where_constraint_on_join_dim__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_filter_with_where_constraint_on_join_dim__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_filter_with_where_constraint_on_join_dim__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_filter_with_where_constraint_on_join_dim__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_filter_with_where_constraint_on_join_dim__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_filter_with_where_constraint_on_join_dim__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_join_to_scd_dimension__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_join_to_scd_dimension__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_join_to_scd_dimension__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_join_to_scd_dimension__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_join_to_scd_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_join_to_scd_dimension__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_join_to_scd_dimension__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_join_to_scd_dimension__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_limit_rows__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_limit_rows__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_limit_rows__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_limit_rows__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_limit_rows__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_limit_rows__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_limit_rows__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_limit_rows__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_local_dimension_using_local_entity__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_local_dimension_using_local_entity__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_local_dimension_using_local_entity__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_local_dimension_using_local_entity__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_local_dimension_using_local_entity__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_local_dimension_using_local_entity__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_local_dimension_using_local_entity__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_local_dimension_using_local_entity__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_measure_constraint__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_measure_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_measure_constraint__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_measure_constraint__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_measure_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_measure_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_measure_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_measure_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_measure_constraint_with_reused_measure__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_measure_constraint_with_reused_measure__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_measure_constraint_with_reused_measure__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_measure_constraint_with_reused_measure__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_measure_constraint_with_reused_measure__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_measure_constraint_with_reused_measure__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_measure_constraint_with_reused_measure__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_measure_constraint_with_reused_measure__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_measure_constraint_with_single_expr_and_alias__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_measure_constraint_with_single_expr_and_alias__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_measure_constraint_with_single_expr_and_alias__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_measure_constraint_with_single_expr_and_alias__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_measure_constraint_with_single_expr_and_alias__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_measure_constraint_with_single_expr_and_alias__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_measure_constraint_with_single_expr_and_alias__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_measure_constraint_with_single_expr_and_alias__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_min_max_metric_time__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_min_max_metric_time__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_min_max_metric_time__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_min_max_metric_time__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_min_max_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_min_max_metric_time__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_min_max_metric_time__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_min_max_metric_time__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_min_max_metric_time_week__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_min_max_metric_time_week__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_min_max_metric_time_week__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_min_max_metric_time_week__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_min_max_metric_time_week__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_min_max_metric_time_week__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_min_max_metric_time_week__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_min_max_metric_time_week__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_min_max_only_categorical__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_min_max_only_categorical__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_min_max_only_categorical__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_min_max_only_categorical__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_min_max_only_categorical__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_min_max_only_categorical__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_min_max_only_categorical__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_min_max_only_categorical__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_min_max_only_time__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_min_max_only_time__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_min_max_only_time__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_min_max_only_time__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_min_max_only_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_min_max_only_time__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_min_max_only_time__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_min_max_only_time__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_min_max_only_time_quarter__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_min_max_only_time_quarter__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_min_max_only_time_quarter__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_min_max_only_time_quarter__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_min_max_only_time_quarter__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_min_max_only_time_quarter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_min_max_only_time_quarter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_min_max_only_time_quarter__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_multi_hop_through_scd_dimension__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_multi_hop_through_scd_dimension__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_multi_hop_through_scd_dimension__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_multi_hop_through_scd_dimension__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_multi_hop_through_scd_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_multi_hop_through_scd_dimension__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_multi_hop_through_scd_dimension__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_multi_hop_through_scd_dimension__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_multi_hop_to_scd_dimension__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_multi_hop_to_scd_dimension__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_multi_hop_to_scd_dimension__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_multi_hop_to_scd_dimension__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_multi_hop_to_scd_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_multi_hop_to_scd_dimension__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_multi_hop_to_scd_dimension__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_multi_hop_to_scd_dimension__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_multihop_node__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_multihop_node__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_multihop_node__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_multihop_node__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_multihop_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_multihop_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_multihop_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_multihop_node__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_multiple_metrics_no_dimensions__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_multiple_metrics_no_dimensions__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_multiple_metrics_no_dimensions__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_multiple_metrics_no_dimensions__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_multiple_metrics_no_dimensions__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_multiple_metrics_no_dimensions__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_multiple_metrics_no_dimensions__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_multiple_metrics_no_dimensions__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_partitioned_join__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_partitioned_join__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_partitioned_join__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_partitioned_join__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_partitioned_join__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_partitioned_join__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_partitioned_join__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Databricks/test_partitioned_join__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_common_semantic_model__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_common_semantic_model__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_common_semantic_model__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_common_semantic_model__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_common_semantic_model__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_common_semantic_model__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_common_semantic_model__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_common_semantic_model__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_distinct_values__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_distinct_values__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_distinct_values__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_distinct_values__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_distinct_values__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_distinct_values__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_distinct_values__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_distinct_values__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_filter_with_where_constraint_on_join_dim__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_filter_with_where_constraint_on_join_dim__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_filter_with_where_constraint_on_join_dim__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_filter_with_where_constraint_on_join_dim__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_filter_with_where_constraint_on_join_dim__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_filter_with_where_constraint_on_join_dim__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_filter_with_where_constraint_on_join_dim__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_filter_with_where_constraint_on_join_dim__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_join_to_scd_dimension__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_join_to_scd_dimension__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_join_to_scd_dimension__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_join_to_scd_dimension__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_join_to_scd_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_join_to_scd_dimension__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_join_to_scd_dimension__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_join_to_scd_dimension__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_limit_rows__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_limit_rows__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_limit_rows__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_limit_rows__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_limit_rows__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_limit_rows__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_limit_rows__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_limit_rows__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_local_dimension_using_local_entity__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_local_dimension_using_local_entity__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_local_dimension_using_local_entity__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_local_dimension_using_local_entity__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_local_dimension_using_local_entity__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_local_dimension_using_local_entity__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_local_dimension_using_local_entity__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_local_dimension_using_local_entity__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_measure_constraint__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_measure_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_measure_constraint__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_measure_constraint__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_measure_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_measure_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_measure_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_measure_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_measure_constraint_with_reused_measure__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_measure_constraint_with_reused_measure__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_measure_constraint_with_reused_measure__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_measure_constraint_with_reused_measure__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_measure_constraint_with_reused_measure__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_measure_constraint_with_reused_measure__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_measure_constraint_with_reused_measure__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_measure_constraint_with_reused_measure__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_measure_constraint_with_single_expr_and_alias__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_measure_constraint_with_single_expr_and_alias__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_measure_constraint_with_single_expr_and_alias__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_measure_constraint_with_single_expr_and_alias__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_measure_constraint_with_single_expr_and_alias__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_measure_constraint_with_single_expr_and_alias__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_measure_constraint_with_single_expr_and_alias__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_measure_constraint_with_single_expr_and_alias__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_min_max_metric_time__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_min_max_metric_time__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_min_max_metric_time__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_min_max_metric_time__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_min_max_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_min_max_metric_time__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_min_max_metric_time__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_min_max_metric_time__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_min_max_metric_time_week__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_min_max_metric_time_week__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_min_max_metric_time_week__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_min_max_metric_time_week__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_min_max_metric_time_week__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_min_max_metric_time_week__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_min_max_metric_time_week__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_min_max_metric_time_week__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_min_max_only_categorical__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_min_max_only_categorical__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_min_max_only_categorical__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_min_max_only_categorical__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_min_max_only_categorical__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_min_max_only_categorical__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_min_max_only_categorical__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_min_max_only_categorical__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_min_max_only_time__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_min_max_only_time__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_min_max_only_time__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_min_max_only_time__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_min_max_only_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_min_max_only_time__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_min_max_only_time__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_min_max_only_time__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_min_max_only_time_quarter__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_min_max_only_time_quarter__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_min_max_only_time_quarter__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_min_max_only_time_quarter__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_min_max_only_time_quarter__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_min_max_only_time_quarter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_min_max_only_time_quarter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_min_max_only_time_quarter__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_multi_hop_through_scd_dimension__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_multi_hop_through_scd_dimension__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_multi_hop_through_scd_dimension__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_multi_hop_through_scd_dimension__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_multi_hop_through_scd_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_multi_hop_through_scd_dimension__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_multi_hop_through_scd_dimension__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_multi_hop_through_scd_dimension__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_multi_hop_to_scd_dimension__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_multi_hop_to_scd_dimension__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_multi_hop_to_scd_dimension__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_multi_hop_to_scd_dimension__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_multi_hop_to_scd_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_multi_hop_to_scd_dimension__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_multi_hop_to_scd_dimension__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_multi_hop_to_scd_dimension__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_multihop_node__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_multihop_node__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_multihop_node__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_multihop_node__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_multihop_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_multihop_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_multihop_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_multihop_node__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_multiple_metrics_no_dimensions__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_multiple_metrics_no_dimensions__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_multiple_metrics_no_dimensions__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_multiple_metrics_no_dimensions__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_multiple_metrics_no_dimensions__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_multiple_metrics_no_dimensions__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_multiple_metrics_no_dimensions__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_multiple_metrics_no_dimensions__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_partitioned_join__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_partitioned_join__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_partitioned_join__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_partitioned_join__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_partitioned_join__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_partitioned_join__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_partitioned_join__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/DuckDB/test_partitioned_join__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_common_semantic_model__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_common_semantic_model__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_common_semantic_model__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_common_semantic_model__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_common_semantic_model__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_common_semantic_model__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_common_semantic_model__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_common_semantic_model__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_distinct_values__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_distinct_values__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_distinct_values__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_distinct_values__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_distinct_values__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_distinct_values__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_distinct_values__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_distinct_values__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_filter_with_where_constraint_on_join_dim__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_filter_with_where_constraint_on_join_dim__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_filter_with_where_constraint_on_join_dim__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_filter_with_where_constraint_on_join_dim__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_filter_with_where_constraint_on_join_dim__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_filter_with_where_constraint_on_join_dim__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_filter_with_where_constraint_on_join_dim__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_filter_with_where_constraint_on_join_dim__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_join_to_scd_dimension__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_join_to_scd_dimension__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_join_to_scd_dimension__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_join_to_scd_dimension__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_join_to_scd_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_join_to_scd_dimension__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_join_to_scd_dimension__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_join_to_scd_dimension__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_limit_rows__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_limit_rows__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_limit_rows__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_limit_rows__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_limit_rows__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_limit_rows__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_limit_rows__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_limit_rows__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_local_dimension_using_local_entity__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_local_dimension_using_local_entity__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_local_dimension_using_local_entity__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_local_dimension_using_local_entity__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_local_dimension_using_local_entity__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_local_dimension_using_local_entity__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_local_dimension_using_local_entity__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_local_dimension_using_local_entity__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_measure_constraint__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_measure_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_measure_constraint__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_measure_constraint__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_measure_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_measure_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_measure_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_measure_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_measure_constraint_with_reused_measure__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_measure_constraint_with_reused_measure__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_measure_constraint_with_reused_measure__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_measure_constraint_with_reused_measure__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_measure_constraint_with_reused_measure__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_measure_constraint_with_reused_measure__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_measure_constraint_with_reused_measure__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_measure_constraint_with_reused_measure__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_measure_constraint_with_single_expr_and_alias__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_measure_constraint_with_single_expr_and_alias__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_measure_constraint_with_single_expr_and_alias__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_measure_constraint_with_single_expr_and_alias__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_measure_constraint_with_single_expr_and_alias__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_measure_constraint_with_single_expr_and_alias__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_measure_constraint_with_single_expr_and_alias__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_measure_constraint_with_single_expr_and_alias__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_min_max_metric_time__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_min_max_metric_time__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_min_max_metric_time__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_min_max_metric_time__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_min_max_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_min_max_metric_time__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_min_max_metric_time__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_min_max_metric_time__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_min_max_metric_time_week__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_min_max_metric_time_week__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_min_max_metric_time_week__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_min_max_metric_time_week__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_min_max_metric_time_week__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_min_max_metric_time_week__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_min_max_metric_time_week__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_min_max_metric_time_week__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_min_max_only_categorical__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_min_max_only_categorical__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_min_max_only_categorical__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_min_max_only_categorical__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_min_max_only_categorical__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_min_max_only_categorical__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_min_max_only_categorical__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_min_max_only_categorical__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_min_max_only_time__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_min_max_only_time__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_min_max_only_time__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_min_max_only_time__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_min_max_only_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_min_max_only_time__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_min_max_only_time__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_min_max_only_time__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_min_max_only_time_quarter__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_min_max_only_time_quarter__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_min_max_only_time_quarter__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_min_max_only_time_quarter__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_min_max_only_time_quarter__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_min_max_only_time_quarter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_min_max_only_time_quarter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_min_max_only_time_quarter__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_multi_hop_through_scd_dimension__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_multi_hop_through_scd_dimension__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_multi_hop_through_scd_dimension__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_multi_hop_through_scd_dimension__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_multi_hop_through_scd_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_multi_hop_through_scd_dimension__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_multi_hop_through_scd_dimension__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_multi_hop_through_scd_dimension__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_multi_hop_to_scd_dimension__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_multi_hop_to_scd_dimension__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_multi_hop_to_scd_dimension__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_multi_hop_to_scd_dimension__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_multi_hop_to_scd_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_multi_hop_to_scd_dimension__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_multi_hop_to_scd_dimension__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_multi_hop_to_scd_dimension__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_multihop_node__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_multihop_node__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_multihop_node__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_multihop_node__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_multihop_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_multihop_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_multihop_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_multihop_node__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_multiple_metrics_no_dimensions__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_multiple_metrics_no_dimensions__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_multiple_metrics_no_dimensions__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_multiple_metrics_no_dimensions__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_multiple_metrics_no_dimensions__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_multiple_metrics_no_dimensions__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_multiple_metrics_no_dimensions__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_multiple_metrics_no_dimensions__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_partitioned_join__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_partitioned_join__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_partitioned_join__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_partitioned_join__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_partitioned_join__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_partitioned_join__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_partitioned_join__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Postgres/test_partitioned_join__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_common_semantic_model__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_common_semantic_model__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_common_semantic_model__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_common_semantic_model__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_common_semantic_model__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_common_semantic_model__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_common_semantic_model__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_common_semantic_model__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_distinct_values__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_distinct_values__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_distinct_values__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_distinct_values__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_distinct_values__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_distinct_values__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_distinct_values__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_distinct_values__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_filter_with_where_constraint_on_join_dim__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_filter_with_where_constraint_on_join_dim__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_filter_with_where_constraint_on_join_dim__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_filter_with_where_constraint_on_join_dim__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_filter_with_where_constraint_on_join_dim__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_filter_with_where_constraint_on_join_dim__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_filter_with_where_constraint_on_join_dim__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_filter_with_where_constraint_on_join_dim__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_join_to_scd_dimension__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_join_to_scd_dimension__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_join_to_scd_dimension__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_join_to_scd_dimension__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_join_to_scd_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_join_to_scd_dimension__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_join_to_scd_dimension__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_join_to_scd_dimension__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_limit_rows__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_limit_rows__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_limit_rows__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_limit_rows__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_limit_rows__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_limit_rows__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_limit_rows__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_limit_rows__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_local_dimension_using_local_entity__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_local_dimension_using_local_entity__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_local_dimension_using_local_entity__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_local_dimension_using_local_entity__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_local_dimension_using_local_entity__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_local_dimension_using_local_entity__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_local_dimension_using_local_entity__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_local_dimension_using_local_entity__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_measure_constraint__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_measure_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_measure_constraint__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_measure_constraint__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_measure_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_measure_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_measure_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_measure_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_measure_constraint_with_reused_measure__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_measure_constraint_with_reused_measure__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_measure_constraint_with_reused_measure__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_measure_constraint_with_reused_measure__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_measure_constraint_with_reused_measure__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_measure_constraint_with_reused_measure__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_measure_constraint_with_reused_measure__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_measure_constraint_with_reused_measure__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_measure_constraint_with_single_expr_and_alias__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_measure_constraint_with_single_expr_and_alias__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_measure_constraint_with_single_expr_and_alias__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_measure_constraint_with_single_expr_and_alias__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_measure_constraint_with_single_expr_and_alias__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_measure_constraint_with_single_expr_and_alias__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_measure_constraint_with_single_expr_and_alias__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_measure_constraint_with_single_expr_and_alias__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_min_max_metric_time__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_min_max_metric_time__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_min_max_metric_time__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_min_max_metric_time__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_min_max_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_min_max_metric_time__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_min_max_metric_time__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_min_max_metric_time__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_min_max_metric_time_week__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_min_max_metric_time_week__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_min_max_metric_time_week__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_min_max_metric_time_week__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_min_max_metric_time_week__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_min_max_metric_time_week__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_min_max_metric_time_week__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_min_max_metric_time_week__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_min_max_only_categorical__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_min_max_only_categorical__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_min_max_only_categorical__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_min_max_only_categorical__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_min_max_only_categorical__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_min_max_only_categorical__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_min_max_only_categorical__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_min_max_only_categorical__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_min_max_only_time__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_min_max_only_time__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_min_max_only_time__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_min_max_only_time__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_min_max_only_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_min_max_only_time__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_min_max_only_time__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_min_max_only_time__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_min_max_only_time_quarter__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_min_max_only_time_quarter__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_min_max_only_time_quarter__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_min_max_only_time_quarter__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_min_max_only_time_quarter__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_min_max_only_time_quarter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_min_max_only_time_quarter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_min_max_only_time_quarter__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_multi_hop_through_scd_dimension__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_multi_hop_through_scd_dimension__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_multi_hop_through_scd_dimension__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_multi_hop_through_scd_dimension__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_multi_hop_through_scd_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_multi_hop_through_scd_dimension__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_multi_hop_through_scd_dimension__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_multi_hop_through_scd_dimension__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_multi_hop_to_scd_dimension__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_multi_hop_to_scd_dimension__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_multi_hop_to_scd_dimension__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_multi_hop_to_scd_dimension__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_multi_hop_to_scd_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_multi_hop_to_scd_dimension__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_multi_hop_to_scd_dimension__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_multi_hop_to_scd_dimension__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_multihop_node__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_multihop_node__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_multihop_node__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_multihop_node__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_multihop_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_multihop_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_multihop_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_multihop_node__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_multiple_metrics_no_dimensions__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_multiple_metrics_no_dimensions__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_multiple_metrics_no_dimensions__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_multiple_metrics_no_dimensions__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_multiple_metrics_no_dimensions__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_multiple_metrics_no_dimensions__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_multiple_metrics_no_dimensions__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_multiple_metrics_no_dimensions__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_partitioned_join__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_partitioned_join__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_partitioned_join__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_partitioned_join__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_partitioned_join__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_partitioned_join__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_partitioned_join__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Redshift/test_partitioned_join__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_common_semantic_model__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_common_semantic_model__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_common_semantic_model__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_common_semantic_model__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_common_semantic_model__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_common_semantic_model__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_common_semantic_model__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_common_semantic_model__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_distinct_values__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_distinct_values__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_distinct_values__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_distinct_values__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_distinct_values__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_distinct_values__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_distinct_values__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_distinct_values__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_filter_with_where_constraint_on_join_dim__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_filter_with_where_constraint_on_join_dim__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_filter_with_where_constraint_on_join_dim__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_filter_with_where_constraint_on_join_dim__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_filter_with_where_constraint_on_join_dim__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_filter_with_where_constraint_on_join_dim__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_filter_with_where_constraint_on_join_dim__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_filter_with_where_constraint_on_join_dim__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_join_to_scd_dimension__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_join_to_scd_dimension__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_join_to_scd_dimension__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_join_to_scd_dimension__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_join_to_scd_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_join_to_scd_dimension__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_join_to_scd_dimension__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_join_to_scd_dimension__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_limit_rows__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_limit_rows__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_limit_rows__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_limit_rows__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_limit_rows__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_limit_rows__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_limit_rows__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_limit_rows__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_local_dimension_using_local_entity__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_local_dimension_using_local_entity__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_local_dimension_using_local_entity__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_local_dimension_using_local_entity__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_local_dimension_using_local_entity__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_local_dimension_using_local_entity__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_local_dimension_using_local_entity__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_local_dimension_using_local_entity__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_measure_constraint__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_measure_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_measure_constraint__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_measure_constraint__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_measure_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_measure_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_measure_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_measure_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_measure_constraint_with_reused_measure__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_measure_constraint_with_reused_measure__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_measure_constraint_with_reused_measure__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_measure_constraint_with_reused_measure__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_measure_constraint_with_reused_measure__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_measure_constraint_with_reused_measure__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_measure_constraint_with_reused_measure__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_measure_constraint_with_reused_measure__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_measure_constraint_with_single_expr_and_alias__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_measure_constraint_with_single_expr_and_alias__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_measure_constraint_with_single_expr_and_alias__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_measure_constraint_with_single_expr_and_alias__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_measure_constraint_with_single_expr_and_alias__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_measure_constraint_with_single_expr_and_alias__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_measure_constraint_with_single_expr_and_alias__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_measure_constraint_with_single_expr_and_alias__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_min_max_metric_time__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_min_max_metric_time__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_min_max_metric_time__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_min_max_metric_time__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_min_max_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_min_max_metric_time__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_min_max_metric_time__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_min_max_metric_time__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_min_max_metric_time_week__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_min_max_metric_time_week__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_min_max_metric_time_week__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_min_max_metric_time_week__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_min_max_metric_time_week__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_min_max_metric_time_week__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_min_max_metric_time_week__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_min_max_metric_time_week__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_min_max_only_categorical__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_min_max_only_categorical__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_min_max_only_categorical__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_min_max_only_categorical__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_min_max_only_categorical__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_min_max_only_categorical__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_min_max_only_categorical__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_min_max_only_categorical__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_min_max_only_time__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_min_max_only_time__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_min_max_only_time__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_min_max_only_time__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_min_max_only_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_min_max_only_time__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_min_max_only_time__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_min_max_only_time__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_min_max_only_time_quarter__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_min_max_only_time_quarter__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_min_max_only_time_quarter__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_min_max_only_time_quarter__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_min_max_only_time_quarter__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_min_max_only_time_quarter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_min_max_only_time_quarter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_min_max_only_time_quarter__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_multi_hop_through_scd_dimension__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_multi_hop_through_scd_dimension__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_multi_hop_through_scd_dimension__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_multi_hop_through_scd_dimension__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_multi_hop_through_scd_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_multi_hop_through_scd_dimension__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_multi_hop_through_scd_dimension__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_multi_hop_through_scd_dimension__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_multi_hop_to_scd_dimension__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_multi_hop_to_scd_dimension__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_multi_hop_to_scd_dimension__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_multi_hop_to_scd_dimension__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_multi_hop_to_scd_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_multi_hop_to_scd_dimension__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_multi_hop_to_scd_dimension__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_multi_hop_to_scd_dimension__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_multihop_node__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_multihop_node__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_multihop_node__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_multihop_node__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_multihop_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_multihop_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_multihop_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_multihop_node__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_multiple_metrics_no_dimensions__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_multiple_metrics_no_dimensions__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_multiple_metrics_no_dimensions__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_multiple_metrics_no_dimensions__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_multiple_metrics_no_dimensions__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_multiple_metrics_no_dimensions__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_multiple_metrics_no_dimensions__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_multiple_metrics_no_dimensions__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_partitioned_join__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_partitioned_join__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_partitioned_join__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_partitioned_join__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_partitioned_join__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_partitioned_join__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_partitioned_join__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Snowflake/test_partitioned_join__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_common_semantic_model__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_common_semantic_model__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_common_semantic_model__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_common_semantic_model__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_common_semantic_model__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_common_semantic_model__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_common_semantic_model__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_common_semantic_model__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_distinct_values__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_distinct_values__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_distinct_values__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_distinct_values__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_distinct_values__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_distinct_values__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_distinct_values__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_distinct_values__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_filter_with_where_constraint_on_join_dim__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_filter_with_where_constraint_on_join_dim__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_filter_with_where_constraint_on_join_dim__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_filter_with_where_constraint_on_join_dim__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_filter_with_where_constraint_on_join_dim__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_filter_with_where_constraint_on_join_dim__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_filter_with_where_constraint_on_join_dim__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_filter_with_where_constraint_on_join_dim__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_join_to_scd_dimension__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_join_to_scd_dimension__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_join_to_scd_dimension__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_join_to_scd_dimension__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_join_to_scd_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_join_to_scd_dimension__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_join_to_scd_dimension__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_join_to_scd_dimension__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_limit_rows__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_limit_rows__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_limit_rows__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_limit_rows__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_limit_rows__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_limit_rows__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_limit_rows__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_limit_rows__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_local_dimension_using_local_entity__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_local_dimension_using_local_entity__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_local_dimension_using_local_entity__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_local_dimension_using_local_entity__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_local_dimension_using_local_entity__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_local_dimension_using_local_entity__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_local_dimension_using_local_entity__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_local_dimension_using_local_entity__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_measure_constraint__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_measure_constraint__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_measure_constraint__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_measure_constraint__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_measure_constraint__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_measure_constraint__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_measure_constraint__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_measure_constraint__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_measure_constraint_with_reused_measure__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_measure_constraint_with_reused_measure__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_measure_constraint_with_reused_measure__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_measure_constraint_with_reused_measure__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_measure_constraint_with_reused_measure__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_measure_constraint_with_reused_measure__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_measure_constraint_with_reused_measure__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_measure_constraint_with_reused_measure__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_measure_constraint_with_single_expr_and_alias__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_measure_constraint_with_single_expr_and_alias__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_measure_constraint_with_single_expr_and_alias__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_measure_constraint_with_single_expr_and_alias__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_measure_constraint_with_single_expr_and_alias__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_measure_constraint_with_single_expr_and_alias__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_measure_constraint_with_single_expr_and_alias__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_measure_constraint_with_single_expr_and_alias__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_metric_with_measures_from_multiple_sources_no_dimensions__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_min_max_metric_time__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_min_max_metric_time__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_min_max_metric_time__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_min_max_metric_time__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_min_max_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_min_max_metric_time__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_min_max_metric_time__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_min_max_metric_time__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_min_max_metric_time_week__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_min_max_metric_time_week__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_min_max_metric_time_week__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_min_max_metric_time_week__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_min_max_metric_time_week__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_min_max_metric_time_week__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_min_max_metric_time_week__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_min_max_metric_time_week__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_min_max_only_categorical__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_min_max_only_categorical__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_min_max_only_categorical__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_min_max_only_categorical__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_min_max_only_categorical__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_min_max_only_categorical__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_min_max_only_categorical__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_min_max_only_categorical__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_min_max_only_time__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_min_max_only_time__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_min_max_only_time__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_min_max_only_time__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_min_max_only_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_min_max_only_time__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_min_max_only_time__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_min_max_only_time__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_min_max_only_time_quarter__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_min_max_only_time_quarter__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_min_max_only_time_quarter__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_min_max_only_time_quarter__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_min_max_only_time_quarter__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_min_max_only_time_quarter__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_min_max_only_time_quarter__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_min_max_only_time_quarter__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_multi_hop_through_scd_dimension__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_multi_hop_through_scd_dimension__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_multi_hop_through_scd_dimension__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_multi_hop_through_scd_dimension__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_multi_hop_through_scd_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_multi_hop_through_scd_dimension__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_multi_hop_through_scd_dimension__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_multi_hop_through_scd_dimension__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_multi_hop_to_scd_dimension__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_multi_hop_to_scd_dimension__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_multi_hop_to_scd_dimension__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_multi_hop_to_scd_dimension__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_multi_hop_to_scd_dimension__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_multi_hop_to_scd_dimension__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_multi_hop_to_scd_dimension__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_multi_hop_to_scd_dimension__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_multihop_node__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_multihop_node__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_multihop_node__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_multihop_node__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_multihop_node__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_multihop_node__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_multihop_node__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_multihop_node__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_multiple_metrics_no_dimensions__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_multiple_metrics_no_dimensions__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_multiple_metrics_no_dimensions__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_multiple_metrics_no_dimensions__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_multiple_metrics_no_dimensions__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_multiple_metrics_no_dimensions__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_multiple_metrics_no_dimensions__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_multiple_metrics_no_dimensions__plan0_optimized.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_partitioned_join__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_partitioned_join__plan0.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_partitioned_join__plan0.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_partitioned_join__plan0.sql diff --git a/tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_partitioned_join__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_partitioned_join__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_partitioned_join__plan0_optimized.sql rename to tests_metricflow/snapshots/test_query_rendering.py/SqlQueryPlan/Trino/test_partitioned_join__plan0_optimized.sql diff --git a/tests/snapshots/test_rendered_query.py/str/BigQuery/test_id_enumeration__query.sql b/tests_metricflow/snapshots/test_rendered_query.py/str/BigQuery/test_id_enumeration__query.sql similarity index 100% rename from tests/snapshots/test_rendered_query.py/str/BigQuery/test_id_enumeration__query.sql rename to tests_metricflow/snapshots/test_rendered_query.py/str/BigQuery/test_id_enumeration__query.sql diff --git a/tests/snapshots/test_rendered_query.py/str/BigQuery/test_render_query__query0.sql b/tests_metricflow/snapshots/test_rendered_query.py/str/BigQuery/test_render_query__query0.sql similarity index 100% rename from tests/snapshots/test_rendered_query.py/str/BigQuery/test_render_query__query0.sql rename to tests_metricflow/snapshots/test_rendered_query.py/str/BigQuery/test_render_query__query0.sql diff --git a/tests/snapshots/test_rendered_query.py/str/Databricks/test_id_enumeration__query.sql b/tests_metricflow/snapshots/test_rendered_query.py/str/Databricks/test_id_enumeration__query.sql similarity index 100% rename from tests/snapshots/test_rendered_query.py/str/Databricks/test_id_enumeration__query.sql rename to tests_metricflow/snapshots/test_rendered_query.py/str/Databricks/test_id_enumeration__query.sql diff --git a/tests/snapshots/test_rendered_query.py/str/Databricks/test_render_query__query0.sql b/tests_metricflow/snapshots/test_rendered_query.py/str/Databricks/test_render_query__query0.sql similarity index 100% rename from tests/snapshots/test_rendered_query.py/str/Databricks/test_render_query__query0.sql rename to tests_metricflow/snapshots/test_rendered_query.py/str/Databricks/test_render_query__query0.sql diff --git a/tests/snapshots/test_rendered_query.py/str/DuckDB/test_id_enumeration__query.sql b/tests_metricflow/snapshots/test_rendered_query.py/str/DuckDB/test_id_enumeration__query.sql similarity index 100% rename from tests/snapshots/test_rendered_query.py/str/DuckDB/test_id_enumeration__query.sql rename to tests_metricflow/snapshots/test_rendered_query.py/str/DuckDB/test_id_enumeration__query.sql diff --git a/tests/snapshots/test_rendered_query.py/str/DuckDB/test_render_query__query0.sql b/tests_metricflow/snapshots/test_rendered_query.py/str/DuckDB/test_render_query__query0.sql similarity index 100% rename from tests/snapshots/test_rendered_query.py/str/DuckDB/test_render_query__query0.sql rename to tests_metricflow/snapshots/test_rendered_query.py/str/DuckDB/test_render_query__query0.sql diff --git a/tests/snapshots/test_rendered_query.py/str/Postgres/test_id_enumeration__query.sql b/tests_metricflow/snapshots/test_rendered_query.py/str/Postgres/test_id_enumeration__query.sql similarity index 100% rename from tests/snapshots/test_rendered_query.py/str/Postgres/test_id_enumeration__query.sql rename to tests_metricflow/snapshots/test_rendered_query.py/str/Postgres/test_id_enumeration__query.sql diff --git a/tests/snapshots/test_rendered_query.py/str/Postgres/test_render_query__query0.sql b/tests_metricflow/snapshots/test_rendered_query.py/str/Postgres/test_render_query__query0.sql similarity index 100% rename from tests/snapshots/test_rendered_query.py/str/Postgres/test_render_query__query0.sql rename to tests_metricflow/snapshots/test_rendered_query.py/str/Postgres/test_render_query__query0.sql diff --git a/tests/snapshots/test_rendered_query.py/str/Redshift/test_id_enumeration__query.sql b/tests_metricflow/snapshots/test_rendered_query.py/str/Redshift/test_id_enumeration__query.sql similarity index 100% rename from tests/snapshots/test_rendered_query.py/str/Redshift/test_id_enumeration__query.sql rename to tests_metricflow/snapshots/test_rendered_query.py/str/Redshift/test_id_enumeration__query.sql diff --git a/tests/snapshots/test_rendered_query.py/str/Redshift/test_render_query__query0.sql b/tests_metricflow/snapshots/test_rendered_query.py/str/Redshift/test_render_query__query0.sql similarity index 100% rename from tests/snapshots/test_rendered_query.py/str/Redshift/test_render_query__query0.sql rename to tests_metricflow/snapshots/test_rendered_query.py/str/Redshift/test_render_query__query0.sql diff --git a/tests/snapshots/test_rendered_query.py/str/Snowflake/test_id_enumeration__query.sql b/tests_metricflow/snapshots/test_rendered_query.py/str/Snowflake/test_id_enumeration__query.sql similarity index 100% rename from tests/snapshots/test_rendered_query.py/str/Snowflake/test_id_enumeration__query.sql rename to tests_metricflow/snapshots/test_rendered_query.py/str/Snowflake/test_id_enumeration__query.sql diff --git a/tests/snapshots/test_rendered_query.py/str/Snowflake/test_render_query__query0.sql b/tests_metricflow/snapshots/test_rendered_query.py/str/Snowflake/test_render_query__query0.sql similarity index 100% rename from tests/snapshots/test_rendered_query.py/str/Snowflake/test_render_query__query0.sql rename to tests_metricflow/snapshots/test_rendered_query.py/str/Snowflake/test_render_query__query0.sql diff --git a/tests/snapshots/test_rendered_query.py/str/Trino/test_id_enumeration__query.sql b/tests_metricflow/snapshots/test_rendered_query.py/str/Trino/test_id_enumeration__query.sql similarity index 100% rename from tests/snapshots/test_rendered_query.py/str/Trino/test_id_enumeration__query.sql rename to tests_metricflow/snapshots/test_rendered_query.py/str/Trino/test_id_enumeration__query.sql diff --git a/tests/snapshots/test_rendered_query.py/str/Trino/test_render_query__query0.sql b/tests_metricflow/snapshots/test_rendered_query.py/str/Trino/test_render_query__query0.sql similarity index 100% rename from tests/snapshots/test_rendered_query.py/str/Trino/test_render_query__query0.sql rename to tests_metricflow/snapshots/test_rendered_query.py/str/Trino/test_render_query__query0.sql diff --git a/tests/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_colliding_alias__after_reducing.sql b/tests_metricflow/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_colliding_alias__after_reducing.sql similarity index 100% rename from tests/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_colliding_alias__after_reducing.sql rename to tests_metricflow/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_colliding_alias__after_reducing.sql diff --git a/tests/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_colliding_alias__before_reducing.sql b/tests_metricflow/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_colliding_alias__before_reducing.sql similarity index 100% rename from tests/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_colliding_alias__before_reducing.sql rename to tests_metricflow/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_colliding_alias__before_reducing.sql diff --git a/tests/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_reduce_all_join_sources__after_reducing.sql b/tests_metricflow/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_reduce_all_join_sources__after_reducing.sql similarity index 100% rename from tests/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_reduce_all_join_sources__after_reducing.sql rename to tests_metricflow/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_reduce_all_join_sources__after_reducing.sql diff --git a/tests/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_reduce_all_join_sources__before_reducing.sql b/tests_metricflow/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_reduce_all_join_sources__before_reducing.sql similarity index 100% rename from tests/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_reduce_all_join_sources__before_reducing.sql rename to tests_metricflow/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_reduce_all_join_sources__before_reducing.sql diff --git a/tests/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_reduce_join__after_reducing.sql b/tests_metricflow/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_reduce_join__after_reducing.sql similarity index 100% rename from tests/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_reduce_join__after_reducing.sql rename to tests_metricflow/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_reduce_join__after_reducing.sql diff --git a/tests/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_reduce_join__before_reducing.sql b/tests_metricflow/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_reduce_join__before_reducing.sql similarity index 100% rename from tests/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_reduce_join__before_reducing.sql rename to tests_metricflow/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_reduce_join__before_reducing.sql diff --git a/tests/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_reduce_sub_query__after_reducing.sql b/tests_metricflow/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_reduce_sub_query__after_reducing.sql similarity index 100% rename from tests/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_reduce_sub_query__after_reducing.sql rename to tests_metricflow/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_reduce_sub_query__after_reducing.sql diff --git a/tests/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_reduce_sub_query__before_reducing.sql b/tests_metricflow/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_reduce_sub_query__before_reducing.sql similarity index 100% rename from tests/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_reduce_sub_query__before_reducing.sql rename to tests_metricflow/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_reduce_sub_query__before_reducing.sql diff --git a/tests/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_reducing_join_left_node_statement__after_reducing.sql b/tests_metricflow/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_reducing_join_left_node_statement__after_reducing.sql similarity index 100% rename from tests/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_reducing_join_left_node_statement__after_reducing.sql rename to tests_metricflow/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_reducing_join_left_node_statement__after_reducing.sql diff --git a/tests/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_reducing_join_left_node_statement__before_reducing.sql b/tests_metricflow/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_reducing_join_left_node_statement__before_reducing.sql similarity index 100% rename from tests/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_reducing_join_left_node_statement__before_reducing.sql rename to tests_metricflow/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_reducing_join_left_node_statement__before_reducing.sql diff --git a/tests/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_reducing_join_statement__after_reducing.sql b/tests_metricflow/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_reducing_join_statement__after_reducing.sql similarity index 100% rename from tests/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_reducing_join_statement__after_reducing.sql rename to tests_metricflow/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_reducing_join_statement__after_reducing.sql diff --git a/tests/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_reducing_join_statement__before_reducing.sql b/tests_metricflow/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_reducing_join_statement__before_reducing.sql similarity index 100% rename from tests/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_reducing_join_statement__before_reducing.sql rename to tests_metricflow/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_reducing_join_statement__before_reducing.sql diff --git a/tests/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_rewriting_distinct_select_node_is_not_reduced__after_reducing.sql b/tests_metricflow/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_rewriting_distinct_select_node_is_not_reduced__after_reducing.sql similarity index 100% rename from tests/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_rewriting_distinct_select_node_is_not_reduced__after_reducing.sql rename to tests_metricflow/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_rewriting_distinct_select_node_is_not_reduced__after_reducing.sql diff --git a/tests/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_rewriting_distinct_select_node_is_not_reduced__before_reducing.sql b/tests_metricflow/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_rewriting_distinct_select_node_is_not_reduced__before_reducing.sql similarity index 100% rename from tests/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_rewriting_distinct_select_node_is_not_reduced__before_reducing.sql rename to tests_metricflow/snapshots/test_rewriting_sub_query_reducer.py/SqlQueryPlan/test_rewriting_distinct_select_node_is_not_reduced__before_reducing.sql diff --git a/tests/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_2_metrics_from_1_semantic_model__dfp_0.xml b/tests_metricflow/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_2_metrics_from_1_semantic_model__dfp_0.xml similarity index 100% rename from tests/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_2_metrics_from_1_semantic_model__dfp_0.xml rename to tests_metricflow/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_2_metrics_from_1_semantic_model__dfp_0.xml diff --git a/tests/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_2_metrics_from_1_semantic_model__dfpo_0.xml b/tests_metricflow/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_2_metrics_from_1_semantic_model__dfpo_0.xml similarity index 100% rename from tests/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_2_metrics_from_1_semantic_model__dfpo_0.xml rename to tests_metricflow/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_2_metrics_from_1_semantic_model__dfpo_0.xml diff --git a/tests/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_2_metrics_from_2_semantic_models__dfp_0.xml b/tests_metricflow/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_2_metrics_from_2_semantic_models__dfp_0.xml similarity index 100% rename from tests/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_2_metrics_from_2_semantic_models__dfp_0.xml rename to tests_metricflow/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_2_metrics_from_2_semantic_models__dfp_0.xml diff --git a/tests/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_2_metrics_from_2_semantic_models__dfpo_0.xml b/tests_metricflow/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_2_metrics_from_2_semantic_models__dfpo_0.xml similarity index 100% rename from tests/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_2_metrics_from_2_semantic_models__dfpo_0.xml rename to tests_metricflow/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_2_metrics_from_2_semantic_models__dfpo_0.xml diff --git a/tests/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_2_ratio_metrics_from_1_semantic_model__dfp_0.xml b/tests_metricflow/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_2_ratio_metrics_from_1_semantic_model__dfp_0.xml similarity index 100% rename from tests/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_2_ratio_metrics_from_1_semantic_model__dfp_0.xml rename to tests_metricflow/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_2_ratio_metrics_from_1_semantic_model__dfp_0.xml diff --git a/tests/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_2_ratio_metrics_from_1_semantic_model__dfpo_0.xml b/tests_metricflow/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_2_ratio_metrics_from_1_semantic_model__dfpo_0.xml similarity index 100% rename from tests/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_2_ratio_metrics_from_1_semantic_model__dfpo_0.xml rename to tests_metricflow/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_2_ratio_metrics_from_1_semantic_model__dfpo_0.xml diff --git a/tests/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_3_metrics_from_2_semantic_models__dfp_0.xml b/tests_metricflow/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_3_metrics_from_2_semantic_models__dfp_0.xml similarity index 100% rename from tests/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_3_metrics_from_2_semantic_models__dfp_0.xml rename to tests_metricflow/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_3_metrics_from_2_semantic_models__dfp_0.xml diff --git a/tests/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_3_metrics_from_2_semantic_models__dfpo_0.xml b/tests_metricflow/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_3_metrics_from_2_semantic_models__dfpo_0.xml similarity index 100% rename from tests/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_3_metrics_from_2_semantic_models__dfpo_0.xml rename to tests_metricflow/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_3_metrics_from_2_semantic_models__dfpo_0.xml diff --git a/tests/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_constrained_metric_not_combined__dfp_0.xml b/tests_metricflow/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_constrained_metric_not_combined__dfp_0.xml similarity index 100% rename from tests/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_constrained_metric_not_combined__dfp_0.xml rename to tests_metricflow/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_constrained_metric_not_combined__dfp_0.xml diff --git a/tests/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_constrained_metric_not_combined__dfpo_0.xml b/tests_metricflow/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_constrained_metric_not_combined__dfpo_0.xml similarity index 100% rename from tests/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_constrained_metric_not_combined__dfpo_0.xml rename to tests_metricflow/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_constrained_metric_not_combined__dfpo_0.xml diff --git a/tests/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_derived_metric__dfp_0.xml b/tests_metricflow/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_derived_metric__dfp_0.xml similarity index 100% rename from tests/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_derived_metric__dfp_0.xml rename to tests_metricflow/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_derived_metric__dfp_0.xml diff --git a/tests/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_derived_metric__dfpo_0.xml b/tests_metricflow/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_derived_metric__dfpo_0.xml similarity index 100% rename from tests/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_derived_metric__dfpo_0.xml rename to tests_metricflow/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_derived_metric__dfpo_0.xml diff --git a/tests/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_derived_metric_with_non_derived_metric__dfp_0.xml b/tests_metricflow/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_derived_metric_with_non_derived_metric__dfp_0.xml similarity index 100% rename from tests/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_derived_metric_with_non_derived_metric__dfp_0.xml rename to tests_metricflow/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_derived_metric_with_non_derived_metric__dfp_0.xml diff --git a/tests/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_derived_metric_with_non_derived_metric__dfpo_0.xml b/tests_metricflow/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_derived_metric_with_non_derived_metric__dfpo_0.xml similarity index 100% rename from tests/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_derived_metric_with_non_derived_metric__dfpo_0.xml rename to tests_metricflow/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_derived_metric_with_non_derived_metric__dfpo_0.xml diff --git a/tests/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_duplicate_measures__dfp_0.xml b/tests_metricflow/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_duplicate_measures__dfp_0.xml similarity index 100% rename from tests/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_duplicate_measures__dfp_0.xml rename to tests_metricflow/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_duplicate_measures__dfp_0.xml diff --git a/tests/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_duplicate_measures__dfpo_0.xml b/tests_metricflow/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_duplicate_measures__dfpo_0.xml similarity index 100% rename from tests/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_duplicate_measures__dfpo_0.xml rename to tests_metricflow/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_duplicate_measures__dfpo_0.xml diff --git a/tests/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_nested_derived_metric__dfp_0.xml b/tests_metricflow/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_nested_derived_metric__dfp_0.xml similarity index 100% rename from tests/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_nested_derived_metric__dfp_0.xml rename to tests_metricflow/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_nested_derived_metric__dfp_0.xml diff --git a/tests/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_nested_derived_metric__dfpo_0.xml b/tests_metricflow/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_nested_derived_metric__dfpo_0.xml similarity index 100% rename from tests/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_nested_derived_metric__dfpo_0.xml rename to tests_metricflow/snapshots/test_source_scan_optimizer.py/DataflowPlan/test_nested_derived_metric__dfpo_0.xml diff --git a/tests/snapshots/test_sql_expr_render.py/str/test_window_function_expr__rendered_sql.txt b/tests_metricflow/snapshots/test_sql_expr_render.py/str/test_window_function_expr__rendered_sql.txt similarity index 100% rename from tests/snapshots/test_sql_expr_render.py/str/test_window_function_expr__rendered_sql.txt rename to tests_metricflow/snapshots/test_sql_expr_render.py/str/test_window_function_expr__rendered_sql.txt diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_component_rendering__plan0.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_component_rendering__plan0.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_component_rendering__plan0.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_component_rendering__plan0.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_component_rendering__plan1.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_component_rendering__plan1.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_component_rendering__plan1.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_component_rendering__plan1.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_component_rendering__plan2.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_component_rendering__plan2.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_component_rendering__plan2.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_component_rendering__plan2.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_component_rendering__plan3.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_component_rendering__plan3.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_component_rendering__plan3.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_component_rendering__plan3.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_component_rendering__plan4.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_component_rendering__plan4.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_component_rendering__plan4.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_component_rendering__plan4.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_component_rendering__plan5.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_component_rendering__plan5.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_component_rendering__plan5.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_component_rendering__plan5.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_render_create_table_as__create_table_as.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_render_create_table_as__create_table_as.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_render_create_table_as__create_table_as.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_render_create_table_as__create_table_as.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_render_create_table_as__create_view_as.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_render_create_table_as__create_view_as.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_render_create_table_as__create_view_as.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_render_create_table_as__create_view_as.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_render_limit__plan0.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_render_limit__plan0.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_render_limit__plan0.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_render_limit__plan0.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_render_order_by__plan0.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_render_order_by__plan0.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_render_order_by__plan0.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_render_order_by__plan0.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_render_where__plan0.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_render_where__plan0.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_render_where__plan0.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/BigQuery/test_render_where__plan0.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_component_rendering__plan0.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_component_rendering__plan0.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_component_rendering__plan0.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_component_rendering__plan0.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_component_rendering__plan1.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_component_rendering__plan1.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_component_rendering__plan1.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_component_rendering__plan1.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_component_rendering__plan2.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_component_rendering__plan2.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_component_rendering__plan2.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_component_rendering__plan2.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_component_rendering__plan3.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_component_rendering__plan3.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_component_rendering__plan3.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_component_rendering__plan3.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_component_rendering__plan4.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_component_rendering__plan4.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_component_rendering__plan4.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_component_rendering__plan4.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_component_rendering__plan5.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_component_rendering__plan5.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_component_rendering__plan5.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_component_rendering__plan5.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_render_create_table_as__create_table_as.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_render_create_table_as__create_table_as.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_render_create_table_as__create_table_as.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_render_create_table_as__create_table_as.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_render_create_table_as__create_view_as.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_render_create_table_as__create_view_as.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_render_create_table_as__create_view_as.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_render_create_table_as__create_view_as.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_render_limit__plan0.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_render_limit__plan0.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_render_limit__plan0.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_render_limit__plan0.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_render_order_by__plan0.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_render_order_by__plan0.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_render_order_by__plan0.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_render_order_by__plan0.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_render_where__plan0.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_render_where__plan0.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_render_where__plan0.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Databricks/test_render_where__plan0.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_component_rendering__plan0.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_component_rendering__plan0.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_component_rendering__plan0.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_component_rendering__plan0.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_component_rendering__plan1.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_component_rendering__plan1.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_component_rendering__plan1.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_component_rendering__plan1.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_component_rendering__plan2.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_component_rendering__plan2.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_component_rendering__plan2.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_component_rendering__plan2.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_component_rendering__plan3.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_component_rendering__plan3.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_component_rendering__plan3.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_component_rendering__plan3.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_component_rendering__plan4.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_component_rendering__plan4.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_component_rendering__plan4.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_component_rendering__plan4.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_component_rendering__plan5.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_component_rendering__plan5.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_component_rendering__plan5.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_component_rendering__plan5.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_render_create_table_as__create_table_as.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_render_create_table_as__create_table_as.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_render_create_table_as__create_table_as.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_render_create_table_as__create_table_as.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_render_create_table_as__create_view_as.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_render_create_table_as__create_view_as.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_render_create_table_as__create_view_as.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_render_create_table_as__create_view_as.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_render_limit__plan0.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_render_limit__plan0.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_render_limit__plan0.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_render_limit__plan0.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_render_order_by__plan0.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_render_order_by__plan0.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_render_order_by__plan0.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_render_order_by__plan0.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_render_where__plan0.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_render_where__plan0.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_render_where__plan0.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/DuckDB/test_render_where__plan0.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_component_rendering__plan0.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_component_rendering__plan0.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_component_rendering__plan0.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_component_rendering__plan0.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_component_rendering__plan1.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_component_rendering__plan1.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_component_rendering__plan1.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_component_rendering__plan1.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_component_rendering__plan2.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_component_rendering__plan2.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_component_rendering__plan2.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_component_rendering__plan2.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_component_rendering__plan3.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_component_rendering__plan3.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_component_rendering__plan3.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_component_rendering__plan3.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_component_rendering__plan4.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_component_rendering__plan4.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_component_rendering__plan4.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_component_rendering__plan4.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_component_rendering__plan5.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_component_rendering__plan5.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_component_rendering__plan5.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_component_rendering__plan5.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_render_create_table_as__create_table_as.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_render_create_table_as__create_table_as.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_render_create_table_as__create_table_as.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_render_create_table_as__create_table_as.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_render_create_table_as__create_view_as.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_render_create_table_as__create_view_as.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_render_create_table_as__create_view_as.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_render_create_table_as__create_view_as.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_render_limit__plan0.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_render_limit__plan0.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_render_limit__plan0.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_render_limit__plan0.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_render_order_by__plan0.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_render_order_by__plan0.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_render_order_by__plan0.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_render_order_by__plan0.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_render_where__plan0.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_render_where__plan0.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_render_where__plan0.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Postgres/test_render_where__plan0.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_component_rendering__plan0.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_component_rendering__plan0.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_component_rendering__plan0.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_component_rendering__plan0.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_component_rendering__plan1.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_component_rendering__plan1.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_component_rendering__plan1.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_component_rendering__plan1.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_component_rendering__plan2.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_component_rendering__plan2.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_component_rendering__plan2.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_component_rendering__plan2.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_component_rendering__plan3.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_component_rendering__plan3.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_component_rendering__plan3.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_component_rendering__plan3.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_component_rendering__plan4.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_component_rendering__plan4.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_component_rendering__plan4.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_component_rendering__plan4.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_component_rendering__plan5.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_component_rendering__plan5.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_component_rendering__plan5.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_component_rendering__plan5.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_render_create_table_as__create_table_as.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_render_create_table_as__create_table_as.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_render_create_table_as__create_table_as.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_render_create_table_as__create_table_as.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_render_create_table_as__create_view_as.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_render_create_table_as__create_view_as.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_render_create_table_as__create_view_as.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_render_create_table_as__create_view_as.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_render_limit__plan0.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_render_limit__plan0.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_render_limit__plan0.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_render_limit__plan0.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_render_order_by__plan0.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_render_order_by__plan0.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_render_order_by__plan0.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_render_order_by__plan0.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_render_where__plan0.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_render_where__plan0.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_render_where__plan0.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Redshift/test_render_where__plan0.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_component_rendering__plan0.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_component_rendering__plan0.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_component_rendering__plan0.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_component_rendering__plan0.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_component_rendering__plan1.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_component_rendering__plan1.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_component_rendering__plan1.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_component_rendering__plan1.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_component_rendering__plan2.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_component_rendering__plan2.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_component_rendering__plan2.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_component_rendering__plan2.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_component_rendering__plan3.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_component_rendering__plan3.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_component_rendering__plan3.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_component_rendering__plan3.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_component_rendering__plan4.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_component_rendering__plan4.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_component_rendering__plan4.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_component_rendering__plan4.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_component_rendering__plan5.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_component_rendering__plan5.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_component_rendering__plan5.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_component_rendering__plan5.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_render_create_table_as__create_table_as.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_render_create_table_as__create_table_as.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_render_create_table_as__create_table_as.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_render_create_table_as__create_table_as.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_render_create_table_as__create_view_as.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_render_create_table_as__create_view_as.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_render_create_table_as__create_view_as.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_render_create_table_as__create_view_as.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_render_limit__plan0.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_render_limit__plan0.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_render_limit__plan0.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_render_limit__plan0.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_render_order_by__plan0.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_render_order_by__plan0.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_render_order_by__plan0.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_render_order_by__plan0.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_render_where__plan0.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_render_where__plan0.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_render_where__plan0.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Snowflake/test_render_where__plan0.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_component_rendering__plan0.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_component_rendering__plan0.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_component_rendering__plan0.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_component_rendering__plan0.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_component_rendering__plan1.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_component_rendering__plan1.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_component_rendering__plan1.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_component_rendering__plan1.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_component_rendering__plan2.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_component_rendering__plan2.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_component_rendering__plan2.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_component_rendering__plan2.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_component_rendering__plan3.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_component_rendering__plan3.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_component_rendering__plan3.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_component_rendering__plan3.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_component_rendering__plan4.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_component_rendering__plan4.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_component_rendering__plan4.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_component_rendering__plan4.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_component_rendering__plan5.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_component_rendering__plan5.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_component_rendering__plan5.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_component_rendering__plan5.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_render_create_table_as__create_table_as.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_render_create_table_as__create_table_as.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_render_create_table_as__create_table_as.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_render_create_table_as__create_table_as.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_render_create_table_as__create_view_as.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_render_create_table_as__create_view_as.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_render_create_table_as__create_view_as.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_render_create_table_as__create_view_as.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_render_limit__plan0.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_render_limit__plan0.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_render_limit__plan0.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_render_limit__plan0.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_render_order_by__plan0.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_render_order_by__plan0.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_render_order_by__plan0.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_render_order_by__plan0.sql diff --git a/tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_render_where__plan0.sql b/tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_render_where__plan0.sql similarity index 100% rename from tests/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_render_where__plan0.sql rename to tests_metricflow/snapshots/test_sql_plan_render.py/SqlQueryPlan/Trino/test_render_where__plan0.sql diff --git a/tests/snapshots/test_sub_query_reducer.py/SqlQueryPlan/test_distinct_select_node_is_not_reduced__after_reducing.sql b/tests_metricflow/snapshots/test_sub_query_reducer.py/SqlQueryPlan/test_distinct_select_node_is_not_reduced__after_reducing.sql similarity index 100% rename from tests/snapshots/test_sub_query_reducer.py/SqlQueryPlan/test_distinct_select_node_is_not_reduced__after_reducing.sql rename to tests_metricflow/snapshots/test_sub_query_reducer.py/SqlQueryPlan/test_distinct_select_node_is_not_reduced__after_reducing.sql diff --git a/tests/snapshots/test_sub_query_reducer.py/SqlQueryPlan/test_distinct_select_node_is_not_reduced__before_reducing.sql b/tests_metricflow/snapshots/test_sub_query_reducer.py/SqlQueryPlan/test_distinct_select_node_is_not_reduced__before_reducing.sql similarity index 100% rename from tests/snapshots/test_sub_query_reducer.py/SqlQueryPlan/test_distinct_select_node_is_not_reduced__before_reducing.sql rename to tests_metricflow/snapshots/test_sub_query_reducer.py/SqlQueryPlan/test_distinct_select_node_is_not_reduced__before_reducing.sql diff --git a/tests/snapshots/test_sub_query_reducer.py/SqlQueryPlan/test_reduce_sub_query__after_reducing.sql b/tests_metricflow/snapshots/test_sub_query_reducer.py/SqlQueryPlan/test_reduce_sub_query__after_reducing.sql similarity index 100% rename from tests/snapshots/test_sub_query_reducer.py/SqlQueryPlan/test_reduce_sub_query__after_reducing.sql rename to tests_metricflow/snapshots/test_sub_query_reducer.py/SqlQueryPlan/test_reduce_sub_query__after_reducing.sql diff --git a/tests/snapshots/test_sub_query_reducer.py/SqlQueryPlan/test_reduce_sub_query__before_reducing.sql b/tests_metricflow/snapshots/test_sub_query_reducer.py/SqlQueryPlan/test_reduce_sub_query__before_reducing.sql similarity index 100% rename from tests/snapshots/test_sub_query_reducer.py/SqlQueryPlan/test_reduce_sub_query__before_reducing.sql rename to tests_metricflow/snapshots/test_sub_query_reducer.py/SqlQueryPlan/test_reduce_sub_query__before_reducing.sql diff --git a/tests/snapshots/test_sub_query_reducer.py/SqlQueryPlan/test_rewrite_order_by_with_a_join_in_parent__after_reducing.sql b/tests_metricflow/snapshots/test_sub_query_reducer.py/SqlQueryPlan/test_rewrite_order_by_with_a_join_in_parent__after_reducing.sql similarity index 100% rename from tests/snapshots/test_sub_query_reducer.py/SqlQueryPlan/test_rewrite_order_by_with_a_join_in_parent__after_reducing.sql rename to tests_metricflow/snapshots/test_sub_query_reducer.py/SqlQueryPlan/test_rewrite_order_by_with_a_join_in_parent__after_reducing.sql diff --git a/tests/snapshots/test_sub_query_reducer.py/SqlQueryPlan/test_rewrite_order_by_with_a_join_in_parent__before_reducing.sql b/tests_metricflow/snapshots/test_sub_query_reducer.py/SqlQueryPlan/test_rewrite_order_by_with_a_join_in_parent__before_reducing.sql similarity index 100% rename from tests/snapshots/test_sub_query_reducer.py/SqlQueryPlan/test_rewrite_order_by_with_a_join_in_parent__before_reducing.sql rename to tests_metricflow/snapshots/test_sub_query_reducer.py/SqlQueryPlan/test_rewrite_order_by_with_a_join_in_parent__before_reducing.sql diff --git a/tests/snapshots/test_table_alias_simplifier.py/SqlQueryPlan/test_table_alias_simplification__after_alias_simplification.sql b/tests_metricflow/snapshots/test_table_alias_simplifier.py/SqlQueryPlan/test_table_alias_simplification__after_alias_simplification.sql similarity index 100% rename from tests/snapshots/test_table_alias_simplifier.py/SqlQueryPlan/test_table_alias_simplification__after_alias_simplification.sql rename to tests_metricflow/snapshots/test_table_alias_simplifier.py/SqlQueryPlan/test_table_alias_simplification__after_alias_simplification.sql diff --git a/tests/snapshots/test_table_alias_simplifier.py/SqlQueryPlan/test_table_alias_simplification__before_alias_simplification.sql b/tests_metricflow/snapshots/test_table_alias_simplifier.py/SqlQueryPlan/test_table_alias_simplification__before_alias_simplification.sql similarity index 100% rename from tests/snapshots/test_table_alias_simplifier.py/SqlQueryPlan/test_table_alias_simplification__before_alias_simplification.sql rename to tests_metricflow/snapshots/test_table_alias_simplifier.py/SqlQueryPlan/test_table_alias_simplification__before_alias_simplification.sql diff --git a/tests/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/BigQuery/test_simple_join_to_time_spine__plan0.sql b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/BigQuery/test_simple_join_to_time_spine__plan0.sql similarity index 100% rename from tests/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/BigQuery/test_simple_join_to_time_spine__plan0.sql rename to tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/BigQuery/test_simple_join_to_time_spine__plan0.sql diff --git a/tests/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/BigQuery/test_simple_join_to_time_spine__plan0_optimized.sql b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/BigQuery/test_simple_join_to_time_spine__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/BigQuery/test_simple_join_to_time_spine__plan0_optimized.sql rename to tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/BigQuery/test_simple_join_to_time_spine__plan0_optimized.sql diff --git a/tests/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/Databricks/test_simple_join_to_time_spine__plan0.sql b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/Databricks/test_simple_join_to_time_spine__plan0.sql similarity index 100% rename from tests/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/Databricks/test_simple_join_to_time_spine__plan0.sql rename to tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/Databricks/test_simple_join_to_time_spine__plan0.sql diff --git a/tests/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/Databricks/test_simple_join_to_time_spine__plan0_optimized.sql b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/Databricks/test_simple_join_to_time_spine__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/Databricks/test_simple_join_to_time_spine__plan0_optimized.sql rename to tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/Databricks/test_simple_join_to_time_spine__plan0_optimized.sql diff --git a/tests/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/DuckDB/test_simple_join_to_time_spine__plan0.sql b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/DuckDB/test_simple_join_to_time_spine__plan0.sql similarity index 100% rename from tests/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/DuckDB/test_simple_join_to_time_spine__plan0.sql rename to tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/DuckDB/test_simple_join_to_time_spine__plan0.sql diff --git a/tests/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/DuckDB/test_simple_join_to_time_spine__plan0_optimized.sql b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/DuckDB/test_simple_join_to_time_spine__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/DuckDB/test_simple_join_to_time_spine__plan0_optimized.sql rename to tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/DuckDB/test_simple_join_to_time_spine__plan0_optimized.sql diff --git a/tests/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/Postgres/test_simple_join_to_time_spine__plan0.sql b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/Postgres/test_simple_join_to_time_spine__plan0.sql similarity index 100% rename from tests/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/Postgres/test_simple_join_to_time_spine__plan0.sql rename to tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/Postgres/test_simple_join_to_time_spine__plan0.sql diff --git a/tests/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/Postgres/test_simple_join_to_time_spine__plan0_optimized.sql b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/Postgres/test_simple_join_to_time_spine__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/Postgres/test_simple_join_to_time_spine__plan0_optimized.sql rename to tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/Postgres/test_simple_join_to_time_spine__plan0_optimized.sql diff --git a/tests/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/Redshift/test_simple_join_to_time_spine__plan0.sql b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/Redshift/test_simple_join_to_time_spine__plan0.sql similarity index 100% rename from tests/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/Redshift/test_simple_join_to_time_spine__plan0.sql rename to tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/Redshift/test_simple_join_to_time_spine__plan0.sql diff --git a/tests/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/Redshift/test_simple_join_to_time_spine__plan0_optimized.sql b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/Redshift/test_simple_join_to_time_spine__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/Redshift/test_simple_join_to_time_spine__plan0_optimized.sql rename to tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/Redshift/test_simple_join_to_time_spine__plan0_optimized.sql diff --git a/tests/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/Snowflake/test_simple_join_to_time_spine__plan0.sql b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/Snowflake/test_simple_join_to_time_spine__plan0.sql similarity index 100% rename from tests/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/Snowflake/test_simple_join_to_time_spine__plan0.sql rename to tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/Snowflake/test_simple_join_to_time_spine__plan0.sql diff --git a/tests/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/Snowflake/test_simple_join_to_time_spine__plan0_optimized.sql b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/Snowflake/test_simple_join_to_time_spine__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/Snowflake/test_simple_join_to_time_spine__plan0_optimized.sql rename to tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/Snowflake/test_simple_join_to_time_spine__plan0_optimized.sql diff --git a/tests/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/Trino/test_simple_join_to_time_spine__plan0.sql b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/Trino/test_simple_join_to_time_spine__plan0.sql similarity index 100% rename from tests/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/Trino/test_simple_join_to_time_spine__plan0.sql rename to tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/Trino/test_simple_join_to_time_spine__plan0.sql diff --git a/tests/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/Trino/test_simple_join_to_time_spine__plan0_optimized.sql b/tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/Trino/test_simple_join_to_time_spine__plan0_optimized.sql similarity index 100% rename from tests/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/Trino/test_simple_join_to_time_spine__plan0_optimized.sql rename to tests_metricflow/snapshots/test_time_spine_join_rendering.py/SqlQueryPlan/Trino/test_simple_join_to_time_spine__plan0_optimized.sql diff --git a/tests/source_schema_tools.py b/tests_metricflow/source_schema_tools.py similarity index 91% rename from tests/source_schema_tools.py rename to tests_metricflow/source_schema_tools.py index a3cd78f558..3a3a96d410 100644 --- a/tests/source_schema_tools.py +++ b/tests_metricflow/source_schema_tools.py @@ -2,10 +2,11 @@ import logging +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration + from metricflow.protocols.sql_client import SqlEngine -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.fixtures.sql_clients.ddl_sql_client import SqlClientWithDDLMethods -from tests.table_snapshot.table_snapshots import ( +from tests_metricflow.fixtures.sql_clients.ddl_sql_client import SqlClientWithDDLMethods +from tests_metricflow.table_snapshot.table_snapshots import ( SqlTableSnapshotLoader, SqlTableSnapshotRepository, ) diff --git a/tests_metricflow/sql/__init__.py b/tests_metricflow/sql/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/sql/compare_sql_plan.py b/tests_metricflow/sql/compare_sql_plan.py similarity index 91% rename from tests/sql/compare_sql_plan.py rename to tests_metricflow/sql/compare_sql_plan.py index b4a562c72d..4bb17c84a1 100644 --- a/tests/sql/compare_sql_plan.py +++ b/tests_metricflow/sql/compare_sql_plan.py @@ -1,16 +1,17 @@ from __future__ import annotations from _pytest.fixtures import FixtureRequest +from metricflow_semantics.dag.mf_dag import DagId +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration +from metricflow_semantics.test_helpers.snapshot_helpers import ( + assert_plan_snapshot_text_equal, + make_schema_replacement_function, +) -from metricflow.dag.mf_dag import DagId from metricflow.protocols.sql_client import SqlClient from metricflow.sql.render.sql_plan_renderer import DefaultSqlQueryPlanRenderer from metricflow.sql.sql_plan import SqlQueryPlan, SqlQueryPlanNode -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration, check_sql_engine_snapshot_marker -from tests.snapshot_utils import ( - assert_plan_snapshot_text_equal, - make_schema_replacement_function, -) +from tests_metricflow.fixtures.setup_fixtures import check_sql_engine_snapshot_marker def assert_default_rendered_sql_equal( diff --git a/tests_metricflow/sql/optimizer/__init__.py b/tests_metricflow/sql/optimizer/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/sql/optimizer/test_column_pruner.py b/tests_metricflow/sql/optimizer/test_column_pruner.py similarity index 99% rename from tests/sql/optimizer/test_column_pruner.py rename to tests_metricflow/sql/optimizer/test_column_pruner.py index c58b43cae7..51f870a661 100644 --- a/tests/sql/optimizer/test_column_pruner.py +++ b/tests_metricflow/sql/optimizer/test_column_pruner.py @@ -2,6 +2,8 @@ import pytest from _pytest.fixtures import FixtureRequest +from metricflow_semantics.sql.sql_join_type import SqlJoinType +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration from metricflow.sql.optimizer.column_pruner import SqlColumnPrunerOptimizer from metricflow.sql.render.sql_plan_renderer import DefaultSqlQueryPlanRenderer, SqlQueryPlanRenderer @@ -15,15 +17,13 @@ ) from metricflow.sql.sql_plan import ( SqlJoinDescription, - SqlJoinType, SqlQueryPlanNode, SqlSelectColumn, SqlSelectStatementNode, SqlTableFromClauseNode, ) from metricflow.sql.sql_table import SqlTable -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.sql.compare_sql_plan import assert_default_rendered_sql_equal +from tests_metricflow.sql.compare_sql_plan import assert_default_rendered_sql_equal @pytest.fixture diff --git a/tests/sql/optimizer/test_rewriting_sub_query_reducer.py b/tests_metricflow/sql/optimizer/test_rewriting_sub_query_reducer.py similarity index 99% rename from tests/sql/optimizer/test_rewriting_sub_query_reducer.py rename to tests_metricflow/sql/optimizer/test_rewriting_sub_query_reducer.py index b5c7b08dd0..1dc7f88546 100644 --- a/tests/sql/optimizer/test_rewriting_sub_query_reducer.py +++ b/tests_metricflow/sql/optimizer/test_rewriting_sub_query_reducer.py @@ -2,6 +2,8 @@ import pytest from _pytest.fixtures import FixtureRequest +from metricflow_semantics.sql.sql_join_type import SqlJoinType +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration from metricflow.sql.optimizer.rewriting_sub_query_reducer import SqlRewritingSubQueryReducer from metricflow.sql.sql_exprs import ( @@ -16,15 +18,13 @@ ) from metricflow.sql.sql_plan import ( SqlJoinDescription, - SqlJoinType, SqlOrderByDescription, SqlSelectColumn, SqlSelectStatementNode, SqlTableFromClauseNode, ) from metricflow.sql.sql_table import SqlTable -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.sql.compare_sql_plan import assert_default_rendered_sql_equal +from tests_metricflow.sql.compare_sql_plan import assert_default_rendered_sql_equal @pytest.fixture diff --git a/tests/sql/optimizer/test_sub_query_reducer.py b/tests_metricflow/sql/optimizer/test_sub_query_reducer.py similarity index 97% rename from tests/sql/optimizer/test_sub_query_reducer.py rename to tests_metricflow/sql/optimizer/test_sub_query_reducer.py index 366193c2ff..ed90796054 100644 --- a/tests/sql/optimizer/test_sub_query_reducer.py +++ b/tests_metricflow/sql/optimizer/test_sub_query_reducer.py @@ -2,6 +2,8 @@ import pytest from _pytest.fixtures import FixtureRequest +from metricflow_semantics.sql.sql_join_type import SqlJoinType +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration from metricflow.sql.optimizer.sub_query_reducer import SqlSubQueryReducer from metricflow.sql.sql_exprs import ( @@ -12,15 +14,13 @@ ) from metricflow.sql.sql_plan import ( SqlJoinDescription, - SqlJoinType, SqlOrderByDescription, SqlSelectColumn, SqlSelectStatementNode, SqlTableFromClauseNode, ) from metricflow.sql.sql_table import SqlTable -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.sql.compare_sql_plan import assert_default_rendered_sql_equal +from tests_metricflow.sql.compare_sql_plan import assert_default_rendered_sql_equal @pytest.fixture diff --git a/tests/sql/optimizer/test_table_alias_simplifier.py b/tests_metricflow/sql/optimizer/test_table_alias_simplifier.py similarity index 96% rename from tests/sql/optimizer/test_table_alias_simplifier.py rename to tests_metricflow/sql/optimizer/test_table_alias_simplifier.py index 737a61cb5a..c734f07bd7 100644 --- a/tests/sql/optimizer/test_table_alias_simplifier.py +++ b/tests_metricflow/sql/optimizer/test_table_alias_simplifier.py @@ -2,6 +2,8 @@ import pytest from _pytest.fixtures import FixtureRequest +from metricflow_semantics.sql.sql_join_type import SqlJoinType +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration from metricflow.sql.optimizer.table_alias_simplifier import SqlTableAliasSimplifier from metricflow.sql.render.sql_plan_renderer import DefaultSqlQueryPlanRenderer, SqlQueryPlanRenderer @@ -13,14 +15,12 @@ ) from metricflow.sql.sql_plan import ( SqlJoinDescription, - SqlJoinType, SqlSelectColumn, SqlSelectStatementNode, SqlTableFromClauseNode, ) from metricflow.sql.sql_table import SqlTable -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.sql.compare_sql_plan import assert_default_rendered_sql_equal +from tests_metricflow.sql.compare_sql_plan import assert_default_rendered_sql_equal @pytest.fixture diff --git a/tests/sql/test_engine_specific_rendering.py b/tests_metricflow/sql/test_engine_specific_rendering.py similarity index 98% rename from tests/sql/test_engine_specific_rendering.py rename to tests_metricflow/sql/test_engine_specific_rendering.py index 60a56fc758..8bc1133e35 100644 --- a/tests/sql/test_engine_specific_rendering.py +++ b/tests_metricflow/sql/test_engine_specific_rendering.py @@ -4,6 +4,7 @@ import pytest from _pytest.fixtures import FixtureRequest +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration from metricflow.protocols.sql_client import SqlClient from metricflow.sql.sql_exprs import ( @@ -24,8 +25,7 @@ SqlTableFromClauseNode, ) from metricflow.sql.sql_table import SqlTable -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.sql.compare_sql_plan import assert_rendered_sql_equal +from tests_metricflow.sql.compare_sql_plan import assert_rendered_sql_equal @pytest.mark.sql_engine_snapshot diff --git a/tests/sql/test_sql_expr_render.py b/tests_metricflow/sql/test_sql_expr_render.py similarity index 98% rename from tests/sql/test_sql_expr_render.py rename to tests_metricflow/sql/test_sql_expr_render.py index 7dabd7736a..7e6ba4cb6e 100644 --- a/tests/sql/test_sql_expr_render.py +++ b/tests_metricflow/sql/test_sql_expr_render.py @@ -8,6 +8,7 @@ from _pytest.fixtures import FixtureRequest from dbt_semantic_interfaces.type_enums.date_part import DatePart from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration from metricflow.sql.render.expr_renderer import DefaultSqlExpressionRenderer from metricflow.sql.sql_exprs import ( @@ -33,8 +34,7 @@ SqlWindowFunctionExpression, SqlWindowOrderByArgument, ) -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.snapshot_utils import assert_str_snapshot_equal +from tests_metricflow.snapshot_utils import assert_str_snapshot_equal logger = logging.getLogger(__name__) diff --git a/tests/sql/test_sql_plan_render.py b/tests_metricflow/sql/test_sql_plan_render.py similarity index 98% rename from tests/sql/test_sql_plan_render.py rename to tests_metricflow/sql/test_sql_plan_render.py index 6e21dcfc82..55e1cd4764 100644 --- a/tests/sql/test_sql_plan_render.py +++ b/tests_metricflow/sql/test_sql_plan_render.py @@ -5,6 +5,8 @@ import pytest from _pytest.fixtures import FixtureRequest +from metricflow_semantics.sql.sql_join_type import SqlJoinType +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration from metricflow.protocols.sql_client import SqlClient from metricflow.sql.sql_exprs import ( @@ -19,15 +21,13 @@ from metricflow.sql.sql_plan import ( SqlCreateTableAsNode, SqlJoinDescription, - SqlJoinType, SqlOrderByDescription, SqlSelectColumn, SqlSelectStatementNode, SqlTableFromClauseNode, ) from metricflow.sql.sql_table import SqlTable, SqlTableType -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.sql.compare_sql_plan import assert_rendered_sql_equal +from tests_metricflow.sql.compare_sql_plan import assert_rendered_sql_equal logger = logging.getLogger(__name__) diff --git a/tests_metricflow/sql_clients/__init__.py b/tests_metricflow/sql_clients/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/sql_clients/test_date_time_operations.py b/tests_metricflow/sql_clients/test_date_time_operations.py similarity index 99% rename from tests/sql_clients/test_date_time_operations.py rename to tests_metricflow/sql_clients/test_date_time_operations.py index 60d77f6bae..f3fdc89c4c 100644 --- a/tests/sql_clients/test_date_time_operations.py +++ b/tests_metricflow/sql_clients/test_date_time_operations.py @@ -22,6 +22,7 @@ import pandas as pd import pytest from dbt_semantic_interfaces.type_enums.date_part import DatePart +from metricflow_semantics.time.time_granularity import TimeGranularity from metricflow.protocols.sql_client import SqlClient from metricflow.sql.sql_exprs import ( @@ -30,7 +31,6 @@ SqlExtractExpression, SqlStringLiteralExpression, ) -from metricflow.time.time_granularity import TimeGranularity logger = logging.getLogger(__name__) diff --git a/tests/sql_clients/test_sql_client.py b/tests_metricflow/sql_clients/test_sql_client.py similarity index 92% rename from tests/sql_clients/test_sql_client.py rename to tests_metricflow/sql_clients/test_sql_client.py index f9ef577248..241886f47d 100644 --- a/tests/sql_clients/test_sql_client.py +++ b/tests_metricflow/sql_clients/test_sql_client.py @@ -5,14 +5,14 @@ import pandas as pd import pytest +from metricflow_semantics.random_id import random_id +from metricflow_semantics.sql.sql_bind_parameters import SqlBindParameters +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration from metricflow.protocols.sql_client import SqlClient, SqlEngine -from metricflow.random_id import random_id -from metricflow.sql.sql_bind_parameters import SqlBindParameters from metricflow.sql.sql_table import SqlTable -from tests.compare_df import assert_dataframes_equal -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.fixtures.sql_clients.ddl_sql_client import SqlClientWithDDLMethods +from tests_metricflow.compare_df import assert_dataframes_equal +from tests_metricflow.fixtures.sql_clients.ddl_sql_client import SqlClientWithDDLMethods logger = logging.getLogger(__name__) diff --git a/tests_metricflow/table_snapshot/__init__.py b/tests_metricflow/table_snapshot/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/table_snapshot/example_table_snapshot.yaml b/tests_metricflow/table_snapshot/example_table_snapshot.yaml similarity index 100% rename from tests/table_snapshot/example_table_snapshot.yaml rename to tests_metricflow/table_snapshot/example_table_snapshot.yaml diff --git a/tests/table_snapshot/table_snapshots.py b/tests_metricflow/table_snapshot/table_snapshots.py similarity index 98% rename from tests/table_snapshot/table_snapshots.py rename to tests_metricflow/table_snapshot/table_snapshots.py index 6350bf3215..4b2ccd2df5 100644 --- a/tests/table_snapshot/table_snapshots.py +++ b/tests_metricflow/table_snapshot/table_snapshots.py @@ -14,10 +14,10 @@ import yaml from dbt_semantic_interfaces.enum_extension import assert_values_exhausted from dbt_semantic_interfaces.implementations.base import FrozenBaseModel +from metricflow_semantics.specs.spec_classes import hash_items -from metricflow.specs.specs import hash_items from metricflow.sql.sql_table import SqlTable -from tests.fixtures.sql_clients.ddl_sql_client import SqlClientWithDDLMethods +from tests_metricflow.fixtures.sql_clients.ddl_sql_client import SqlClientWithDDLMethods logger = logging.getLogger(__name__) diff --git a/tests/table_snapshot/test_source_schema.py b/tests_metricflow/table_snapshot/test_source_schema.py similarity index 87% rename from tests/table_snapshot/test_source_schema.py rename to tests_metricflow/table_snapshot/test_source_schema.py index 1da5cb36e2..1eb03ed1e6 100644 --- a/tests/table_snapshot/test_source_schema.py +++ b/tests_metricflow/table_snapshot/test_source_schema.py @@ -4,14 +4,14 @@ import warnings import pytest +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration from metricflow.protocols.sql_client import SqlClient, SqlEngine from metricflow.sql.sql_table import SqlTable -from tests.compare_df import assert_dataframes_equal -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.fixtures.table_fixtures import CONFIGURED_SOURCE_TABLE_SNAPSHOT_REPOSITORY -from tests.source_schema_tools import get_populate_source_schema_shell_command -from tests.table_snapshot.table_snapshots import ( +from tests_metricflow.compare_df import assert_dataframes_equal +from tests_metricflow.fixtures.table_fixtures import CONFIGURED_SOURCE_TABLE_SNAPSHOT_REPOSITORY +from tests_metricflow.source_schema_tools import get_populate_source_schema_shell_command +from tests_metricflow.table_snapshot.table_snapshots import ( SqlTableSnapshotRepository, TableSnapshotException, ) diff --git a/tests/table_snapshot/test_table_snapshots.py b/tests_metricflow/table_snapshot/test_table_snapshots.py similarity index 91% rename from tests/table_snapshot/test_table_snapshots.py rename to tests_metricflow/table_snapshot/test_table_snapshots.py index 4514e0cb15..f9b89476af 100644 --- a/tests/table_snapshot/test_table_snapshots.py +++ b/tests_metricflow/table_snapshot/test_table_snapshots.py @@ -6,13 +6,13 @@ import pandas as pd import pytest from dbt_semantic_interfaces.test_utils import as_datetime +from metricflow_semantics.random_id import random_id +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration from metricflow.protocols.sql_client import SqlEngine -from metricflow.random_id import random_id -from tests.compare_df import assert_dataframes_equal -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.fixtures.sql_clients.ddl_sql_client import SqlClientWithDDLMethods -from tests.table_snapshot.table_snapshots import ( +from tests_metricflow.compare_df import assert_dataframes_equal +from tests_metricflow.fixtures.sql_clients.ddl_sql_client import SqlClientWithDDLMethods +from tests_metricflow.table_snapshot.table_snapshots import ( SqlTableColumnDefinition, SqlTableColumnType, SqlTableSnapshot, diff --git a/tests_metricflow/telemetry/__init__.py b/tests_metricflow/telemetry/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/telemetry/test_telemetry.py b/tests_metricflow/telemetry/test_telemetry.py similarity index 88% rename from tests/telemetry/test_telemetry.py rename to tests_metricflow/telemetry/test_telemetry.py index ab91312e9b..acd720359a 100644 --- a/tests/telemetry/test_telemetry.py +++ b/tests_metricflow/telemetry/test_telemetry.py @@ -26,11 +26,11 @@ def test_function() -> str: test_function() start_event = telemetry_reporter.test_handler.payloads[0].function_start_events[0] - assert start_event.module_name == "tests.telemetry.test_telemetry" + assert start_event.module_name == "tests_metricflow.telemetry.test_telemetry" assert start_event.function_name == "test_function" end_event = telemetry_reporter.test_handler.payloads[1].function_end_events[0] - assert end_event.module_name == "tests.telemetry.test_telemetry" + assert end_event.module_name == "tests_metricflow.telemetry.test_telemetry" assert end_event.function_name == "test_function" assert not end_event.exception_trace assert end_event.runtime > 0 @@ -46,11 +46,11 @@ def test_function() -> str: test_function() start_event = telemetry_reporter.test_handler.payloads[0].function_start_events[0] - assert start_event.module_name == "tests.telemetry.test_telemetry" + assert start_event.module_name == "tests_metricflow.telemetry.test_telemetry" assert start_event.function_name == "test_function" end_event = telemetry_reporter.test_handler.payloads[1].function_end_events[0] - assert end_event.module_name == "tests.telemetry.test_telemetry" + assert end_event.module_name == "tests_metricflow.telemetry.test_telemetry" assert end_event.function_name == "test_function" assert end_event.exception_trace assert end_event.exception_trace.find("Traceback (most recent call last):") != -1 diff --git a/tests/test_instance_serialization.py b/tests_metricflow/test_instance_serialization.py similarity index 86% rename from tests/test_instance_serialization.py rename to tests_metricflow/test_instance_serialization.py index 3b3440d77f..2d3f4717d3 100644 --- a/tests/test_instance_serialization.py +++ b/tests_metricflow/test_instance_serialization.py @@ -5,9 +5,9 @@ import pytest from dbt_semantic_interfaces.dataclass_serialization import DataClassDeserializer, DataclassSerializer +from metricflow_semantics.instances import InstanceSet -from metricflow.instances import InstanceSet -from tests.fixtures.manifest_fixtures import MetricFlowEngineTestFixture, SemanticManifestSetup +from tests_metricflow.fixtures.manifest_fixtures import MetricFlowEngineTestFixture, SemanticManifestSetup logger = logging.getLogger(__name__) diff --git a/tests_metricflow/time/__init__.py b/tests_metricflow/time/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests_metricflow/validation/__init__.py b/tests_metricflow/validation/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/model/test_data_warehouse_tasks.py b/tests_metricflow/validation/test_data_warehouse_tasks.py similarity index 97% rename from tests/model/test_data_warehouse_tasks.py rename to tests_metricflow/validation/test_data_warehouse_tasks.py index c362fc259c..e07996f6d7 100644 --- a/tests/model/test_data_warehouse_tasks.py +++ b/tests_metricflow/validation/test_data_warehouse_tasks.py @@ -14,16 +14,16 @@ from dbt_semantic_interfaces.test_utils import semantic_model_with_guaranteed_meta from dbt_semantic_interfaces.transformations.semantic_manifest_transformer import PydanticSemanticManifestTransformer from dbt_semantic_interfaces.type_enums.aggregation_type import AggregationType +from metricflow_semantics.sql.sql_bind_parameters import SqlBindParameters +from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration -from metricflow.model.data_warehouse_model_validator import ( +from metricflow.protocols.sql_client import SqlClient +from metricflow.validation.data_warehouse_model_validator import ( DataWarehouseModelValidator, DataWarehouseTaskBuilder, DataWarehouseValidationTask, ) -from metricflow.protocols.sql_client import SqlClient -from metricflow.sql.sql_bind_parameters import SqlBindParameters -from tests.fixtures.setup_fixtures import MetricFlowTestConfiguration -from tests.snapshot_utils import ( +from tests_metricflow.snapshot_utils import ( assert_sql_snapshot_equal, ) diff --git a/tests_metricflow/validation/test_join_validator.py b/tests_metricflow/validation/test_join_validator.py new file mode 100644 index 0000000000..cbea41a4eb --- /dev/null +++ b/tests_metricflow/validation/test_join_validator.py @@ -0,0 +1,212 @@ +from __future__ import annotations + +from typing import Mapping + +from dbt_semantic_interfaces.references import EntityReference +from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup + +from metricflow.validation.dataflow_join_validator import JoinDataflowOutputValidator +from tests_metricflow.fixtures.manifest_fixtures import MetricFlowEngineTestFixture, SemanticManifestSetup + + +def test_natural_entity_instance_set_validation( + mf_engine_test_fixture_mapping: Mapping[SemanticManifestSetup, MetricFlowEngineTestFixture], + scd_semantic_manifest_lookup: SemanticManifestLookup, +) -> None: + """Tests instance set validation for NATURAL target entity types. + + These tests rely on the scd_semantic_manifest_lookup, which makes extensive use of NATURAL key types. + """ + natural_user_instance_set = ( + mf_engine_test_fixture_mapping[SemanticManifestSetup.SCD_MANIFEST] + .data_set_mapping["primary_accounts"] + .instance_set + ) + primary_user_instance_set = ( + mf_engine_test_fixture_mapping[SemanticManifestSetup.SCD_MANIFEST].data_set_mapping["users_latest"].instance_set + ) + foreign_user_instance_set = ( + mf_engine_test_fixture_mapping[SemanticManifestSetup.SCD_MANIFEST] + .data_set_mapping["bookings_source"] + .instance_set + ) + unique_user_instance_set = ( + mf_engine_test_fixture_mapping[SemanticManifestSetup.SCD_MANIFEST].data_set_mapping["companies"].instance_set + ) + user_entity_reference = EntityReference(element_name="user") + join_evaluator = JoinDataflowOutputValidator( + semantic_model_lookup=scd_semantic_manifest_lookup.semantic_model_lookup + ) + + # Valid cases + natural_primary = join_evaluator.is_valid_instance_set_join( + left_instance_set=natural_user_instance_set, + right_instance_set=primary_user_instance_set, + on_entity_reference=user_entity_reference, + ) + natural_unique = join_evaluator.is_valid_instance_set_join( + left_instance_set=natural_user_instance_set, + right_instance_set=unique_user_instance_set, + on_entity_reference=user_entity_reference, + ) + foreign_natural = join_evaluator.is_valid_instance_set_join( + left_instance_set=foreign_user_instance_set, + right_instance_set=natural_user_instance_set, + on_entity_reference=user_entity_reference, + ) + primary_natural = join_evaluator.is_valid_instance_set_join( + left_instance_set=primary_user_instance_set, + right_instance_set=natural_user_instance_set, + on_entity_reference=user_entity_reference, + ) + unique_natural = join_evaluator.is_valid_instance_set_join( + left_instance_set=unique_user_instance_set, + right_instance_set=natural_user_instance_set, + on_entity_reference=user_entity_reference, + ) + # Invalid cases + natural_foreign = join_evaluator.is_valid_instance_set_join( + left_instance_set=natural_user_instance_set, + right_instance_set=foreign_user_instance_set, + on_entity_reference=user_entity_reference, + ) + natural_natural = join_evaluator.is_valid_instance_set_join( + left_instance_set=natural_user_instance_set, + right_instance_set=natural_user_instance_set, + on_entity_reference=user_entity_reference, + ) + + valid_joins = { + "natural to primary": natural_primary, + "natural to unique": natural_unique, + "foreign to natural": foreign_natural, + "primary to natural": primary_natural, + "unique to natural": unique_natural, + } + invalid_joins = { + "natural to foreign": natural_foreign, + "natural to natural": natural_natural, + } + assert all(valid_joins.values()) and not any(invalid_joins.values()), ( + f"Found unexpected join validator results when validating joins involving natural key comparisons! Valid " + f"joins marked invalid: {[k for k,v in valid_joins.items() if not v]}. Invalid joins marked valid: " + f"{[k for k, v in invalid_joins.items() if v]}." + ) + + +def test_distinct_target_instance_set_join_validation( + mf_engine_test_fixture_mapping: Mapping[SemanticManifestSetup, MetricFlowEngineTestFixture], + simple_semantic_manifest_lookup: SemanticManifestLookup, +) -> None: + """Tests instance set join validation to a PRIMARY or UNIQUE entity.""" + foreign_user_instance_set = ( + mf_engine_test_fixture_mapping[SemanticManifestSetup.SIMPLE_MANIFEST] + .data_set_mapping["listings_latest"] + .instance_set + ) + primary_user_instance_set = ( + mf_engine_test_fixture_mapping[SemanticManifestSetup.SIMPLE_MANIFEST] + .data_set_mapping["users_latest"] + .instance_set + ) + unique_user_instance_set = ( + mf_engine_test_fixture_mapping[SemanticManifestSetup.SIMPLE_MANIFEST].data_set_mapping["companies"].instance_set + ) + user_entity_reference = EntityReference(element_name="user") + join_evaluator = JoinDataflowOutputValidator( + semantic_model_lookup=simple_semantic_manifest_lookup.semantic_model_lookup + ) + + foreign_primary = join_evaluator.is_valid_instance_set_join( + left_instance_set=foreign_user_instance_set, + right_instance_set=primary_user_instance_set, + on_entity_reference=user_entity_reference, + ) + primary_primary = join_evaluator.is_valid_instance_set_join( + left_instance_set=primary_user_instance_set, + right_instance_set=primary_user_instance_set, + on_entity_reference=user_entity_reference, + ) + unique_primary = join_evaluator.is_valid_instance_set_join( + left_instance_set=unique_user_instance_set, + right_instance_set=primary_user_instance_set, + on_entity_reference=user_entity_reference, + ) + foreign_unique = join_evaluator.is_valid_instance_set_join( + left_instance_set=foreign_user_instance_set, + right_instance_set=unique_user_instance_set, + on_entity_reference=user_entity_reference, + ) + primary_unique = join_evaluator.is_valid_instance_set_join( + left_instance_set=primary_user_instance_set, + right_instance_set=unique_user_instance_set, + on_entity_reference=user_entity_reference, + ) + unique_unique = join_evaluator.is_valid_instance_set_join( + left_instance_set=unique_user_instance_set, + right_instance_set=unique_user_instance_set, + on_entity_reference=user_entity_reference, + ) + + results = { + "foreign to primary": foreign_primary, + "primary to primary": primary_primary, + "unique to primary": unique_primary, + "foreign to unique": foreign_unique, + "primary to unique": primary_unique, + "unique to unique": unique_unique, + } + assert all(results.values()), ( + f"All instance set level join types for primary and unique targets should be valid, but we found " + f"at least one that was not! Incorrectly failing types: {[k for k,v in results.items() if not v]}." + ) + + +def test_foreign_target_instance_set_join_validation( + mf_engine_test_fixture_mapping: Mapping[SemanticManifestSetup, MetricFlowEngineTestFixture], + simple_semantic_manifest_lookup: SemanticManifestLookup, +) -> None: + """Tests semantic model join validation to FOREIGN entity types.""" + foreign_user_instance_set = ( + mf_engine_test_fixture_mapping[SemanticManifestSetup.SIMPLE_MANIFEST] + .data_set_mapping["listings_latest"] + .instance_set + ) + primary_user_instance_set = ( + mf_engine_test_fixture_mapping[SemanticManifestSetup.SIMPLE_MANIFEST] + .data_set_mapping["users_latest"] + .instance_set + ) + unique_user_instance_set = ( + mf_engine_test_fixture_mapping[SemanticManifestSetup.SIMPLE_MANIFEST].data_set_mapping["companies"].instance_set + ) + user_entity_reference = EntityReference(element_name="user") + join_evaluator = JoinDataflowOutputValidator( + semantic_model_lookup=simple_semantic_manifest_lookup.semantic_model_lookup + ) + + foreign_foreign = join_evaluator.is_valid_instance_set_join( + left_instance_set=foreign_user_instance_set, + right_instance_set=foreign_user_instance_set, + on_entity_reference=user_entity_reference, + ) + primary_foreign = join_evaluator.is_valid_instance_set_join( + left_instance_set=primary_user_instance_set, + right_instance_set=foreign_user_instance_set, + on_entity_reference=user_entity_reference, + ) + unique_foreign = join_evaluator.is_valid_instance_set_join( + left_instance_set=unique_user_instance_set, + right_instance_set=foreign_user_instance_set, + on_entity_reference=user_entity_reference, + ) + + results = { + "foreign to foreign": foreign_foreign, + "primary to foreign": primary_foreign, + "unique to foreign": unique_foreign, + } + assert not any(results.values()), ( + f"All semantic model level joins against foreign targets should be invalid, but we found at least one " + f"that was not! Incorrectly passing types: {[k for k,v in results.items() if v]}." + )