code: def train_position_scales(self, layout, layers):
          
          _layout = layout.layout
          panel_scales_x = layout.panel_scales_x
          panel_scales_y = layout.panel_scales_y
  
          # loop over each layer, training x and y scales in turn
          for layer in layers:
              data = layer.data
              match_id = match(data['PANEL'], _layout['PANEL'])
              if panel_scales_x:
                  x_vars = list(set(panel_scales_x[0].aesthetics) &
                                set(data.columns))
                  # the scale index for each data point
                  SCALE_X = _layout['SCALE_X'].iloc[match_id].tolist()
                  panel_scales_x.train(data, x_vars, SCALE_X)
  
              if panel_scales_y:
                  y_vars = list(set(panel_scales_y[0].aesthetics) &
                                set(data.columns))
                  # the scale index for each data point
                  SCALE_Y = _layout['SCALE_Y'].iloc[match_id].tolist()
                  panel_scales_y.train(data, y_vars, SCALE_Y)
  
          return self
docs: Compute ranges for the x and y scales