import “linear”; import “nice”; import “scale”;

d3.scale.pow = function() {

return d3_scale_pow(d3.scale.linear(), 1, [0, 1]);

};

function d3_scale_pow(linear, exponent, domain) {

var powp = d3_scale_powPow(exponent),
    powb = d3_scale_powPow(1 / exponent);

function scale(x) {
  return linear(powp(x));
}

scale.invert = function(x) {
  return powb(linear.invert(x));
};

scale.domain = function(x) {
  if (!arguments.length) return domain;
  linear.domain((domain = x.map(Number)).map(powp));
  return scale;
};

scale.ticks = function(m) {
  return d3_scale_linearTicks(domain, m);
};

scale.tickFormat = function(m, format) {
  return d3_scale_linearTickFormat(domain, m, format);
};

scale.nice = function(m) {
  return scale.domain(d3_scale_linearNice(domain, m));
};

scale.exponent = function(x) {
  if (!arguments.length) return exponent;
  powp = d3_scale_powPow(exponent = x);
  powb = d3_scale_powPow(1 / exponent);
  linear.domain(domain.map(powp));
  return scale;
};

scale.copy = function() {
  return d3_scale_pow(linear.copy(), exponent, domain);
};

return d3_scale_linearRebind(scale, linear);

}

function d3_scale_powPow(e) {

return function(x) {
  return x < 0 ? -Math.pow(-x, e) : Math.pow(x, e);
};

}