from util import stopwatch
from api import GenerationRequest
from data import wavtool2midi
import json
from logitbias_json import json2logitbias

WARMUP_INPUT = """
{"notes":[{"pitch":73,"start":0,"end":0.16666666666666666,"velocity":0.7874015748031497,"lifted":false},{"pitch":81,"start":0,"end":0.16666666666666666,"velocity":0.7874015748031497,"lifted":false},{"pitch":76,"start":0,"end":0.16666666666666666,"velocity":0.7874015748031497,"lifted":false},{"pitch":73,"start":0.5,"end":0.6666666666666666,"velocity":0.7874015748031497,"lifted":false},{"pitch":81,"start":0.5,"end":0.6666666666666666,"velocity":0.7874015748031497,"lifted":false},{"pitch":76,"start":0.5,"end":0.6666666666666666,"velocity":0.7874015748031497,"lifted":false},{"pitch":73,"start":1,"end":1.1666666666666667,"velocity":0.7874015748031497,"lifted":false},{"pitch":81,"start":1,"end":1.1666666666666667,"velocity":0.7874015748031497,"lifted":false},{"pitch":76,"start":1,"end":1.1666666666666667,"velocity":0.7874015748031497,"lifted":false},{"pitch":73,"start":1.5,"end":1.6666666666666667,"velocity":0.7874015748031497,"lifted":false},{"pitch":81,"start":1.5,"end":1.6666666666666667,"velocity":0.7874015748031497,"lifted":false},{"pitch":76,"start":1.5,"end":1.6666666666666667,"velocity":0.7874015748031497,"lifted":false},{"pitch":73,"start":2,"end":2.1666666666666665,"velocity":0.7874015748031497,"lifted":false},{"pitch":81,"start":2,"end":2.1666666666666665,"velocity":0.7874015748031497,"lifted":false},{"pitch":76,"start":2,"end":2.1666666666666665,"velocity":0.7874015748031497,"lifted":false},{"pitch":73,"start":2.5,"end":2.6666666666666665,"velocity":0.7874015748031497,"lifted":false},{"pitch":81,"start":2.5,"end":2.6666666666666665,"velocity":0.7874015748031497,"lifted":false},{"pitch":76,"start":2.5,"end":2.6666666666666665,"velocity":0.7874015748031497,"lifted":false},{"pitch":73,"start":3,"end":3.1666666666666665,"velocity":0.7874015748031497,"lifted":false},{"pitch":81,"start":3,"end":3.1666666666666665,"velocity":0.7874015748031497,"lifted":false},{"pitch":76,"start":3,"end":3.1666666666666665,"velocity":0.7874015748031497,"lifted":false},{"pitch":73,"start":3.5,"end":3.6666666666666665,"velocity":0.7874015748031497,"lifted":false},{"pitch":76,"start":3.5,"end":3.6666666666666665,"velocity":0.7874015748031497,"lifted":false},{"pitch":81,"start":3.5,"end":3.6666666666666665,"velocity":0.7874015748031497,"lifted":false},{"pitch":78,"start":4,"end":4.166666666666667,"velocity":0.7874015748031497,"lifted":false},{"pitch":73,"start":4,"end":4.166666666666667,"velocity":0.7874015748031497,"lifted":false},{"pitch":69,"start":4,"end":4.166666666666667,"velocity":0.7874015748031497,"lifted":false},{"pitch":78,"start":4.5,"end":4.666666666666667,"velocity":0.7874015748031497,"lifted":false},{"pitch":73,"start":4.5,"end":4.666666666666667,"velocity":0.7874015748031497,"lifted":false},{"pitch":69,"start":4.5,"end":4.666666666666667,"velocity":0.7874015748031497,"lifted":false},{"pitch":78,"start":5,"end":5.166666666666667,"velocity":0.7874015748031497,"lifted":false},{"pitch":73,"start":5,"end":5.166666666666667,"velocity":0.7874015748031497,"lifted":false},{"pitch":69,"start":5,"end":5.166666666666667,"velocity":0.7874015748031497,"lifted":false},{"pitch":78,"start":5.5,"end":5.666666666666667,"velocity":0.7874015748031497,"lifted":false},{"pitch":73,"start":5.5,"end":5.666666666666667,"velocity":0.7874015748031497,"lifted":false},{"pitch":69,"start":5.5,"end":5.666666666666667,"velocity":0.7874015748031497,"lifted":false},{"pitch":78,"start":6,"end":6.166666666666667,"velocity":0.7874015748031497,"lifted":false},{"pitch":73,"start":6,"end":6.166666666666667,"velocity":0.7874015748031497,"lifted":false},{"pitch":69,"start":6,"end":6.166666666666667,"velocity":0.7874015748031497,"lifted":false},{"pitch":78,"start":6.5,"end":6.666666666666667,"velocity":0.7874015748031497,"lifted":false},{"pitch":73,"start":6.5,"end":6.666666666666667,"velocity":0.7874015748031497,"lifted":false},{"pitch":69,"start":6.5,"end":6.666666666666667,"velocity":0.7874015748031497,"lifted":false},{"pitch":78,"start":7,"end":7.166666666666667,"velocity":0.7874015748031497,"lifted":false},{"pitch":73,"start":7,"end":7.166666666666667,"velocity":0.7874015748031497,"lifted":false},{"pitch":69,"start":7,"end":7.166666666666667,"velocity":0.7874015748031497,"lifted":false},{"pitch":69,"start":7.5,"end":7.666666666666667,"velocity":0.7874015748031497,"lifted":false},{"pitch":73,"start":7.5,"end":7.666666666666667,"velocity":0.7874015748031497,"lifted":false},{"pitch":78,"start":7.5,"end":7.666666666666667,"velocity":0.7874015748031497,"lifted":false}],"accompany":[{"pitch":52,"start":0,"end":0.375,"velocity":0.7480314960629921,"lifted":false},{"pitch":49,"start":0.5,"end":0.9166666666666666,"velocity":0.7480314960629921,"lifted":false},{"pitch":51,"start":1,"end":1.4166666666666667,"velocity":0.7480314960629921,"lifted":false},{"pitch":52,"start":2.5,"end":2.9166666666666665,"velocity":0.7480314960629921,"lifted":false},{"pitch":51,"start":3,"end":3.4166666666666665,"velocity":0.7480314960629921,"lifted":false},{"pitch":52,"start":3.5,"end":3.9166666666666665,"velocity":0.7480314960629921,"lifted":false},{"pitch":52,"start":4,"end":4.416666666666667,"velocity":0.7480314960629921,"lifted":false},{"pitch":49,"start":4.5,"end":4.916666666666667,"velocity":0.7480314960629921,"lifted":false},{"pitch":52,"start":5.5,"end":5.916666666666667,"velocity":0.7480314960629921,"lifted":false},{"pitch":52,"start":6,"end":6.416666666666667,"velocity":0.7480314960629921,"lifted":false},{"pitch":49,"start":6.5,"end":6.916666666666667,"velocity":0.7480314960629921,"lifted":false},{"pitch":57,"start":7.5,"end":7.916666666666667,"velocity":0.7480314960629921,"lifted":false},{"pitch":64,"start":8,"end":8.416666666666666,"velocity":0.7480314960629921,"lifted":false},{"pitch":54,"start":8.5,"end":8.916666666666666,"velocity":0.7480314960629921,"lifted":false},{"pitch":59,"start":9,"end":9.25,"velocity":0.7480314960629921,"lifted":false},{"pitch":56,"start":9,"end":9.416666666666666,"velocity":0.7480314960629921,"lifted":false},{"pitch":34,"start":9,"end":10.125,"velocity":0.9448818897637795,"lifted":false},{"pitch":59,"start":9.5,"end":9.916666666666666,"velocity":0.7480314960629921,"lifted":false},{"pitch":64,"start":9.5,"end":9.916666666666666,"velocity":0.7480314960629921,"lifted":false},{"pitch":59,"start":10,"end":10.416666666666666,"velocity":0.7480314960629921,"lifted":false},{"pitch":64,"start":10,"end":10.25,"velocity":0.7480314960629921,"lifted":false},{"pitch":59,"start":10.5,"end":10.75,"velocity":0.7480314960629921,"lifted":false},{"pitch":54,"start":10.5,"end":10.916666666666666,"velocity":0.7480314960629921,"lifted":false},{"pitch":56,"start":10.875,"end":11.416666666666666,"velocity":0.7480314960629921,"lifted":false},{"pitch":51,"start":10.875,"end":11.416666666666666,"velocity":0.7480314960629921,"lifted":false},{"pitch":64,"start":11,"end":11.583333333333334,"velocity":0.7480314960629921,"lifted":false},{"pitch":68,"start":11,"end":11.625,"velocity":0.8661417322834646,"lifted":false},{"pitch":61,"start":11.5,"end":11.875,"velocity":0.7086614173228346,"lifted":false},{"pitch":59,"start":11.5,"end":11.916666666666666,"velocity":0.7480314960629921,"lifted":false},{"pitch":59,"start":12,"end":12.416666666666666,"velocity":0.7480314960629921,"lifted":false},{"pitch":64,"start":12,"end":12.416666666666666,"velocity":0.7480314960629921,"lifted":false},{"pitch":59,"start":12.5,"end":12.833333333333334,"velocity":0.7480314960629921,"lifted":false},{"pitch":54,"start":12.5,"end":12.916666666666666,"velocity":0.7480314960629921,"lifted":false},{"pitch":49,"start":12.5,"end":12.916666666666666,"velocity":0.7480314960629921,"lifted":false},{"pitch":59,"start":13,"end":13.375,"velocity":0.7480314960629921,"lifted":false},{"pitch":56,"start":13,"end":13.416666666666666,"velocity":0.7480314960629921,"lifted":false},{"pitch":51,"start":13,"end":13.416666666666666,"velocity":0.7480314960629921,"lifted":false},{"pitch":59,"start":13.5,"end":13.916666666666666,"velocity":0.7480314960629921,"lifted":false},{"pitch":54,"start":13.5,"end":13.916666666666666,"velocity":0.7480314960629921,"lifted":false},{"pitch":64,"start":13.5,"end":13.916666666666666,"velocity":0.7480314960629921,"lifted":false},{"pitch":59,"start":14,"end":14.416666666666666,"velocity":0.7480314960629921,"lifted":false},{"pitch":54,"start":14,"end":14.416666666666666,"velocity":0.7480314960629921,"lifted":false},{"pitch":64,"start":14,"end":14.25,"velocity":0.7480314960629921,"lifted":false},{"pitch":59,"start":14.5,"end":14.75,"velocity":0.7480314960629921,"lifted":false},{"pitch":54,"start":14.5,"end":14.916666666666666,"velocity":0.7480314960629921,"lifted":false},{"pitch":49,"start":14.5,"end":14.916666666666666,"velocity":0.7480314960629921,"lifted":false},{"pitch":59,"start":15,"end":15.333333333333334,"velocity":0.7480314960629921,"lifted":false},{"pitch":51,"start":15,"end":15.416666666666666,"velocity":0.7480314960629921,"lifted":false},{"pitch":56,"start":15,"end":15.416666666666666,"velocity":0.7480314960629921,"lifted":false},{"pitch":54,"start":15.5,"end":15.916666666666666,"velocity":0.7480314960629921,"lifted":false},{"pitch":59,"start":15.5,"end":15.916666666666666,"velocity":0.7480314960629921,"lifted":false},{"pitch":61,"start":15.5,"end":15.875,"velocity":0.7480314960629921,"lifted":false}]}
"""


def warmup(api):
    with stopwatch("entire request **********"):
        api.generate(
            wavtool2midi(json.loads(WARMUP_INPUT)),
            [
                GenerationRequest(
                    0.4,
                    bias=json2logitbias(
                        {"pitch >= 1000": -1000, "length > 1.0": -1000}
                    ),
                    stop_cond="error || beat >= 10 || (steps >= 8 && (beat >= 12 || maxProbability < 0.2))",
                    min_polyphony=4,
                    max_polyphony=8,
                    dists=False,
                ),
                GenerationRequest(
                    0.6,
                    rest_temperature=0.0,
                    bias=json2logitbias(
                        {"pitch >= 1000": -1000, "length > 1.0": -1000}
                    ),
                    stop_cond="error || beat >= 10 || (steps >= 8 && (beat >= 12 || maxProbability < 0.2))",
                    min_polyphony=4,
                    max_polyphony=8,
                    dists=False,
                ),
                GenerationRequest(
                    0.8,
                    rest_temperature=1.6,
                    note_length_temperature=2.4,
                    bias=json2logitbias(
                        {"pitch >= 1000": -1000, "length > 1.0": -1000}
                    ),
                    stop_cond="error || beat >= 10 || (steps >= 8 && (beat >= 12 || maxProbability < 0.2))",
                    min_polyphony=4,
                    max_polyphony=8,
                    dists=False,
                ),
            ],
            text_prompt="dark sky",
        )
