#!/usr/bin/python
#
# Copyright 2018-2023 Polyaxon, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

from polyaxon.polyflow.builds import V1Build
from polyaxon.polyflow.cache import V1Cache
from polyaxon.polyflow.component import V1Component
from polyaxon.polyflow.dags import DagOpSpec
from polyaxon.polyflow.early_stopping import (
    V1DiffStoppingPolicy,
    V1FailureEarlyStopping,
    V1MedianStoppingPolicy,
    V1MetricEarlyStopping,
    V1TruncationStoppingPolicy,
)
from polyaxon.polyflow.environment import V1Environment
from polyaxon.polyflow.events import V1EventKind, V1EventTrigger
from polyaxon.polyflow.hooks import V1Hook
from polyaxon.polyflow.init import V1Init
from polyaxon.polyflow.io import V1IO
from polyaxon.polyflow.joins import V1Join, V1JoinParam
from polyaxon.polyflow.matrix import (
    AcquisitionFunctions,
    GaussianProcessConfig,
    GaussianProcessesKernels,
    MatrixMixin,
    UtilityFunctionConfig,
    V1Bayes,
    V1GridSearch,
    V1HpChoice,
    V1HpDateRange,
    V1HpDateTimeRange,
    V1HpGeomSpace,
    V1HpLinSpace,
    V1HpLogNormal,
    V1HpLogSpace,
    V1HpLogUniform,
    V1HpNormal,
    V1HpPChoice,
    V1HpQLogNormal,
    V1HpQLogUniform,
    V1HpQNormal,
    V1HpQUniform,
    V1HpRange,
    V1HpUniform,
    V1Hyperband,
    V1Hyperopt,
    V1Iterative,
    V1Mapping,
    V1Matrix,
    V1MatrixKind,
    V1RandomSearch,
    V1Tuner,
)
from polyaxon.polyflow.mounts import V1ArtifactsMount
from polyaxon.polyflow.notifications import V1Notification
from polyaxon.polyflow.operations import V1CompiledOperation, V1Operation
from polyaxon.polyflow.optimization import (
    V1Optimization,
    V1OptimizationMetric,
    V1OptimizationResource,
    V1ResourceType,
)
from polyaxon.polyflow.params import ParamSpec, V1Param, ops_params
from polyaxon.polyflow.plugins import V1Plugins
from polyaxon.polyflow.references import (
    RefMixin,
    V1DagRef,
    V1HubRef,
    V1PathRef,
    V1UrlRef,
)
from polyaxon.polyflow.run import (
    MXJobMode,
    RunMixin,
    V1CleanerJob,
    V1CleanPodPolicy,
    V1CloningKind,
    V1Dag,
    V1Dask,
    V1Flink,
    V1Job,
    V1KFReplica,
    V1MPIJob,
    V1MXJob,
    V1NotifierJob,
    V1PaddleJob,
    V1PipelineKind,
    V1PytorchJob,
    V1RunEdgeKind,
    V1RunKind,
    V1RunResources,
    V1Runtime,
    V1SchedulingPolicy,
    V1Service,
    V1Spark,
    V1SparkDeploy,
    V1SparkReplica,
    V1SparkType,
    V1TFJob,
    V1TunerJob,
    V1XGBoostJob,
    validate_run_patch,
)
from polyaxon.polyflow.schedules import (
    ScheduleMixin,
    V1CronSchedule,
    V1DateTimeSchedule,
    V1IntervalSchedule,
    V1ScheduleKind,
)
from polyaxon.polyflow.templates import V1Template
from polyaxon.polyflow.termination import V1Termination
from polyaxon.polyflow.trigger_policies import V1TriggerPolicy

# Forward references for operations and components
V1Dag.update_forward_refs(V1Operation=V1Operation)
V1Dag.update_forward_refs(V1Component=V1Component)
