Merge pull request #266 from tidalcycles/faster-fast

fix performance bottleneck
This commit is contained in:
Felix Roos 2022-11-21 22:15:48 +01:00 committed by GitHub
commit 4cf412b93d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 1791 additions and 1805 deletions

View File

@ -74,7 +74,7 @@ const fraction = (n) => {
-> those farey sequences turn out to make pattern querying ~20 times slower! always use strings! -> those farey sequences turn out to make pattern querying ~20 times slower! always use strings!
-> still, some optimizations could be done: .mul .div .add .sub calls still use numbers -> still, some optimizations could be done: .mul .div .add .sub calls still use numbers
*/ */
n = String(n); // n = String(n); // this is actually faster but imprecise...
} }
return Fraction(n); return Fraction(n);
}; };

View File

@ -800,6 +800,7 @@ export class Pattern {
* s("<bd sd> hh").fast(2) // s("[<bd sd> hh]*2") * s("<bd sd> hh").fast(2) // s("[<bd sd> hh]*2")
*/ */
_fast(factor) { _fast(factor) {
factor = Fraction(factor);
const fastQuery = this.withQueryTime((t) => t.mul(factor)); const fastQuery = this.withQueryTime((t) => t.mul(factor));
return fastQuery.withHapTime((t) => t.div(factor)); return fastQuery.withHapTime((t) => t.div(factor));
} }

File diff suppressed because it is too large Load Diff

View File

@ -807,36 +807,36 @@ exports[`runs examples > example "echo" example index 0 1`] = `
[ [
"0/1 -> 1/2: {\\"s\\":\\"bd\\"}", "0/1 -> 1/2: {\\"s\\":\\"bd\\"}",
"1/2 -> 1/1: {\\"s\\":\\"sd\\"}", "1/2 -> 1/1: {\\"s\\":\\"sd\\"}",
"-4166666666666667/12500000000000000 -> 8333333333333333/50000000000000000: {\\"s\\":\\"sd\\"}", "-1/3 -> 1/6: {\\"s\\":\\"sd\\"}",
"8333333333333333/50000000000000000 -> 8333333333333333/12500000000000000: {\\"s\\":\\"bd\\"}", "1/6 -> 2/3: {\\"s\\":\\"bd\\"}",
"8333333333333333/12500000000000000 -> 7291666666666667/6250000000000000: {\\"s\\":\\"sd\\"}", "2/3 -> 7/6: {\\"s\\":\\"sd\\"}",
"-4166666666666667/25000000000000000 -> 8333333333333333/25000000000000000: {\\"s\\":\\"sd\\"}", "-1/6 -> 1/3: {\\"s\\":\\"sd\\"}",
"8333333333333333/25000000000000000 -> 5208333333333333/6250000000000000: {\\"s\\":\\"bd\\"}", "1/3 -> 5/6: {\\"s\\":\\"bd\\"}",
"5208333333333333/6250000000000000 -> 8333333333333333/6250000000000000: {\\"s\\":\\"sd\\"}", "5/6 -> 4/3: {\\"s\\":\\"sd\\"}",
"1/1 -> 3/2: {\\"s\\":\\"bd\\"}", "1/1 -> 3/2: {\\"s\\":\\"bd\\"}",
"3/2 -> 2/1: {\\"s\\":\\"sd\\"}", "3/2 -> 2/1: {\\"s\\":\\"sd\\"}",
"8333333333333333/12500000000000000 -> 7291666666666667/6250000000000000: {\\"s\\":\\"sd\\"}", "2/3 -> 7/6: {\\"s\\":\\"sd\\"}",
"7291666666666667/6250000000000000 -> 5208333333333333/3125000000000000: {\\"s\\":\\"bd\\"}", "7/6 -> 5/3: {\\"s\\":\\"bd\\"}",
"5208333333333333/3125000000000000 -> 6770833333333333/3125000000000000: {\\"s\\":\\"sd\\"}", "5/3 -> 13/6: {\\"s\\":\\"sd\\"}",
"5208333333333333/6250000000000000 -> 8333333333333333/6250000000000000: {\\"s\\":\\"sd\\"}", "5/6 -> 4/3: {\\"s\\":\\"sd\\"}",
"8333333333333333/6250000000000000 -> 5729166666666667/3125000000000000: {\\"s\\":\\"bd\\"}", "4/3 -> 11/6: {\\"s\\":\\"bd\\"}",
"5729166666666667/3125000000000000 -> 7291666666666667/3125000000000000: {\\"s\\":\\"sd\\"}", "11/6 -> 7/3: {\\"s\\":\\"sd\\"}",
"2/1 -> 5/2: {\\"s\\":\\"bd\\"}", "2/1 -> 5/2: {\\"s\\":\\"bd\\"}",
"5/2 -> 3/1: {\\"s\\":\\"sd\\"}", "5/2 -> 3/1: {\\"s\\":\\"sd\\"}",
"5208333333333333/3125000000000000 -> 6770833333333333/3125000000000000: {\\"s\\":\\"sd\\"}", "5/3 -> 13/6: {\\"s\\":\\"sd\\"}",
"6770833333333333/3125000000000000 -> 8333333333333333/3125000000000000: {\\"s\\":\\"bd\\"}", "13/6 -> 8/3: {\\"s\\":\\"bd\\"}",
"8333333333333333/3125000000000000 -> 4947916666666667/1562500000000000: {\\"s\\":\\"sd\\"}", "8/3 -> 19/6: {\\"s\\":\\"sd\\"}",
"5729166666666667/3125000000000000 -> 7291666666666667/3125000000000000: {\\"s\\":\\"sd\\"}", "11/6 -> 7/3: {\\"s\\":\\"sd\\"}",
"7291666666666667/3125000000000000 -> 8854166666666667/3125000000000000: {\\"s\\":\\"bd\\"}", "7/3 -> 17/6: {\\"s\\":\\"bd\\"}",
"8854166666666667/3125000000000000 -> 5208333333333333/1562500000000000: {\\"s\\":\\"sd\\"}", "17/6 -> 10/3: {\\"s\\":\\"sd\\"}",
"3/1 -> 7/2: {\\"s\\":\\"bd\\"}", "3/1 -> 7/2: {\\"s\\":\\"bd\\"}",
"7/2 -> 4/1: {\\"s\\":\\"sd\\"}", "7/2 -> 4/1: {\\"s\\":\\"sd\\"}",
"8333333333333333/3125000000000000 -> 4947916666666667/1562500000000000: {\\"s\\":\\"sd\\"}", "8/3 -> 19/6: {\\"s\\":\\"sd\\"}",
"4947916666666667/1562500000000000 -> 5729166666666667/1562500000000000: {\\"s\\":\\"bd\\"}", "19/6 -> 11/3: {\\"s\\":\\"bd\\"}",
"5729166666666667/1562500000000000 -> 6510416666666667/1562500000000000: {\\"s\\":\\"sd\\"}", "11/3 -> 25/6: {\\"s\\":\\"sd\\"}",
"8854166666666667/3125000000000000 -> 5208333333333333/1562500000000000: {\\"s\\":\\"sd\\"}", "17/6 -> 10/3: {\\"s\\":\\"sd\\"}",
"5208333333333333/1562500000000000 -> 5989583333333333/1562500000000000: {\\"s\\":\\"bd\\"}", "10/3 -> 23/6: {\\"s\\":\\"bd\\"}",
"5989583333333333/1562500000000000 -> 6770833333333333/1562500000000000: {\\"s\\":\\"sd\\"}", "23/6 -> 13/3: {\\"s\\":\\"sd\\"}",
] ]
`; `;