-
Notifications
You must be signed in to change notification settings - Fork 1
Built in Functions
This lists all the built-in functions available in the Embedded console.
open_beatmap(beatmap_filepath)
- Opens and loads specified beatmap file
load_beatmap(beatmap_data)
- Loads provided beatmap data
open_replay(replay_filepath)
- Opens and loads specified replay file
load_beatmap(replay_data)
- Loads provided replay data
get_beatmap()
- Returns a beatmap object of the currently loaded beatmap
get_replays()
- Returns a list of data for currently loaded replays
add_layer_2d_data(name, data_2d)
- Creates a scatter plot layer named name
over the map view
add_graph_2d_data(name, data_2d, temporal, plot_type)
- Creates a graph for data in the graph tab
timeline
- Access to the timeline gui object
CmdUtils.threaded(func, args)
- Runs function func(args)
in a separate thread which won't block the GUI while it's running
CmdUtils.run_script(filename, globals, locals)
- Runs a python script from a file as if it was executed in the embedded console. Example usage: CmdUtils.run_script('scripts/download_replays.py', globals(), locals())
CmdUtils.print_numbered_list(lst)
- Takes a list of strings and numbers them
CmdUtils.export_csv(name, data)
- Exports 2D numpy data into csv file
CmdOnline.get_latest_beatmapsets(gamemode, status)
- Gets a list of WebBeatmapset objects representing the latest beatmapsets in with the specified MapStatus in GameMode.
def get_beatmap(beatmap_id)
- Downloads a beatmap file. beatmap_id
is the ID of the beatmap difficulty
CmdOnline.get_scores(beatmap_id, mode, name)
- Gets a list of WebScore objects representing the top 50 replays for the specified beatmap id in GameMode. Name is the name of the map and is an optional parameter.
def get_scores_api(beatmap_id, mode, mods, name)
- Gets a JSON containing score data associated with beatmap difficulty. Name is the name of the map and is an optional parameter.
CmdOnline.get_scores_from_beatmap(beatmap)
- Provided a Beatmap object, gets a list of WebScore objects representing the top 50 replays
CmdOsu.open_replay_file(replay_filepath)
- Opens a replay file and returns a Replay object
CmdOsu.save_web_beatmaps(web_beatmaps)
- Given a list of WebBeatmap objects, downloads all the maps into a folder tmp/beatmaps/
CmdOsu.save_web_replays(web_replays)
- Given a list of WebScore objects, downloads all the replays into a folder tmp/replays/
CmdOsu.show_cursor_hit_offset_histogram(score_data, beatmap)
- Given score data and Beatmap object, displays a histogram of distance of hits from center of hitcircles.
CmdOsu.create_score_offset_graph(replay_data)
- Creates a scatter plot of hit offsets from 0ms in the graphs tab
CmdOsu.create_cursor_velocity_graph(replay_data)
- Crates a line graph of cursor velocity over time in the graphs tab
CmdOsu.create_cursor_acceleration_graph(replay_data)
- Crates a line graph of cursor acceleration over time in the graphs tab
CmdOsu.create_cursor_jerk_graph(replay_data)
- Crates a line graph of cursor jerk over time in the graphs tab
StdMapData.get_map_data(std_hitobject)
- Converts beatmap data into raw aimpoint data. Format of the data is the following pandas structure:
time x y type object
hitobject aimpoint
0 0 557.0 300.0 324.0 1.0 1.0
1 558.0 300.0 324.0 3.0 1.0
1 0 693.0 300.0 196.0 1.0 1.0
1 694.0 300.0 196.0 3.0 1.0
2 0 829.0 410.0 260.0 1.0 2.0
... ... ... ... ...
652 1 150952.0 460.0 112.0 3.0 2.0
653 0 151059.0 256.0 216.0 1.0 1.0
1 151060.0 256.0 216.0 3.0 1.0
655 0 153059.0 256.0 192.0 1.0 1.0
1 153060.0 256.0 192.0 3.0 1.0
StdMapData.get_data_before(hitobject_data, time)
-
StdMapData.get_data_after(hitobject_data, time)
-
StdMapData.time_slice(hitobject_data, start_time, end_time)
-
StdMapData.start_times(hitobject_data)
-
StdMapData.end_times(hitobject_data)
-
StdMapData.start_positions(hitobject_data)
-
StdMapData.end_positions(hitobject_data)
-
StdMapData.all_positions(hitobject_data, flat=True)
-
StdMapData.all_times(hitobject_data, flat=True)
-
StdMapData.start_end_times(hitobject_data)
-
StdMapData.get_idx_start_time(hitobject_data, time)
-
StdMapData.get_idx_end_time(hitobject_data, time)
-
StdMapMetrics.calc_tapping_intervals(hitobject_data)
-
StdMapMetrics.calc_notes_per_sec(hitobject_data)
-
StdMapMetrics.calc_distances(hitobject_data)
-
StdMapMetrics.calc_velocity(hitobject_data)
-
StdMapMetrics.calc_velocity_start(hitobject_data)
-
StdMapMetrics.calc_intensity(hitobject_data)
-
StdMapMetrics.calc_angles(hitobject_data)
-
StdMapMetrics.calc_xy_vel(hitobject_data)
-
StdMapMetrics.calc_perp_int(hitobject_data)
-
StdMapMetrics.calc_lin_int(hitobject_data)
-
StdReplayData.get_event_data(replay_events)
- Given replay event data from the Replay object, returns replay data with the following structure:
time x y m1 m2 k1 k2 smoke
0 -1217 120.5313 168.5313 1 0 0 0 0
1 -1213 119.1250 168.5313 2 0 0 0 0
2 -1196 117.2500 169.0000 2 0 0 0 0
3 -1179 116.3125 169.0000 2 0 0 0 0
4 -1178 116.3125 169.0000 2 1 0 1 0
... ... ... .. .. .. .. ...
11434 153438 250.3750 185.4063 0 0 0 0 0
11435 153455 246.6250 185.4063 0 0 0 0 0
11436 153469 243.8125 185.4063 0 0 0 0 0
11437 153488 240.0625 191.5000 0 0 0 0 0
11438 153505 237.2500 193.8438 0 0 0 0 0
StdReplayData.press_start_times(replay_data, key=None)
- Returns:
[ press_start_idxs, press_start_times ] = [ [ int, int, ... ], [ int, int, ... ] ]
Tuple with indices in event_data where a press ends and timings where press ends. press_start_idxs can be used on original event_data to get full data related to start times like so: event_data[press_start_idxs]
StdReplayData.press_end_times(replay_data, key=None)
- Returns:
[ press_end_idxs, press_end_times ] = [ [ int, int, ... ], [ int, int, ... ] ]
Tuple with indices in event_data where a press ends and timings where press ends. press_end_idxs can be used on original event_data to get full data related to end times like so: event_data[press_end_idxs]
StdReplayData.press_start_end_times(replay_data, key=None)
-
[
[ press_start_idx, press_start_time, press_end_idx, press_end_time ],
[ press_start_idx, press_start_time, press_end_idx, press_end_time ],
...
]
StdReplayData.get_idx_time(replay_data, time)
-
StdReplayData.get_idx_press_start_time(replay_data, time, key=None)
-
StdReplayData.get_idx_press_end_time(replay_data, time, key=None)
-
StdReplayMetrics.cursor_velocity(replay_data)
-
StdReplayMetrics.cursor_acceleration(replay_data)
-
StdReplayMetrics.cursor_jerk(replay_data)
-
StdReplayMetrics.cursor_vel_xy(replay_data)
-
StdReplayMetrics.cursor_accel_xy(replay_data)
-
StdReplayMetrics.cursor_jerk_xy(replay_data)
-
StdReplayMetrics.press_intervals(replay_data)
-
StdScoreData.get_score_data(replay_data, map_data)
- pandas object; ex:
replay_t map_t replay_x replay_y map_x map_y type action map_idx
0 568.0 557.0 301.9375 340.0938 300.000000 324.000000 0.0 1.0 0.0
1 677.0 693.0 289.2813 185.4063 300.000000 196.000000 0.0 1.0 1.0
2 806.0 829.0 410.6875 261.3438 410.000000 260.000000 0.0 1.0 2.0
3 919.0 897.0 351.1563 262.7500 413.714286 260.000000 1.0 3.0 2.0
4 949.0 966.0 346.9375 265.5625 336.000000 260.000000 0.0 1.0 3.0
.. ... ... ... ... ... ... ... ... ...
977 150791.0 150737.0 292.5625 155.4063 55.993911 115.684851 1.0 3.0 651.0
978 150844.0 150845.0 371.7813 156.8125 364.000000 164.000000 0.0 1.0 652.0
979 151009.0 150952.0 267.7188 213.5313 460.000000 112.000000 1.0 3.0 652.0
980 151058.0 151059.0 258.8125 221.0313 256.000000 216.000000 0.0 1.0 653.0
981 153089.0 153059.0 277.5625 184.4688 256.000000 192.000000 0.0 1.0 655.0
StdScoreData.tap_offset_mean(score_data)
-
StdScoreData.tap_offset_var(score_data)
-
StdScoreData.tap_offset_stdev(score_data)
-
StdScoreData.cursor_pos_offset_mean(score_data)
-
StdScoreData.cursor_pos_offset_var(score_data)
-
StdScoreData.cursor_pos_offset_stdev(score_data)
-
StdScoreData.odds_some_tap_within(score_data, offset)
- Creates a gaussian distribution model using avg and var of tap offsets and calculates the odds that some hit is within the specified offset
Returns: probability one random value [X] is between -offset <= X <= offset
TL;DR: look at all the hits for scores; What are the odds of you picking a random hit that is between -offset and offset?
StdScoreData.odds_some_cursor_within(score_data, offset)
- Creates a 2D gaussian distribution model using avg and var of cursor 2D position offsets and uses it to calculates the odds that some cursor position is within the specified distance from the center of any hitobject
Returns: probability one random value [X, Y] is between (-offset, -offset) <= (X, Y) <= (offset, offset)
TL;DR: look at all the cursor positions for score; What are the odds of you picking a random hit that has a cursor position between an area of (-offset, -offset) and (offset, offset)?
StdScoreData.odds_all_tap_within(score_data, offset)
- Creates a gaussian distribution model using avg and var of tap offsets and calculates the odds that all hits are within the specified offset
Returns: probability all random values [X] are between -offset <= X <= offset
TL;DR: look at all the hits for scores; What are the odds all of them are between -offset and offset?
StdScoreData.odds_all_cursor_within(score_data, offset)
- Creates a 2D gaussian distribution model using avg and var of cursor 2D position offsets and uses it to calculates the odds that all cursor positions are within the specified distance from the center of all hitobject
Returns: probability all random values {[X, Y], ...} are between (-offset, -offset) <= (X, Y) <= (offset, offset)
TL;DR: look at all the cursor positions for score; What are the odds all of them are between an area of (-offset, -offset) and (offset, offset)?
StdScoreData.odds_all_conditions_within(score_data, tap_offset, cursor_offset)
- Creates gaussian distribution models using tap offsets and cursor offsets for hits. That is used to calculate the odds of the player consistently tapping and aiming within those boundaries for the entire play. Be weary of survivorship bias.
StdScoreMetrics.get_per_hitobject_score_data(score_data_array)
- Takes arrays of score data pertaining to various players and transposes it to be an array of per-hitobject score data from various players
[
[
a0 [ time, (cursor_pos_x, cursor_pos_y), hit_offset, (pos_offset_x, pos_offset_y), hitobject_idx ],
a2 [ time, (cursor_pos_x, cursor_pos_y), hit_offset, (pos_offset_x, pos_offset_y), hitobject_idx ],
aN ... N events
],
[
b0 [ time, (cursor_pos_x, cursor_pos_y), hit_offset, (pos_offset_x, pos_offset_y), hitobject_idx ],
b1 [ time, (cursor_pos_x, cursor_pos_y), hit_offset, (pos_offset_x, pos_offset_y), hitobject_idx ],
bN ... N events
],
...
]
gets turned into
[
[
a0 [ time, (cursor_pos_x, cursor_pos_y), hit_offset, (pos_offset_x, pos_offset_y), hitobject_idx ],
b0 [ time, (cursor_pos_x, cursor_pos_y), hit_offset, (pos_offset_x, pos_offset_y), hitobject_idx ],
N0 ... N events
],
[
a1 [ time, (cursor_pos_x, cursor_pos_y), hit_offset, (pos_offset_x, pos_offset_y), hitobject_idx ],
b1 [ time, (cursor_pos_x, cursor_pos_y), hit_offset, (pos_offset_x, pos_offset_y), hitobject_idx ],
N1 ... N events
],
...
]
StdScoreMetrics.get_percent_below_offset(per_hitobject_score_data, hitobject_idx, offset)
-
StdScoreMetrics.trans_percent_players_taps(per_hitobject_score_data, offset)
- Gives the percent of players tapping within the specified offset for each hitobject
StdScoreMetrics.solve_for_hit_offset(per_hitobject_score_data, hitobject_idx, target_percent)
- Solves for the tapping offset for the note that 50% of players are able to do
StdScoreMetrics.trans_solve_for_hit_offset(per_hitobject_score_data)
- Solves for the tapping offset for the note that 50% of players are able to do
ManiaMapData.get_hitobject_data(hitobjects)
-
ManiaMapData.start_times(hitobject_data, column=None)
-
ManiaMapData.end_times(hitobject_data, column=None)
-
ManiaMapData.all_times(flat=True)
-
ManiaMapData.start_end_times(hitobject_data, column)
-
ManiaMapData.get_idx_start_time(hitobject_data, column, time)
-
ManiaMapData.get_idx_end_time(hitobject_data, column, time)
-
ManiaMapMetrics.calc_tapping_intervals(hitobject_data, column)
-
ManiaMapMetrics.calc_notes_per_sec(hitobject_data, column=None)
-
ManiaReplayData.get_replay_data(replay_events, columns)
-
ManiaReplayData.start_times(event_data, column)
-
ManiaReplayData.end_times(event_data, column)
-
ManiaReplayData.all_times(flat=True)
-
ManiaReplayData.start_end_times(event_data, column)
-
ManiaReplayData.get_idx_start_time(event_data, column, time)
-
ManiaReplayData.get_idx_end_time(event_data, column, time)
-
ManiaScoreData.get_score_data(replay_data, map_data)
-
ManiaScoreData.tap_offset_mean(score_data)
-
ManiaScoreData.tap_offset_var(score_data)
-
ManiaScoreData.tap_offset_stdev(score_data)
-
ManiaScoreData.model_offset_prob(mean, stdev, offset)
-
ManiaScoreData.odds_some_tap_within(score_data, offset)
-
ManiaScoreData.odds_all_tap_within(score_data, offset)
-
ManiaScoreData.odds_all_tap_within_trials(score_data, offset, trials)
-
ManiaScoreData.model_ideal_acc(mean, stdev, num_notes, score_point_judgements=None)
-
ManiaScoreData.model_ideal_acc_data(score_data, score_point_judgements=None)
-
ManiaScoreData.model_num_hits(mean, stdev, num_notes)
-