@import
    "unique",
    "quick-sort";

@function modularScale(
    $iteration: 0, 
    $base: $__base, 
    $ratio: $__ratio
) {

    $scale: ($base);
    $result: $base;

    @if $iteration == 0 {
        @return $scale;
    }
    
    @for $i from 1 through abs($iteration) {
        $result: if($iteration < 0, abs($result / $ratio), $result * $ratio);
        $scale: append($scale, $result);
    }
    
    @return $scale;
}

@function ms(
    $iteration: 0,
    $bases: $__base,
    $ratio: $__ratio
) {

    $scales: ();

    @each $base in $bases {
        $scales: join($scales, modularScale(
            $iteration: $iteration,
            $base: $base,
            $ratio: $ratio
        ));
    }

    $scales: unique(quickSort($scales, if($iteration < 0, -1, 1)));

    @return nth($scales, abs($iteration) + 1);
}