class_docstr: A Validator for checking specific tasks for the manifest against the Data Warehouse.
  
  Data Warehouse Validations are validations that are done against the data
  warehouse based on the manifest configured by the user. Their purpose is to
  ensure that queries generated by MetricFlow won't fail when you go to use
  them (assuming the manifest has passed these validations before use).
class_docstr_tok: ["A","Validator","for","checking","specific","tasks","for","the","manifest","against","the","Data","Warehouse",".","Data","Warehouse","Validations","are","validations","that","are","done","against","the","data","warehouse","based","on","the","manifest","configured","by","the","user",".","Their","purpose","is","to","ensure","that","queries","generated","by","MetricFlow","wo","n't","fail","when","you","go","to","use","them","(","assuming","the","manifest","has","passed","these","validations","before","use",")","."]
docstr: Runs the list of tasks as queries agains the data warehouse, returning any found issues.
  
  Args:
      tasks: A list of tasks to run against the data warehouse
      timeout: An optional timeout. Default is None. When the timeout is hit, function will return early.
  
  Returns:
      A list of validation issues discovered when running the passed in tasks against the data warehosue
docstr_tok: ["Runs","the","list","of","tasks","as","queries","agains","the","data","warehouse",",","returning","any","found","issues",".","Args",":","tasks",":","A","list","of","tasks","to","run","against","the","data","warehouse","timeout",":","An","optional","timeout",".","Default","is","None",".","When","the","timeout","is","hit",",","function","will","return","early",".","Returns",":","A","list","of","validation","issues","discovered","when","running","the","passed","in","tasks","against","the","data","warehosue"]
code: def run_tasks(
      self,
      tasks: List[DataWarehouseValidationTask],
      timeout: Optional[int] = None,
  ) -> SemanticManifestValidationResults:
      """Runs the list of tasks as queries agains the data warehouse, returning any found issues.
  
      Args:
          tasks: A list of tasks to run against the data warehouse
          timeout: An optional timeout. Default is None. When the timeout is hit, function will return early.
  
      Returns:
          A list of validation issues discovered when running the passed in tasks against the data warehosue
      """
      # Used for keeping track if we go past the max time
      start_time = perf_counter()
  
      issues: List[ValidationIssue] = []
      # TODO: Asyncio implementation
      for index, task in enumerate(tasks):
          if (
              timeout is not None
              and perf_counter() - start_time > timeout
          ):
              issues.append(
                  ValidationWarning(
                      context=None,
                      message=f"Hit timeout before completing all tasks. Completed {index}/{len(tasks)} tasks.",
                  )
              )
              break
          try:
              (
                  query_string,
                  query_params,
              ) = task.query_and_params_callable()
              self._sql_client.dry_run(
                  stmt=query_string, sql_bind_parameters=query_params
              )
          except Exception as e:
              issues.append(
                  ValidationError(
                      context=task.context,
                      message=task.error_message
                      + f"\nReceived following error from data warehouse:\n{e}",
                      extra_detail="".join(
                          traceback.format_tb(e.__traceback__)
                      ),
                  )
              )
              if task.on_fail_subtasks:
                  sub_task_timeout = (
                      floor(timeout - (perf_counter() - start_time))
                      if timeout
                      else None
                  )
                  issues += self.run_tasks(
                      tasks=task.on_fail_subtasks,
                      timeout=sub_task_timeout,
                  ).all_issues
  
      return SemanticManifestValidationResults.from_issues_sequence(
          issues
      )
  
imports: from __future__ import annotations
  import collections
  import traceback
  from dataclasses import dataclass, field
  from functools import partial
  from math import floor
  from time import perf_counter
  from typing import Callable, DefaultDict, Dict, List, Optional, Sequence, Tuple, TypeVar
  from dbt_semantic_interfaces.protocols.metric import Metric
  from dbt_semantic_interfaces.protocols.semantic_manifest import SemanticManifest
  from dbt_semantic_interfaces.protocols.semantic_model import SemanticModel
  from dbt_semantic_interfaces.references import MetricModelReference, SemanticModelElementReference, SemanticModelReference
  from dbt_semantic_interfaces.validations.validator_helpers import FileContext, MetricContext, SemanticManifestValidationResults, SemanticModelContext, SemanticModelElementContext, SemanticModelElementType, ValidationContext, ValidationError, ValidationIssue, ValidationWarning
  from metricflow.dataflow.builder.node_data_set import DataflowPlanNodeOutputDataSetResolver
  from metricflow.dataflow.builder.source_node import SourceNodeBuilder
  from metricflow.dataflow.dataflow_plan import BaseOutput, FilterElementsNode
  from metricflow.dataset.convert_semantic_model import SemanticModelToDataSetConverter
  from metricflow.dataset.dataset 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
label_desc: Use image node_id 2 for calling the DataWarehouseModelValidator obj's underlying member method code with example usage: obj.run_tasks(tasks, timeout) and returns: SemanticManifestValidationResults