function normalizeDimensionsDefine(dimensionsDefine) {
    if (!dimensionsDefine) {
        // The meaning of null/undefined is different from empty array.
        return;
    }
    var nameMap = createHashMap();
    return map(dimensionsDefine, function (item, index) {
        item = extend({}, isObject$1(item) ? item : {name: item});

        // User can set null in dimensions.
        // We dont auto specify name, othewise a given name may
        // cause it be refered unexpectedly.
        if (item.name == null) {
            return item;
        }

        // Also consider number form like 2012.
        item.name += '';
        // User may also specify displayName.
        // displayName will always exists except user not
        // specified or dim name is not specified or detected.
        // (A auto generated dim name will not be used as
        // displayName).
        if (item.displayName == null) {
            item.displayName = item.name;
        }

        var exist = nameMap.get(item.name);
        if (!exist) {
            nameMap.set(item.name, {count: 1});
        }
        else {
            item.name += '-' + exist.count++;
        }

        return item;
    });
}
[The strategy of the arrengment of data dimensions for dataset]:
"value way": all axes are non-category axes. So series one by one take
    several (the number is coordSysDims.length) dimensions from dataset.
    The result of data arrengment of data dimensions like:
    | ser0_x | ser0_y | ser1_x | ser1_y | ser2_x | ser2_y |
"category way": at least one axis is category axis. So the the first data
    dimension is always mapped to the first category axis and shared by
    all of the series. The other data dimensions are taken by series like
    "value way" does.
    The result of data arrengment of data dimensions like:
    | ser_shared_x | ser0_y | ser1_y | ser2_y |

@param {Array.<Object|string>} coordDimensions [{name: <string>, type: <string>, dimsDef: <Array>}, ...]
@param {module:model/Series} seriesModel
@param {module:data/Source} source
@return {Object} encode Never be `null/undefined`.