class_docstr: Ensemble training and evaluation `Tensors` and `Ops`.
  
  Args:
    name: String name of this ensemble. Should be unique in the graph.
    ensemble: The `adanet.ensemble.Ensemble` of interest.
    architecture: The `_Architecture` that represents this ensemble.
    subnetwork_builders: The Iterable of candidate subnetworks for the current
      iteration.
    predictions: Predictions `Tensor` or dict of `Tensor`.
    step: `tf.Variable` step counter representing the number of steps this
      ensemble trained for. Resets at every AdaNet iteration.
    variables: List of `tf.Variable` instances associated with the ensemble.
    loss: Loss `Tensor` as defined by the surrogate loss function Phi in
      Equations (4), (5), and (6). Must be either scalar, or with shape `[1]`.
    adanet_loss: Loss `Tensor` as defined by F(w) in Equation (4). Must be
      either scalar, or with shape `[1]`. The AdaNet algorithm aims to minimize
      this objective which balances training loss with the total complexity of
      the subnetworks in the ensemble.
    train_op: Candidate ensemble's mixture weights `TrainOpSpec`.
    eval_metrics: `_EnsembleMetrics` object.
    export_outputs: Describes the output signatures to be exported to
      `SavedModel` and used during serving. See `tf.estimator.EstimatorSpec`.
    subnetwork_specs: Iterable of `_SubnetworkSpecs` for this iteration.
  
  Returns:
    An `EnsembleSpec` object.
code: def __new__(
      cls,
      name,
      ensemble,
      architecture,
      subnetwork_builders,
      predictions,
      step,
      variables,
      loss=None,
      adanet_loss=None,
      train_op=None,
      eval_metrics=None,
      export_outputs=None,
      subnetwork_specs=None,
  ):
      if subnetwork_specs is None:
          subnetwork_specs = []
      return super(_EnsembleSpec, cls).__new__(
          cls,
          name=name,
          ensemble=ensemble,
          architecture=architecture,
          subnetwork_builders=subnetwork_builders,
          subnetwork_specs=subnetwork_specs,
          predictions=predictions,
          step=step,
          variables=variables,
          loss=loss,
          adanet_loss=adanet_loss,
          train_op=train_op,
          eval_metrics=eval_metrics,
          export_outputs=export_outputs,
      )
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import collections
  import contextlib
  import copy
  import functools
  import inspect
  import os
  from absl import logging
  from adanet import ensemble
  from adanet import subnetwork
  from adanet import tf_compat
  from adanet.core.architecture import _Architecture
  from adanet.core.eval_metrics import _EnsembleMetrics
  from adanet.core.eval_metrics import _SubnetworkMetrics
  from adanet.core.summary import monkey_patched_summaries
  import tensorflow.compat.v1
  import tensorflow.compat.v2
label_desc: Use image node_id 1 for calling the _EnsembleSpec obj's underlying member method code with example usage: obj.__new__(cls, name, ensemble, architecture, subnetwork_builders, predictions, step, variables, loss, adanet_loss, train_op, eval_metrics, export_outputs, subnetwork_specs) and returns: super