class_docstr: A pipeline model that exposes a sequence of models as a single model,
  It requires a set of inputs, a sequence of other models and a set of outputs.
  
  This class is the base class for :py:class:`PipelineClassifier` and
  :py:class:`PipelineRegressor`, which contain a sequence ending in a classifier
  or regressor and themselves behave like a classifier or regressor.  This class
  may be used directly for a sequence of feature transformer objects.
class_docstr_tok: ["A","pipeline","model","that","exposes","a","sequence","of","models","as","a","single","model",",","It","requires","a","set","of","inputs",",","a","sequence","of","other","models","and","a","set","of","outputs",".","This","class","is","the","base","class","for",":","py",":","class",":","`","PipelineClassifier","`","and",":","py",":","class",":","`","PipelineRegressor","`",",","which","contain","a","sequence","ending","in","a","classifier","or","regressor","and","themselves","behave","like","a","classifier","or","regressor",".","This","class","may","be","used","directly","for","a","sequence","of","feature","transformer","objects","."]
code: def _validate_sub_models_and_make_updatable(self, pipeline, spec):
      num_models = len(pipeline.models)
      if num_models < 1:
          raise ValueError(
              "Pipeline does not seem to have any models. It should be marked as updatable only after adding all sub-models."
          )
  
      for model in pipeline.models[:-1]:
          if model.isUpdatable:
              raise ValueError(
                  "Only the last model can be updatable in an updatable pipeline."
              )
  
      last_model = pipeline.models[num_models - 1]
      if not last_model.isUpdatable:
          raise ValueError(
              "A pipeline can be made updatable only if the last model is updatable."
          )
  
      spec.isUpdatable = True
  
imports: from ..None import SPECIFICATION_VERSION
  from ..proto import Model_pb2
  from .None import _feature_management
  from .None import model
  from ._interface_management import set_classifier_interface_params, set_regressor_interface_params, set_training_features, set_transform_interface_params
label_desc: Use image node_id 4 for calling the Pipeline obj's underlying member method code with example usage: obj._validate_sub_models_and_make_updatable(pipeline, spec) without return types