text: /**
  
   * // Scale class management
  
   * @module echarts/scale/Scale
  
   */
  
  define(function (require) {
  
  
  
      var clazzUtil = require('../util/clazz');
  
  
  
      function Scale() {
  
          /**
  
           * Extent
  
           * @type {Array.<number>}
  
           * @protected
  
           */
  
          this._extent = [Infinity, -Infinity];
  
  
  
          /**
  
           * Step is calculated in adjustExtent
  
           * @type {Array.<number>}
  
           * @protected
  
           */
  
          this._interval = 0;
  
  
  
          this.init && this.init.apply(this, arguments);
  
      }
  
  
  
      var scaleProto = Scale.prototype;
  
  
  
      /**
  
       * Parse input val to valid inner number.
  
       * @param {*} val
  
       * @return {number}
  
       */
  
      scaleProto.parse = function (val) {
  
          // Notice: This would be a trap here, If the implementation
  
          // of this method depends on extent, and this method is used
  
          // before extent set (like in dataZoom), it would be wrong.
  
          // Nevertheless, parse does not depend on extent generally.
  
          return val;
  
      };
  
  
  
      scaleProto.contain = function (val) {
  
          var extent = this._extent;
  
          return val >= extent[0] && val <= extent[1];
  
      };
  
  
  
      /**
  
       * Normalize value to linear [0, 1], return 0.5 if extent span is 0
  
       * @param {number} val
  
       * @return {number}
  
       */
  
      scaleProto.normalize = function (val) {
  
          var extent = this._extent;
  
          if (extent[1] === extent[0]) {
  
              return 0.5;
  
          }
  
          return (val - extent[0]) / (extent[1] - extent[0]);
  
      };
  
  
  
      /**
  
       * Scale normalized value
  
       * @param {number} val
  
       * @return {number}
  
       */
  
      scaleProto.scale = function (val) {
  
          var extent = this._extent;
  
          return val * (extent[1] - extent[0]) + extent[0];
  
      };
  
  
  
      /**
  
       * Set extent from data
  
       * @param {Array.<number>} other
  
       */
  
      scaleProto.unionExtent = function (other) {
  
          var extent = this._extent;
  
          other[0] < extent[0] && (extent[0] = other[0]);
  
          other[1] > extent[1] && (extent[1] = other[1]);
  
          // not setExtent because in log axis it may transformed to power
  
          // this.setExtent(extent[0], extent[1]);
  
      };
  
  
  
      /**
  
       * Get extent
  
       * @return {Array.<number>}
  
       */
  
      scaleProto.getExtent = function () {
  
          return this._extent.slice();
  
      };
  
  
  
      /**
  
       * Set extent
  
       * @param {number} start
  
       * @param {number} end
  
       */
  
      scaleProto.setExtent = function (start, end) {
  
          var thisExtent = this._extent;
  
          if (!isNaN(start)) {
  
              thisExtent[0] = start;
  
          }
  
          if (!isNaN(end)) {
  
              thisExtent[1] = end;
  
          }
  
      };
  
  
  
      /**
  
       * @return {Array.<string>}
  
       */
  
      scaleProto.getTicksLabels = function () {
  
          var labels = [];
  
          var ticks = this.getTicks();
  
          for (var i = 0; i < ticks.length; i++) {
  
              labels.push(this.getLabel(ticks[i]));
  
          }
  
          return labels;
  
      };
  
  
  
      clazzUtil.enableClassExtend(Scale);
  
      clazzUtil.enableClassManagement(Scale, {
  
          registerWhenExtend: true
  
      });
  
  
  
      return Scale;
  
  });