SYMBOL INDEX (1038 symbols across 101 files) FILE: build.py function build (line 10) | def build(release_dir: Path): function clean_up (line 18) | def clean_up(): function copy_additional_resources (line 25) | def copy_additional_resources(release_dir: Path): function create_batch_for_consoleonly (line 33) | def create_batch_for_consoleonly(release_dir: Path, exe_name: str): function create_batch_for_autoupdater (line 41) | def create_batch_for_autoupdater(release_dir: Path, exe_name: str): FILE: src/autoupdater.py class D4LFUpdater (line 17) | class D4LFUpdater: method __init__ (line 18) | def __init__(self): method normalize_version (line 28) | def normalize_version(version): method get_latest_release (line 34) | def get_latest_release(self, silent=False): method print_changes_between_releases (line 46) | def print_changes_between_releases(self, current_version, latest_versi... method download_file (line 59) | def download_file(url, filename): method extract_release (line 84) | def extract_release(self, zip_path, latest_version): method _get_major_version_number (line 105) | def _get_major_version_number(version: str) -> int: method preprocess (line 108) | def preprocess(self): method postprocess (line 184) | def postprocess(self): method _print_header (line 219) | def _print_header(): function start_auto_update (line 226) | def start_auto_update(postprocess=False): function notify_if_update (line 241) | def notify_if_update(): function _should_check_for_update (line 264) | def _should_check_for_update(check_interval_hours=4): FILE: src/cam.py class Cam (line 18) | class Cam: method __new__ (line 30) | def __new__(cls): method update_window_pos (line 35) | def update_window_pos(self, offset_x: int, offset_y: int, width: int, ... method is_offset_set (line 59) | def is_offset_set(self): method grab (line 62) | def grab(self, force_new: bool = False) -> np.ndarray: method monitor_to_window (line 88) | def monitor_to_window(self, monitor_coord: np.ndarray) -> np.ndarray: method window_to_monitor (line 92) | def window_to_monitor(self, window_coord: np.ndarray) -> np.ndarray: method abs_window_to_window (line 97) | def abs_window_to_window(self, abs_window_coord: np.ndarray) -> np.nda... method window_to_abs_window (line 101) | def window_to_abs_window(self, window_coord: np.ndarray) -> np.ndarray: method abs_window_to_monitor (line 105) | def abs_window_to_monitor(self, abs_window_coord: np.ndarray) -> np.nd... FILE: src/config/__init__.py function get_base_dir (line 5) | def get_base_dir(bundled: bool = False) -> Path: FILE: src/config/data.py class Template (line 71) | class Template: function load_templates (line 80) | def load_templates() -> dict[str, Template]: FILE: src/config/helper.py function check_greater_than_zero (line 8) | def check_greater_than_zero(v: int) -> int: function validate_percent (line 15) | def validate_percent(v: int) -> int: function validate_hotkey (line 23) | def validate_hotkey(k: str) -> str: function singleton (line 28) | def singleton(cls): function str_to_int_list (line 41) | def str_to_int_list(s: str) -> list[int]: FILE: src/config/loader.py class IniConfigLoader (line 23) | class IniConfigLoader: method __init__ (line 26) | def __init__(self) -> None: method _config_path (line 42) | def _config_path(self) -> Path: method _get_config_signature (line 45) | def _get_config_signature(self) -> tuple[int, int] | None: method _section_models (line 53) | def _section_models(self) -> dict[str, Any]: method _model_for_section (line 56) | def _model_for_section(self, section: str) -> Any | None: method _capture_state_snapshot (line 59) | def _capture_state_snapshot(self) -> dict[str, Any]: method _changed_keys (line 66) | def _changed_keys(self, previous_snapshot: dict[str, Any], current_sna... method _write_parser (line 73) | def _write_parser(self) -> None: method _remove_defunct_model_keys (line 81) | def _remove_defunct_model_keys(self) -> bool: method _log_defunct_model_key (line 102) | def _log_defunct_model_key(self, section: str, key: str) -> None: method consume_deferred_cleanup_log_records (line 118) | def consume_deferred_cleanup_log_records(self) -> list[logging.LogReco... method _format_value_for_log (line 125) | def _format_value_for_log(self, value: Any) -> str: method _log_changed_values (line 130) | def _log_changed_values(self, changed_keys: set[str]) -> None: method _notify_listeners (line 142) | def _notify_listeners(self, changed_keys: set[str]) -> None: method register_change_listener (line 154) | def register_change_listener(self, listener: ConfigChangeListener) -> ... method unregister_change_listener (line 159) | def unregister_change_listener(self, listener: ConfigChangeListener) -... method register_listener (line 163) | def register_listener(self, listener: ConfigChangeListener) -> None: method unregister_listener (line 167) | def unregister_listener(self, listener: ConfigChangeListener) -> None: method load (line 171) | def load(self, clear: bool = False, notify: bool = True) -> None: method reload_if_changed (line 209) | def reload_if_changed(self) -> bool: method advanced_options (line 220) | def advanced_options(self) -> AdvancedOptionsModel: method char (line 225) | def char(self) -> CharModel: method general (line 230) | def general(self) -> GeneralModel: method user_dir (line 235) | def user_dir(self) -> Path: method config_revision (line 239) | def config_revision(self) -> int: method save_value (line 243) | def save_value(self, section: str, key: str, value: Any) -> None: FILE: src/config/profile_models.py function _parse_item_type_or_rarities (line 16) | def _parse_item_type_or_rarities(data: str | list[str]) -> list[str]: class AffixAspectFilterModel (line 22) | class AffixAspectFilterModel(BaseModel): method parse_data (line 29) | def parse_data(cls, data: str | list[str] | list[str | float] | dict[s... class AffixFilterModel (line 48) | class AffixFilterModel(AffixAspectFilterModel): method name_must_exist (line 54) | def name_must_exist(cls, name: str) -> str: method percent_validator (line 65) | def percent_validator(cls, v: int) -> int: method value_and_percent_are_mutually_exclusive (line 69) | def value_and_percent_are_mutually_exclusive(self) -> AffixFilterModel: class AffixFilterCountModel (line 76) | class AffixFilterCountModel(BaseModel): method count_validator (line 84) | def count_validator(cls, v: int) -> int: method model_validator (line 88) | def model_validator(self) -> AffixFilterCountModel: class AspectUniqueFilterModel (line 105) | class AspectUniqueFilterModel(AffixAspectFilterModel): method name_must_exist (line 110) | def name_must_exist(cls, name: str) -> str: method percent_validator (line 124) | def percent_validator(cls, v: int) -> int: method value_and_percent_are_mutually_exclusive (line 128) | def value_and_percent_are_mutually_exclusive(self) -> AspectUniqueFilt... class GlobalUniqueModel (line 135) | class GlobalUniqueModel(BaseModel): method check_min_power (line 144) | def check_min_power(cls, v: int) -> int: method count_validator (line 149) | def count_validator(cls, v: int) -> int: method percent_validator (line 157) | def percent_validator(cls, v: int) -> int: class ItemFilterModel (line 161) | class ItemFilterModel(BaseModel): method check_min_power (line 172) | def check_min_power(cls, v: int) -> int: method min_greater_affix_in_range (line 177) | def min_greater_affix_in_range(cls, v: int) -> int: method parse_item_type (line 185) | def parse_item_type(cls, data: str | list[str]) -> list[str]: class SigilPriority (line 192) | class SigilPriority(enum.StrEnum): class SigilConditionModel (line 197) | class SigilConditionModel(BaseModel): method parse_data (line 204) | def parse_data(cls, data: str | list[str] | list[str | float] | dict[s... method name_must_exist (line 224) | def name_must_exist(cls, names_in: str | list[str]) -> str | list[str]: class SigilFilterModel (line 236) | class SigilFilterModel(BaseModel): method data_integrity (line 243) | def data_integrity(self) -> SigilFilterModel: class TributeFilterModel (line 251) | class TributeFilterModel(BaseModel): method name_must_exist (line 258) | def name_must_exist(cls, name: str) -> str: method parse_data (line 279) | def parse_data(cls, data: str | list[str] | dict[str, str | list[str]]... method parse_rarities (line 296) | def parse_rarities(cls, data: str | list[str]) -> list[str]: class ProfileModel (line 300) | class ProfileModel(BaseModel): method aspects_must_exist (line 311) | def aspects_must_exist(self) -> ProfileModel: FILE: src/config/settings_models.py class AspectFilterType (line 20) | class AspectFilterType(enum.StrEnum): class BrowserType (line 26) | class BrowserType(enum.StrEnum): class CosmeticFilterType (line 32) | class CosmeticFilterType(enum.StrEnum): class ItemRefreshType (line 37) | class ItemRefreshType(enum.StrEnum): class LogLevels (line 43) | class LogLevels(enum.StrEnum): class MoveItemsType (line 51) | class MoveItemsType(enum.StrEnum): class JunkRaresType (line 58) | class JunkRaresType(enum.StrEnum): class ThemeType (line 64) | class ThemeType(enum.StrEnum): class UnfilteredUniquesType (line 69) | class UnfilteredUniquesType(enum.StrEnum): class VisionModeType (line 75) | class VisionModeType(enum.StrEnum): class _IniBaseModel (line 80) | class _IniBaseModel(BaseModel): class AdvancedOptionsModel (line 84) | class AdvancedOptionsModel(_IniBaseModel): method key_must_be_unique (line 146) | def key_must_be_unique(self) -> AdvancedOptionsModel: method key_must_exist (line 175) | def key_must_exist(cls, k: str) -> str: method convert_fast_vision_mode_coordinates (line 180) | def convert_fast_vision_mode_coordinates(cls, v: str) -> tuple[int, in... class CharModel (line 200) | class CharModel(_IniBaseModel): method key_must_exist (line 207) | def key_must_exist(cls, k: str) -> str: class ColorsModel (line 211) | class ColorsModel(_IniBaseModel): class GeneralModel (line 217) | class GeneralModel(_IniBaseModel): method check_chest_tabs_index (line 288) | def check_chest_tabs_index(cls, v: str) -> list[int]: method check_max_stash_tabs (line 298) | def check_max_stash_tabs(cls, v: int) -> int: method check_profiles_is_list (line 306) | def check_profiles_is_list(cls, v: str) -> list[str]: method language_must_exist (line 316) | def language_must_exist(cls, v: str) -> str: method font_size_in_range (line 324) | def font_size_in_range(cls, v: int) -> int: method convert_move_item_type (line 332) | def convert_move_item_type(cls, v: str) -> list[type[MoveItemsType[Any... class HSVRangeModel (line 341) | class HSVRangeModel(_IniBaseModel): method __getitem__ (line 345) | def __getitem__(self, index): method check_interval_sanity (line 355) | def check_interval_sanity(self) -> HSVRangeModel: method values_in_range (line 369) | def values_in_range(cls, v: np.ndarray) -> np.ndarray: class UiOffsetsModel (line 382) | class UiOffsetsModel(_IniBaseModel): class UiPosModel (line 392) | class UiPosModel(_IniBaseModel): class UiRoiModel (line 397) | class UiRoiModel(NumpyModel): FILE: src/config/ui.py class _ResTransformer (line 13) | class _ResTransformer: method __init__ (line 14) | def __init__(self, resolution: str): method _resize_image (line 20) | def _resize_image(self, src: np.ndarray) -> np.ndarray: method _transform (line 24) | def _transform(self, value: int) -> int: method _transform_array (line 27) | def _transform_array(self, value: np.ndarray, scale_only=False) -> np.... method _transform_list_of_tuples (line 47) | def _transform_list_of_tuples(self, value: list[tuple[int, int]]) -> l... method _transform_templates (line 50) | def _transform_templates(self, templates: dict[str, Template]) -> dict... method _transform_tuples (line 65) | def _transform_tuples(self, value: tuple[int, int]) -> tuple[int, int]: method fromUHD (line 69) | def fromUHD(self) -> tuple[UiOffsetsModel, UiPosModel, UiRoiModel, dic... class ResManager (line 100) | class ResManager: method __init__ (line 101) | def __init__(self): method offsets (line 109) | def offsets(self) -> UiOffsetsModel: method pos (line 113) | def pos(self) -> UiPosModel: method resolution (line 117) | def resolution(self) -> tuple[int, ...]: method roi (line 121) | def roi(self) -> UiRoiModel: method templates (line 125) | def templates(self) -> dict[str, Template]: method set_resolution (line 128) | def set_resolution(self, res: str): FILE: src/dataloader.py class Dataloader (line 15) | class Dataloader: method __new__ (line 32) | def __new__(cls): method load_data (line 41) | def load_data(self): FILE: src/gui/activity_log_widget.py class ActivityLogWidget (line 8) | class ActivityLogWidget(QWidget): method __init__ (line 9) | def __init__(self, parent=None): method _open_user_dir (line 96) | def _open_user_dir(self) -> None: FILE: src/gui/collapsible_widget.py class Header (line 6) | class Header(QWidget): method __init__ (line 9) | def __init__(self, name, content_widget): method mousePressEvent (line 58) | def mousePressEvent(self, *args): method expand (line 63) | def expand(self): method collapse (line 71) | def collapse(self): method set_name (line 76) | def set_name(self, name): class Container (line 81) | class Container(QWidget): method __init__ (line 84) | def __init__(self, name, color_background=False): method contentWidget (line 119) | def contentWidget(self): method first_expansion (line 126) | def first_expansion(self): FILE: src/gui/config_tab.py function _validate_and_save_changes (line 40) | def _validate_and_save_changes( class ConfigTab (line 77) | class ConfigTab(QWidget): method __init__ (line 78) | def __init__(self, theme_changed_callback=None): method _finish_init (line 120) | def _finish_init(self): method _prompt_restart_for_vision_mode_change (line 123) | def _prompt_restart_for_vision_mode_change(self) -> None: method _restart_application (line 135) | def _restart_application(self) -> None: method _generate_params_section (line 156) | def _generate_params_section(self, model: BaseModel, section_readable_... method _generate_parameter_value_widget (line 185) | def _generate_parameter_value_widget( method show_tab (line 260) | def show_tab(self): method reset_button_click (line 265) | def reset_button_click(self): method _reset_values_for_model (line 281) | def _reset_values_for_model(self, model, section_config_header): method _setup_reset_button (line 300) | def _setup_reset_button(self) -> QPushButton: class IgnoreScrollWheelComboBox (line 306) | class IgnoreScrollWheelComboBox(QComboBox): method __init__ (line 307) | def __init__(self): method wheelEvent (line 311) | def wheelEvent(self, event): method reset_values (line 317) | def reset_values(self, value): class QChestTabWidget (line 323) | class QChestTabWidget(QWidget): method __init__ (line 324) | def __init__(self, model, section_header, config_key, chest_tab_config... method reset_values (line 342) | def reset_values(self, chest_tab_config: list[int]): method _save_changes_on_box_change (line 346) | def _save_changes_on_box_change(self, model, section_header, config_key): class QMoveItemsWidget (line 351) | class QMoveItemsWidget(QWidget): method __init__ (line 352) | def __init__(self, model, section_header, config_key, move_selections:... method reset_values (line 375) | def reset_values(self, move_selections: list[MoveItemsType]): method _launch_picker (line 378) | def _launch_picker(self, model, section_header, config_key, move_selec... class QMoveItemsPicker (line 389) | class QMoveItemsPicker(QDialog): method __init__ (line 390) | def __init__(self, parent, move_selections): method get_selected_move_types (line 423) | def get_selected_move_types(self) -> list[MoveItemsType]: class QProfilesWidget (line 439) | class QProfilesWidget(QWidget): method __init__ (line 440) | def __init__(self, model, section_header, config_key, current_profiles): method reset_values (line 463) | def reset_values(self, current_profiles): method _launch_picker (line 466) | def _launch_picker(self, model, section_header, config_key, current_pr... class QProfilePicker (line 476) | class QProfilePicker(QDialog): method __init__ (line 477) | def __init__(self, parent, current_profiles): method move_items (line 550) | def move_items(self, source_list, destination_list): method get_selected_profiles (line 555) | def get_selected_profiles(self): class QHotkeyWidget (line 561) | class QHotkeyWidget(QWidget): method __init__ (line 562) | def __init__(self, model, section_header, config_key, current_value): method reset_values (line 576) | def reset_values(self, current_value): method _launch_hotkey_dialog (line 579) | def _launch_hotkey_dialog(self, model, section_header, config_key): class HotkeyListenerDialog (line 587) | class HotkeyListenerDialog(QDialog): method __init__ (line 588) | def __init__(self, parent=None, hotkey=""): method keyPressEvent (line 616) | def keyPressEvent(self, event): method get_hotkey (line 644) | def get_hotkey(self): FILE: src/gui/config_window.py class ConfigWindow (line 17) | class ConfigWindow(QMainWindow): method __init__ (line 20) | def __init__(self, parent=None, theme_changed_callback=None): method _on_theme_changed (line 42) | def _on_theme_changed(self): method _rebuild_tab (line 49) | def _rebuild_tab(self): method closeEvent (line 55) | def closeEvent(self, event): FILE: src/gui/d4lfitem.py class D4LFItem (line 20) | class D4LFItem(QGroupBox): method __init__ (line 21) | def __init__(self, item: DynamicItemFilterModel, affixesNames, allItem... method load_item (line 82) | def load_item(self): method create_affix_combobox (line 97) | def create_affix_combobox(self, affix_name): method create_alert (line 124) | def create_alert(self, msg: str): method create_form_layout (line 128) | def create_form_layout(self, minCount, minGreaterAffixCount): method set_minPower (line 146) | def set_minPower(self, minPower): method set_minGreaterAffix (line 149) | def set_minGreaterAffix(self, minGreaterAffix): method set_minCount (line 155) | def set_minCount(self, minCount): method find_affix_from_value (line 161) | def find_affix_from_value(self, target_value): method find_item_from_value (line 167) | def find_item_from_value(self, target_value): method save_item (line 173) | def save_item(self): method save_item_create (line 198) | def save_item_create(self): method item_changed (line 237) | def item_changed(self): method has_changes (line 240) | def has_changes(self): FILE: src/gui/dialog.py class IgnoreScrollWheelSpinBox (line 35) | class IgnoreScrollWheelSpinBox(QSpinBox): method __init__ (line 36) | def __init__(self): method wheelEvent (line 40) | def wheelEvent(self, event): class MinPowerDialog (line 47) | class MinPowerDialog(QDialog): method __init__ (line 48) | def __init__(self, parent=None): method get_value (line 73) | def get_value(self): class MinGreaterDialog (line 77) | class MinGreaterDialog(QDialog): method __init__ (line 78) | def __init__(self, parent=None): method get_value (line 103) | def get_value(self): class MinPercentDialog (line 107) | class MinPercentDialog(QDialog): method __init__ (line 108) | def __init__(self, parent=None): method get_value (line 133) | def get_value(self): class CreateItem (line 137) | class CreateItem(QDialog): method __init__ (line 138) | def __init__(self, item_list: list[str], parent=None): method accept (line 164) | def accept(self): method get_value (line 173) | def get_value(self): class DeleteItem (line 186) | class DeleteItem(QDialog): method __init__ (line 187) | def __init__(self, item_names, parent=None): method get_value (line 227) | def get_value(self): class DeleteAffixPool (line 231) | class DeleteAffixPool(QDialog): method __init__ (line 232) | def __init__(self, nb_affix_pool, inherent: bool = False, parent=None): method get_value (line 276) | def get_value(self): class CreateSigil (line 280) | class CreateSigil(QDialog): method __init__ (line 281) | def __init__(self, whitelist_sigils: list[str], blacklist_sigils: list... method accept (line 321) | def accept(self): method get_value (line 330) | def get_value(self): class RemoveSigil (line 336) | class RemoveSigil(QDialog): method __init__ (line 337) | def __init__(self, sigils: list[str], blacklist: bool = False, parent=... method get_value (line 383) | def get_value(self): class CreateTribute (line 387) | class CreateTribute(QDialog): method __init__ (line 388) | def __init__(self, tributes: list[str], parent=None): method accept (line 420) | def accept(self): method get_value (line 431) | def get_value(self): class AddTributeRarity (line 437) | class AddTributeRarity(QDialog): method __init__ (line 438) | def __init__(self, rarities: list[ItemRarity], parent=None): method accept (line 470) | def accept(self): method get_value (line 483) | def get_value(self): class RemoveTribute (line 488) | class RemoveTribute(QDialog): method __init__ (line 489) | def __init__(self, tributes: list[str], parent=None): method get_value (line 531) | def get_value(self): class AddAspectUpgrade (line 536) | class AddAspectUpgrade(QDialog): method __init__ (line 537) | def __init__(self, aspect_upgrades: list[str], parent=None): method get_value (line 572) | def get_value(self): class CreateUnique (line 576) | class CreateUnique(QDialog): method __init__ (line 577) | def __init__(self, parent=None): method get_value (line 616) | def get_value(self): FILE: src/gui/importer/d4builds.py class D4BuildsException (line 71) | class D4BuildsException(Exception): function import_d4builds (line 76) | def import_d4builds(config: ImportConfig, driver: ChromiumDriver = None): function _corrections (line 225) | def _corrections(input_str: str) -> str: function _extract_build_metadata (line 237) | def _extract_build_metadata(data: lxml.html.HtmlElement) -> tuple[str, s... function _extract_variant_name (line 251) | def _extract_variant_name(data: lxml.html.HtmlElement) -> str: function _extract_d4builds_season_number (line 259) | def _extract_d4builds_season_number(data: lxml.html.HtmlElement) -> str: function _get_item_slots (line 268) | def _get_item_slots(data: lxml.html.HtmlElement) -> dict[str, tuple[str,... function _get_legendary_aspects (line 291) | def _get_legendary_aspects(data: lxml.html.HtmlElement) -> list[str]: function _get_affix_name (line 311) | def _get_affix_name(stat: lxml.html.HtmlElement) -> str: FILE: src/gui/importer/diablo_trade.py class _AnnotatedFilter (line 31) | class _AnnotatedFilter: class _Listing (line 38) | class _Listing: class DiabloTradeException (line 48) | class DiabloTradeException(Exception): function import_diablo_trade (line 53) | def import_diablo_trade(url: str, max_listings: int, driver: seleniumbas... function _construct_api_url (line 126) | def _construct_api_url(listing_url: str, cursor: int = 1) -> str: function _create_affixes_from_api_dict (line 141) | def _create_affixes_from_api_dict(affixes: list[dict[str, Any]]) -> list... function _create_filters_from_items (line 156) | def _create_filters_from_items(items: list[_Listing]) -> list[dict[str, ... FILE: src/gui/importer/gui_common.py function extract_digits (line 44) | def extract_digits(text: str) -> int: function fix_weapon_type (line 48) | def fix_weapon_type(input_str: str) -> ItemType | None: function fix_offhand_type (line 87) | def fix_offhand_type(input_str: str, class_str: str) -> ItemType | None: function format_number_as_short_string (line 104) | def format_number_as_short_string(n: int) -> str: function get_class_name (line 109) | def get_class_name(input_str: str) -> str: function normalize_profile_file_name (line 119) | def normalize_profile_file_name(file_name: str) -> str: function build_default_profile_file_name (line 125) | def build_default_profile_file_name( function _clean_build_header (line 144) | def _clean_build_header(source_name: str, build_header: str, season_numb... function _normalize_profile_name_part (line 165) | def _normalize_profile_name_part(name_part: str) -> str: function update_mingreateraffixcount (line 169) | def update_mingreateraffixcount(item_filter: ItemFilterModel, require_ga... function sort_profile_filters (line 179) | def sort_profile_filters(filters: list[dict[str, ItemFilterModel]]) -> l... function _profile_filter_sort_key (line 183) | def _profile_filter_sort_key(filter_entry: dict[str, ItemFilterModel]) -... function get_with_retry (line 188) | def get_with_retry(url: str, custom_headers: dict[str, str] | None = Non... function handle_popups (line 203) | def handle_popups[D: WebDriver | WebElement, T]( function match_to_enum (line 217) | def match_to_enum(enum_class, target_string: str, check_keys: bool = Fal... function retry_importer (line 227) | def retry_importer(func=None, inject_webdriver: bool = False, uc=False): function save_as_profile (line 249) | def save_as_profile(file_name: str, profile: ProfileModel, url: str, exc... function add_to_profiles (line 269) | def add_to_profiles(build_name): function _to_yaml_str (line 280) | def _to_yaml_str(profile: ProfileModel, exclude_defaults: bool, exclude:... function _sort_profile_sections (line 294) | def _sort_profile_sections(d): function _use_block_style (line 299) | def _use_block_style(d): function _rm_style_info (line 304) | def _rm_style_info(d): function setup_webdriver (line 316) | def setup_webdriver(uc: bool = False) -> ChromiumDriver: FILE: src/gui/importer/importer_config.py class ImportConfig (line 5) | class ImportConfig: FILE: src/gui/importer/maxroll.py class MaxrollException (line 50) | class MaxrollException(Exception): function import_maxroll (line 55) | def import_maxroll(config: ImportConfig): function _attribute_description_corrections (line 198) | def _attribute_description_corrections(input_str: str) -> str: function _find_item_rarity (line 207) | def _find_item_rarity(resolved_item_id, mapping_data) -> ItemRarity: function _find_item_affixes (line 221) | def _find_item_affixes( function _find_skill_rank_affix_description (line 299) | def _find_skill_rank_affix_description(mapping_data: dict, affix_key: st... function _find_skill_rank_label_from_descriptions (line 310) | def _find_skill_rank_label_from_descriptions(mapping_data: dict, param: ... function _find_skill_rank_label_from_affix_key (line 325) | def _find_skill_rank_label_from_affix_key(affix_key: str) -> str: function _find_legendary_aspect (line 336) | def _find_legendary_aspect(mapping_data: dict, legendary_aspect: dict) -... function _attr_desc_special_handling (line 356) | def _attr_desc_special_handling(affix_id: str) -> str: function _unique_name_special_handling (line 382) | def _unique_name_special_handling(unique_name: str) -> str: function _find_item_type (line 392) | def _find_item_type(mapping_data: dict, value: str, class_name: str = ""... function _normalize_item_type_str_for_import_helpers (line 410) | def _normalize_item_type_str_for_import_helpers(item_type_str: str) -> str: function _extract_planner_url_and_id_from_planner (line 418) | def _extract_planner_url_and_id_from_planner(url: str) -> tuple[str, int... function _extract_planner_url_and_id_from_guide (line 440) | def _extract_planner_url_and_id_from_guide(url: str) -> tuple[str, int, ... function _resolve_visible_profile_index (line 462) | def _resolve_visible_profile_index(profiles: list[dict], visible_profile... function _extract_guide_profile_id (line 473) | def _extract_guide_profile_id(embed: lxml.html.HtmlElement) -> int | None: function _extract_active_guide_embed_tab_index (line 486) | def _extract_active_guide_embed_tab_index(embed: lxml.html.HtmlElement) ... FILE: src/gui/importer/mobalytics.py class MobalyticsException (line 45) | class MobalyticsException(Exception): function import_mobalytics (line 50) | def import_mobalytics(config: ImportConfig): function _corrections (line 235) | def _corrections(input_str: str) -> str: function _fix_input_url (line 242) | def _fix_input_url(url: str) -> str: function _extract_mobalytics_season_number (line 246) | def _extract_mobalytics_season_number(full_script_data_json: dict) -> str: function _get_legendary_aspect (line 257) | def _get_legendary_aspect(name: str) -> str: function _convert_raw_to_affixes (line 270) | def _convert_raw_to_affixes(raw_stats: list[dict], import_greater_affixe... FILE: src/gui/importer/paragon_export.py function _class_slug_from_name (line 30) | def _class_slug_from_name(class_name: str) -> str: function _prefix_with_class_slug (line 39) | def _prefix_with_class_slug(slug: str, class_slug: str) -> str: function _slugify (line 282) | def _slugify(s: str) -> str: function _maxroll_class_slug (line 289) | def _maxroll_class_slug(board_id: str) -> str: function _maxroll_board_slug (line 295) | def _maxroll_board_slug(board_id: str) -> str: function _maxroll_glyph_slug (line 302) | def _maxroll_glyph_slug(glyph_id: str, board_id: str) -> str: function build_paragon_profile_payload (line 316) | def build_paragon_profile_payload( function extract_maxroll_paragon_steps (line 338) | def extract_maxroll_paragon_steps(active_profile: dict[str, Any]) -> lis... function _fix_mobalytics_starting_board_slug (line 389) | def _fix_mobalytics_starting_board_slug(board_slug: str) -> str: function extract_mobalytics_paragon_steps (line 396) | def extract_mobalytics_paragon_steps(paragon_data: dict[str, Any]) -> li... function _parse_d4builds_paragon_boards (line 455) | def _parse_d4builds_paragon_boards(driver: WebDriver, class_slug: str) -... function extract_d4builds_paragon_steps (line 577) | def extract_d4builds_paragon_steps( function _rotation_info_maxroll (line 636) | def _rotation_info_maxroll(rot: int) -> str: function _rotation_info_degrees (line 640) | def _rotation_info_degrees(rot: int) -> str: function _transform_maxroll_location (line 645) | def _transform_maxroll_location(loc: int, rotation: int) -> int: function _transform_xy_common (line 678) | def _transform_xy_common(x: int, y: int, rotation_deg: int, base: str) -... FILE: src/gui/importer_window.py class ImporterWindow (line 35) | class ImporterWindow(QMainWindow): method __init__ (line 38) | def __init__(self, parent=None): method _generate_checkbox (line 198) | def _generate_checkbox(self, name, settings_value, desc, default_value... method _handle_text_changed (line 208) | def _handle_text_changed(self, text): method _generate_button_click (line 212) | def _generate_button_click(self): method _on_worker_finished (line 243) | def _on_worker_finished(self): method closeEvent (line 249) | def closeEvent(self, event): class _GuiLogHandler (line 265) | class _GuiLogHandler(logging.Handler): method __init__ (line 268) | def __init__(self, text_widget: QTextEdit): method emit (line 277) | def emit(self, record): method _append_log (line 285) | def _append_log(self, message): class _LogSignals (line 291) | class _LogSignals(QObject): class _Worker (line 297) | class _Worker(QRunnable): method __init__ (line 298) | def __init__(self, name, fn, *args, **kwargs): method run (line 307) | def run(self): class _WorkerSignals (line 313) | class _WorkerSignals(QObject): FILE: src/gui/open_user_config_button.py class OpenUserConfigButton (line 8) | class OpenUserConfigButton(QPushButton): method __init__ (line 9) | def __init__(self): method _open_userconfig_directory (line 14) | def _open_userconfig_directory(): FILE: src/gui/profile_editor/affixes_tab.py function _item_type_summary (line 58) | def _item_type_summary(item_types: list[ItemType]) -> str: class ItemTypePicker (line 64) | class ItemTypePicker(QDialog): method __init__ (line 65) | def __init__(self, parent: QWidget, item_types: list[ItemType], select... method _create_item_type_group (line 97) | def _create_item_type_group( method clear_selection (line 119) | def clear_selection(self): method get_selected_item_types (line 123) | def get_selected_item_types(self) -> list[ItemType]: class AffixGroupEditor (line 127) | class AffixGroupEditor(QWidget): method __init__ (line 128) | def __init__(self, dynamic_filter: DynamicItemFilterModel, parent=None): method setup_ui (line 138) | def setup_ui(self): method create_unique_aspect_groupbox (line 253) | def create_unique_aspect_groupbox(self): method _refresh_widget_style (line 296) | def _refresh_widget_style(self, widget): method set_unique_aspect_controls_enabled (line 300) | def set_unique_aspect_controls_enabled(self): method update_unique_aspect_name (line 306) | def update_unique_aspect_name(self, current_text=None): method refresh_unique_aspect_value_input (line 323) | def refresh_unique_aspect_value_input(self): method update_unique_aspect_mode (line 345) | def update_unique_aspect_mode(self, current_text=None): method update_unique_aspect_value (line 357) | def update_unique_aspect_value(self, value): method init_affix_pool (line 379) | def init_affix_pool(self): method init_inherent_pool (line 385) | def init_inherent_pool(self): method add_affix_pool_item (line 391) | def add_affix_pool_item(self, pool: AffixFilterCountModel, inherent: b... method add_affix_pool (line 409) | def add_affix_pool(self): method add_inherent_pool (line 419) | def add_inherent_pool(self): method remove_selected (line 429) | def remove_selected(self, layout_widget: QVBoxLayout, inherent: bool =... method reorganize_pool (line 448) | def reorganize_pool(self, layout_widget: QVBoxLayout): method refresh_item_type_summary (line 454) | def refresh_item_type_summary(self): method edit_item_types (line 457) | def edit_item_types(self): method update_min_power (line 463) | def update_min_power(self): method update_min_greater_affix (line 466) | def update_min_greater_affix(self): method toggle_auto_sync (line 469) | def toggle_auto_sync(self): method _update_auto_sync_count (line 492) | def _update_auto_sync_count(self): method sync_min_greater_from_checkboxes (line 497) | def sync_min_greater_from_checkboxes(self): method _ensure_pool_widgets_initialized (line 502) | def _ensure_pool_widgets_initialized(self): method iter_affix_widgets (line 510) | def iter_affix_widgets(self): method count_want_greater_affixes (line 530) | def count_want_greater_affixes(self): method update_greater_count_label (line 542) | def update_greater_count_label(self): method convert_all_to_min_percent_of_affix (line 551) | def convert_all_to_min_percent_of_affix(self, percent: int): class AffixPoolWidget (line 556) | class AffixPoolWidget(QWidget): method __init__ (line 557) | def __init__(self, pool: AffixFilterCountModel, parent=None): method setup_ui (line 562) | def setup_ui(self): method _refresh_widget_style (line 645) | def _refresh_widget_style(self, widget): method add_affix_item (line 649) | def add_affix_item(self, affix: AffixFilterModel): method add_affix (line 656) | def add_affix(self): method remove_selected (line 661) | def remove_selected(self, list_widget: QListWidget): method update_min_count (line 667) | def update_min_count(self): method update_max_count (line 670) | def update_max_count(self): class AffixWidget (line 674) | class AffixWidget(QWidget): method __init__ (line 675) | def __init__(self, affix: AffixFilterModel, parent=None): method setup_ui (line 680) | def setup_ui(self): method create_affix_name_combobox (line 699) | def create_affix_name_combobox(self): method create_greater_checkbox (line 712) | def create_greater_checkbox(self): method _refresh_widget_style (line 721) | def _refresh_widget_style(self, widget): method update_parent_count_label (line 725) | def update_parent_count_label(self): method create_mode_combobox (line 734) | def create_mode_combobox(self): method create_value_input (line 743) | def create_value_input(self): method update_name (line 748) | def update_name(self, current_text=None): method refresh_value_input (line 756) | def refresh_value_input(self): method update_mode (line 770) | def update_mode(self, current_text=None): method update_value (line 778) | def update_value(self, value): method update_greater (line 798) | def update_greater(self): method set_min_percent (line 801) | def set_min_percent(self, percent: int, convert_mode: bool = False): class AffixesTab (line 809) | class AffixesTab(QWidget): method __init__ (line 810) | def __init__(self, affixes_model: list[DynamicItemFilterModel], parent... method load (line 815) | def load(self): method setup_ui (line 820) | def setup_ui(self): method show_message (line 870) | def show_message(self, text): method add_item_type (line 873) | def add_item_type(self): method close_tab (line 884) | def close_tab(self, index): method remove_item_type (line 889) | def remove_item_type(self): method set_all_minGreaterAffix (line 900) | def set_all_minGreaterAffix(self): method convert_all_to_min_percent_of_affix (line 911) | def convert_all_to_min_percent_of_affix(self): method set_all_minPower (line 918) | def set_all_minPower(self): FILE: src/gui/profile_editor/aspect_upgrades_tab.py class AspectUpgradesTab (line 9) | class AspectUpgradesTab(QWidget): method __init__ (line 10) | def __init__(self, aspect_upgrades: list[str], parent=None): method load (line 16) | def load(self): method setup_ui (line 21) | def setup_ui(self): method create_button_layout (line 36) | def create_button_layout(self) -> QHBoxLayout: method add_aspect (line 49) | def add_aspect(self): method remove_aspect (line 56) | def remove_aspect(self): FILE: src/gui/profile_editor/global_uniques_tab.py class UniqueWidget (line 24) | class UniqueWidget(QWidget): method __init__ (line 25) | def __init__(self, unique_model: GlobalUniqueModel, parent=None): method setup_ui (line 31) | def setup_ui(self): method create_general_groupbox (line 48) | def create_general_groupbox(self): method update_profile_alias (line 83) | def update_profile_alias(self, value: str): method update_min_power (line 86) | def update_min_power(self): method update_min_greater_affix (line 89) | def update_min_greater_affix(self): method update_min_percent (line 92) | def update_min_percent(self): class UniquesTab (line 96) | class UniquesTab(QWidget): method __init__ (line 97) | def __init__(self, unique_model_list: list[GlobalUniqueModel], parent=... method load (line 102) | def load(self): method setup_ui (line 107) | def setup_ui(self): method close_tab (line 136) | def close_tab(self, index): method remove_item_type (line 141) | def remove_item_type(self): method rename_tabs (line 155) | def rename_tabs(self): method add_item_type (line 159) | def add_item_type(self): FILE: src/gui/profile_editor/profile_editor.py class ProfileEditor (line 17) | class ProfileEditor(QTabWidget): method __init__ (line 21) | def __init__(self, profile_model: ProfileModel, parent=None): method tab_changed (line 46) | def tab_changed(self, index): method show_warning (line 59) | def show_warning(): method save_all (line 72) | def save_all(self): FILE: src/gui/profile_editor/sigils_tab.py class ConditionWidget (line 25) | class ConditionWidget(QWidget): method __init__ (line 28) | def __init__(self, condition: str, parent=None): method update_condition (line 49) | def update_condition(self): class SigilWidget (line 55) | class SigilWidget(Container): method __init__ (line 58) | def __init__(self, sigil_name: str, sigil: SigilConditionModel, whitel... method setup_ui (line 65) | def setup_ui(self): method add_condition_to_list (line 109) | def add_condition_to_list(self, condition): method add_condition (line 117) | def add_condition(self): method remove_selected (line 121) | def remove_selected(self): method revert_sigil_dungeon (line 127) | def revert_sigil_dungeon(self): method update_sigil_dungeon (line 134) | def update_sigil_dungeon(self, classic=True): method on_condition_update (line 144) | def on_condition_update(self, old_condition, condition: str): class SigilsTab (line 151) | class SigilsTab(QWidget): method __init__ (line 152) | def __init__(self, sigil_model: SigilFilterModel, parent=None): method load (line 157) | def load(self): method setup_ui (line 162) | def setup_ui(self): method create_button_layout (line 171) | def create_button_layout(self): method create_form (line 188) | def create_form(self): method create_containers (line 201) | def create_containers(self): method add_sigil (line 223) | def add_sigil(self, sigil_condition: SigilConditionModel, whitelist: b... method create_sigil (line 234) | def create_sigil(self): method remove_sigil (line 253) | def remove_sigil(self, blacklist: bool = False): method update_priority (line 280) | def update_priority(self): method on_dungeon_changed (line 283) | def on_dungeon_changed(self, sigil_widget: SigilWidget): FILE: src/gui/profile_editor/tributes_tab.py class TributesTab (line 21) | class TributesTab(QWidget): method __init__ (line 22) | def __init__(self, tributes: list[TributeFilterModel] | None, parent=N... method load (line 28) | def load(self): method setup_ui (line 33) | def setup_ui(self): method create_button_layout (line 50) | def create_button_layout(self) -> QHBoxLayout: method _reload_tribute_list_widget (line 67) | def _reload_tribute_list_widget(self): method _display_text (line 73) | def _display_text(tribute: TributeFilterModel) -> str: method add_tribute (line 88) | def add_tribute(self): method add_rarity (line 95) | def add_rarity(self): method remove_selected (line 102) | def remove_selected(self): method _existing_tribute_names (line 114) | def _existing_tribute_names(self) -> list[str]: method _existing_rarities (line 117) | def _existing_rarities(self) -> list[ItemRarity]: FILE: src/gui/profile_editor_window.py class ProfileEditorWindow (line 18) | class ProfileEditorWindow(QMainWindow): method __init__ (line 21) | def __init__(self, parent=None): method _finish_construction (line 40) | def _finish_construction(self): method closeEvent (line 45) | def closeEvent(self, event): FILE: src/gui/profile_tab.py class ProfileTab (line 32) | class ProfileTab(QWidget): method __init__ (line 33) | def __init__(self): method confirm_discard_changes (line 93) | def confirm_discard_changes(self): method create_alert (line 105) | def create_alert(self, msg: str): method show_tab (line 109) | def show_tab(self): method load_file (line 114) | def load_file(self): method open_file (line 122) | def open_file(self): method load (line 132) | def load(self): method create_profile_editor (line 155) | def create_profile_editor(self): method load_yaml (line 162) | def load_yaml(self): method update_filename_label (line 220) | def update_filename_label(self): method save_yaml (line 227) | def save_yaml(self): method check_close_save (line 231) | def check_close_save(self): method refresh (line 236) | def refresh(self): FILE: src/gui/unified_window.py function ansi_to_html (line 68) | def ansi_to_html(text: str) -> str: class ANSIConsoleWidget (line 99) | class ANSIConsoleWidget(QPlainTextEdit): method __init__ (line 100) | def __init__(self, parent=None): method append_ansi_text (line 105) | def append_ansi_text(self, text: str): class QtConsoleHandler (line 111) | class QtConsoleHandler(logging.Handler, QObject): method __init__ (line 114) | def __init__(self): method emit (line 118) | def emit(self, record): class QtActivityHandler (line 123) | class QtActivityHandler(logging.Handler, QObject): method __init__ (line 126) | def __init__(self): method emit (line 130) | def emit(self, record): class BackendWorker (line 135) | class BackendWorker(QObject): method run (line 138) | def run(self): class UnifiedMainWindow (line 166) | class UnifiedMainWindow(QMainWindow): method __init__ (line 167) | def __init__(self): method _show_singleton_modal (line 283) | def _show_singleton_modal(self, window_attr: str, window_class, *args,... method _emit_deferred_config_cleanup_logs (line 316) | def _emit_deferred_config_cleanup_logs(self, config): method open_import_dialog (line 325) | def open_import_dialog(self): method open_settings_dialog (line 332) | def open_settings_dialog(self): method open_profile_editor (line 339) | def open_profile_editor(self): method restore_geometry (line 345) | def restore_geometry(self): method save_geometry (line 363) | def save_geometry(self): method closeEvent (line 373) | def closeEvent(self, event): method emit_startup_direct_to_console (line 395) | def emit_startup_direct_to_console(self): method apply_theme (line 405) | def apply_theme(self): FILE: src/item/data/affix.py class AffixType (line 5) | class AffixType(enum.Enum): class Affix (line 14) | class Affix: method __eq__ (line 23) | def __eq__(self, other: Affix) -> bool: FILE: src/item/data/aspect.py class Aspect (line 5) | class Aspect: method __eq__ (line 13) | def __eq__(self, other: Aspect) -> bool: FILE: src/item/data/item_type.py class ItemType (line 5) | class ItemType(Enum): function is_armor (line 55) | def is_armor(item_type: ItemType) -> bool: function is_consumable (line 66) | def is_consumable(item_type: ItemType) -> bool: function is_non_sigil_mapping (line 70) | def is_non_sigil_mapping(item_type: ItemType) -> bool: function is_sigil (line 74) | def is_sigil(item_type: ItemType) -> bool: function is_jewelry (line 78) | def is_jewelry(item_type: ItemType) -> bool: function is_socketable (line 82) | def is_socketable(item_type: ItemType) -> bool: function is_weapon (line 86) | def is_weapon(item_type: ItemType) -> bool: FILE: src/item/data/rarity.py class ItemRarity (line 4) | class ItemRarity(Enum): FILE: src/item/data/seasonal_attribute.py class SeasonalAttribute (line 4) | class SeasonalAttribute(Enum): FILE: src/item/descr/__init__.py function keep_letters_and_spaces (line 1) | def keep_letters_and_spaces(text): FILE: src/item/descr/read_descr_tts.py function _get_affix_counts (line 61) | def _get_affix_counts(tts_section: list[str], item: Item, start: int) ->... function _add_affixes_from_tts (line 97) | def _add_affixes_from_tts(tts_section: list[str], item: Item) -> Item: function _add_affixes_from_tts_mixed (line 121) | def _add_affixes_from_tts_mixed( function _raise_index_error (line 167) | def _raise_index_error(affixes, affix_bullets, item, img_item_descr: np.... function _add_sigil_affixes_from_tts (line 185) | def _add_sigil_affixes_from_tts(tts_section: list[str], item: Item) -> I... function _create_base_item_from_tts (line 212) | def _create_base_item_from_tts(tts_item: list[str]) -> Item | None: function _update_item_object (line 295) | def _update_item_object(item: Item, rarity=None, item_type=None) -> Item: function _get_affix_starting_location_from_tts_section (line 304) | def _get_affix_starting_location_from_tts_section(tts_section: list[str]... function _get_index_of_armor_dps_or_all_resist (line 320) | def _get_index_of_armor_dps_or_all_resist(tts_section: list[str], indica... function _get_affixes_from_tts_section (line 328) | def _get_affixes_from_tts_section(tts_section: list[str], start: int, le... function _get_aspect_from_tts_section (line 332) | def _get_aspect_from_tts_section(tts_section: list[str], item: Item, sta... function _get_affix_from_text (line 341) | def _get_affix_from_text(text: str) -> Affix: function _has_numbers (line 388) | def _has_numbers(affix_text): function _get_aspect_from_text (line 393) | def _get_aspect_from_text(text: str, name: str) -> Aspect: function _get_aspect_from_name (line 417) | def _get_aspect_from_name(text: str, name: str) -> Aspect | None: function _get_item_rarity (line 426) | def _get_item_rarity(data: str) -> ItemRarity | None: function _get_item_type (line 430) | def _get_item_type(data: str): function _is_codex_upgrade (line 434) | def _is_codex_upgrade(tts_section: list[str]) -> bool: function _is_cosmetic_upgrade (line 441) | def _is_cosmetic_upgrade(tts_section: list[str]): function read_descr_mixed (line 445) | def read_descr_mixed(img_item_descr: np.ndarray) -> Item | None: function read_descr (line 490) | def read_descr() -> Item | None: FILE: src/item/descr/text.py function closest_match (line 9) | def closest_match(target, candidates): function closest_to (line 17) | def closest_to(value, choices): function find_number (line 21) | def find_number(s: str, idx: int = 0) -> float | None: function remove_text_after_first_keyword (line 38) | def remove_text_after_first_keyword(text: str, keywords: list[str]) -> str: function clean_str (line 49) | def clean_str(s: str) -> str: FILE: src/item/descr/texture.py function find_seperators_long (line 11) | def find_seperators_long(img_item_descr: np.ndarray, sep_short_match: Te... function find_seperator_short (line 31) | def find_seperator_short(img_item_descr: np.ndarray) -> TemplateMatch: function _filter_outliers (line 45) | def _filter_outliers(template_matches: list[TemplateMatch]) -> list[Temp... function _find_bullets (line 56) | def _find_bullets( function find_affix_bullets (line 83) | def find_affix_bullets(img_item_descr: np.ndarray, sep_short_match: Temp... function find_aspect_bullet (line 117) | def find_aspect_bullet(img_item_descr: np.ndarray, sep_short_match: Temp... function find_aspect_search_area (line 134) | def find_aspect_search_area(img_item_descr: np.ndarray, aspect_bullet: T... function find_codex_upgrade_icon (line 148) | def find_codex_upgrade_icon(img_item_descr: np.ndarray, aspect_bullet: T... FILE: src/item/filter.py class MatchedFilter (line 40) | class MatchedFilter: class FilterResult (line 47) | class FilterResult: class _UniqueKeyLoader (line 52) | class _UniqueKeyLoader(yaml.SafeLoader): method construct_mapping (line 53) | def construct_mapping(self, node: MappingNode, deep=False): class Filter (line 65) | class Filter: method __new__ (line 81) | def __new__(cls): method _check_affixes (line 86) | def _check_affixes(self, item: Item) -> FilterResult: method _check_legendary_aspect (line 153) | def _check_legendary_aspect(self, item: Item) -> FilterResult: method _check_cosmetic (line 179) | def _check_cosmetic(item: Item) -> FilterResult: method _check_sigil (line 192) | def _check_sigil(self, item: Item) -> FilterResult: method _check_tribute (line 233) | def _check_tribute(self, item: Item) -> FilterResult: method _check_global_unique_filter (line 258) | def _check_global_unique_filter(self, item: Item) -> FilterResult: method _did_files_change (line 288) | def _did_files_change(self) -> bool: method _match_affixes_count (line 304) | def _match_affixes_count( method _match_affixes_sigils (line 347) | def _match_affixes_sigils( method _match_affixes_uniques (line 360) | def _match_affixes_uniques( method _match_greater_affix_count (line 394) | def _match_greater_affix_count(expected_min_count: int, item_affixes: ... method _match_item_roll_is_in_percent_range (line 398) | def _match_item_roll_is_in_percent_range(expected_percent: int, item_a... method _is_smaller_roll_better (line 418) | def _is_smaller_roll_better(item_aspect_or_affix: Aspect | Affix) -> b... method _match_item_value_threshold (line 426) | def _match_item_value_threshold(expected_value: float, item_aspect_or_... method _match_item_aspect_or_affix (line 431) | def _match_item_aspect_or_affix( method _match_item_power (line 462) | def _match_item_power(min_power: int, item_power: int, max_power: int ... method _match_item_type (line 466) | def _match_item_type(expected_item_types: list[ItemType], item_type: I... method load_files (line 471) | def load_files(self): method get_paragon_filters (line 554) | def get_paragon_filters(self) -> dict[str, object]: method should_keep (line 560) | def should_keep(self, item: Item) -> FilterResult: FILE: src/item/find_descr.py function _choose_best_result (line 23) | def _choose_best_result(res_left: SearchResult, res_right: SearchResult)... function _template_search (line 33) | def _template_search(img: np.ndarray, anchor: int, roi: np.ndarray, take... function find_descr (line 49) | def find_descr( FILE: src/item/models.py class Item (line 17) | class Item: method __eq__ (line 31) | def __eq__(self, other): class ItemJSONEncoder (line 69) | class ItemJSONEncoder(json.JSONEncoder): method default (line 70) | def default(self, o): FILE: src/logger.py class ThreadNameFilter (line 27) | class ThreadNameFilter(logging.Filter): method filter (line 28) | def filter(self, record): class ColoredFormatter (line 34) | class ColoredFormatter(logging.Formatter): method __init__ (line 35) | def __init__( method format (line 55) | def format(self, record: logging.LogRecord) -> str: function _setup_log_filename (line 60) | def _setup_log_filename(fmt: str) -> str: function create_formatter (line 69) | def create_formatter(colored=False): function setup (line 76) | def setup(log_level: str = "DEBUG", *, enable_stdout: bool = True) -> None: function clean_up_old_log_files (line 118) | def clean_up_old_log_files(): function _log_unhandled_exceptions (line 130) | def _log_unhandled_exceptions(args: typing.Any) -> None: FILE: src/loot_mover.py function move_items_to_stash (line 17) | def move_items_to_stash(): function move_items_to_inventory (line 50) | def move_items_to_inventory(): function _move_items (line 86) | def _move_items( FILE: src/main.py function main (line 42) | def main(): function check_for_proper_tts_configuration (line 107) | def check_for_proper_tts_configuration(): function get_d4_local_prefs_file (line 175) | def get_d4_local_prefs_file() -> Path | None: function hide_console (line 197) | def hide_console(): FILE: src/overlay.py class Overlay (line 10) | class Overlay: method __init__ (line 11) | def __init__(self): method run (line 21) | def run(self): FILE: src/paragon_overlay.py function _tk_thread_main (line 47) | def _tk_thread_main() -> None: function _ensure_ui_thread (line 79) | def _ensure_ui_thread() -> None: function _call_on_ui_thread (line 92) | def _call_on_ui_thread(fn: object) -> object: function _post_to_ui_thread (line 104) | def _post_to_ui_thread(fn: object) -> None: function _is_alive (line 110) | def _is_alive(w: tk.Misc | None, mapped: bool = False) -> bool: function _tk_btn (line 149) | def _tk_btn(parent: tk.Misc, text: str = "", cmd: Callable | None = None... function _tk_lbl (line 163) | def _tk_lbl(parent: tk.Misc, text: str = "", **kw) -> tk.Label: function _dpi_scale_for_widget (line 177) | def _dpi_scale_for_widget(w: tk.Misc) -> float: function _params_ini_path (line 191) | def _params_ini_path() -> Path: function _load_overlay_settings (line 198) | def _load_overlay_settings() -> dict[str, Any]: function _save_overlay_settings (line 245) | def _save_overlay_settings(values: dict[str, Any]) -> None: function _clamp_int (line 260) | def _clamp_int(v: int | None, lo: int, hi: int, default: int) -> int: function _iter_paragon_payloads (line 268) | def _iter_paragon_payloads(paragon: object) -> list[dict[str, Any]]: function _format_build_display_name (line 277) | def _format_build_display_name(raw_name: object) -> str: function _resolve_build_index (line 303) | def _resolve_build_index( function load_builds_from_path (line 327) | def load_builds_from_path(preset_path: str | None = None) -> list[dict[s... function parse_rotation (line 365) | def parse_rotation(rot_str: str) -> int: function nodes_to_grid (line 372) | def nodes_to_grid(nodes: list[int] | list[bool]) -> list[list[bool]]: class OverlayConfig (line 383) | class OverlayConfig: class ParagonOverlay (line 409) | class ParagonOverlay(tk.Toplevel): method __init__ (line 412) | def __init__( method _apply_dpi_scaling (line 496) | def _apply_dpi_scaling(self) -> None: method _build_ui (line 513) | def _build_ui(self) -> None: method _bind_events (line 625) | def _bind_events(self) -> None: method _poll_close_request (line 635) | def _poll_close_request(self) -> None: method _poll_window_state (line 644) | def _poll_window_state(self) -> None: method _on_config_changed (line 655) | def _on_config_changed(self, changed_keys: set[str] | frozenset[str]) ... method _apply_live_colorblind_change (line 661) | def _apply_live_colorblind_change(self) -> None: method _select_build (line 672) | def _select_build(self, idx: int) -> None: method _toggle_grid_lock (line 683) | def _toggle_grid_lock(self) -> None: method _toggle_gold_frames (line 688) | def _toggle_gold_frames(self) -> None: method _reset_grid_defaults (line 695) | def _reset_grid_defaults(self) -> None: method _accent_frame_color (line 710) | def _accent_frame_color(self) -> str: method _accent_frame_thickness (line 719) | def _accent_frame_thickness(self) -> int: method _grid_frame_thickness (line 723) | def _grid_frame_thickness(self) -> int: method _apply_accent_frames (line 727) | def _apply_accent_frames(self, *, force: bool = False) -> None: method _reload_profiles (line 750) | def _reload_profiles(self) -> None: method _is_descendant (line 773) | def _is_descendant(self, child: tk.Misc, parent: tk.Misc) -> bool: method _close_popup (line 787) | def _close_popup(self, attr_name: str, btn_widget: tk.Button, escape_i... method _handle_global_click (line 801) | def _handle_global_click(self, e: tk.Event, attr_name: str, btn_widget... method _close_build_dropdown (line 812) | def _close_build_dropdown(self) -> None: method _close_settings_dropdown (line 831) | def _close_settings_dropdown(self) -> None: method _show_dropdown (line 837) | def _show_dropdown( method _virtual_screen_bounds (line 924) | def _virtual_screen_bounds(self) -> tuple[int, int, int, int]: method _show_build_menu (line 938) | def _show_build_menu(self) -> None: method _show_settings_dropdown (line 1018) | def _show_settings_dropdown(self) -> None: method _measure_build_popup_width (line 1030) | def _measure_build_popup_width(self, popup: tk.Misc) -> int: method _build_build_popup (line 1073) | def _build_build_popup(self, host: tk.Misc) -> Any: method _build_settings_popup (line 1144) | def _build_settings_popup(self, host: tk.Misc) -> Any: method _update_board_selection (line 1314) | def _update_board_selection(self) -> None: method _select_board_card (line 1325) | def _select_board_card(self, idx: int) -> None: method _toggle_collapsed_mode (line 1332) | def _toggle_collapsed_mode(self) -> None: method _refresh_lists (line 1342) | def _refresh_lists(self) -> None: method _on_boards_mousewheel (line 1406) | def _on_boards_mousewheel(self, e: tk.Event) -> None: method _move_grid (line 1419) | def _move_grid(self, dx: int, dy: int) -> None: method _zoom_grid (line 1432) | def _zoom_grid(self, delta: int) -> None: method _warmup_settings_assets (line 1443) | def _warmup_settings_assets(self) -> None: method _on_grid_drag_start (line 1476) | def _on_grid_drag_start(self, e: tk.Event) -> None: method _on_grid_drag_move (line 1497) | def _on_grid_drag_move(self, e: tk.Event) -> None: method _on_grid_drag_end (line 1511) | def _on_grid_drag_end(self, _: tk.Event) -> None: method _get_resolution (line 1519) | def _get_resolution(self) -> tuple[int, int]: method _get_cam_roi (line 1525) | def _get_cam_roi(self) -> tuple[int, int, int, int] | None: method _apply_geometry (line 1534) | def _apply_geometry(self) -> None: method redraw (line 1545) | def redraw(self) -> None: method close (line 1593) | def close(self) -> None: method _persist_state (line 1610) | def _persist_state(self) -> None: function run_paragon_overlay (line 1639) | def run_paragon_overlay(preset_path: str | None = None, *, parent: tk.Mi... function request_close (line 1689) | def request_close(overlay: ParagonOverlay | None = None) -> None: FILE: src/scripts/__init__.py function correct_name (line 1) | def correct_name(name: str) -> str | None: FILE: src/scripts/common.py class FilterColors (line 37) | class FilterColors: function get_filter_colors (line 66) | def get_filter_colors() -> FilterColors: function mark_as_junk (line 80) | def mark_as_junk(): function mark_as_favorite (line 85) | def mark_as_favorite(): function reset_canvas (line 93) | def reset_canvas(root, canvas): function reset_item_status (line 101) | def reset_item_status(occupied, inv): function drop_item_from_inventory (line 117) | def drop_item_from_inventory() -> None: function is_ignored_item (line 129) | def is_ignored_item(item_descr: Item): function _scaled_overlay_font_size (line 162) | def _scaled_overlay_font_size(minimum_font_size: int, window_height: int... function draw_text_with_background (line 173) | def draw_text_with_background( FILE: src/scripts/handler.py function _setting_key (line 46) | def _setting_key(section: str, field_name: str) -> str: function _field_metadata (line 50) | def _field_metadata(model_class: type[Any], field_name: str) -> dict[str... function _collect_reload_group_keys (line 54) | def _collect_reload_group_keys(section: str, model_class: type[Any], gro... function _collect_hotkey_setting_keys (line 62) | def _collect_hotkey_setting_keys() -> set[str]: function _has_any_changed (line 72) | def _has_any_changed(changed_keys: AbstractSet[str], relevant_keys: set[... class ScriptHandler (line 83) | class ScriptHandler: method __init__ (line 84) | def __init__(self): method _create_vision_mode (line 102) | def _create_vision_mode(self, vision_mode_type: VisionModeType): method _graceful_exit (line 107) | def _graceful_exit(self): method _on_config_changed (line 110) | def _on_config_changed(self, changed_keys: AbstractSet[str]) -> None: method _hotkey_signature (line 124) | def _hotkey_signature(self, config: IniConfigLoader) -> tuple[str | bo... method _refresh_hotkeys (line 139) | def _refresh_hotkeys(self, config: IniConfigLoader) -> None: method _refresh_language_assets (line 151) | def _refresh_language_assets(self, config: IniConfigLoader) -> None: method _refresh_logging_level (line 159) | def _refresh_logging_level(self, config: IniConfigLoader) -> None: method _notify_manual_restart_required (line 170) | def _notify_manual_restart_required(self, reason: str) -> None: method toggle_paragon_overlay (line 177) | def toggle_paragon_overlay(self): method _run_paragon_overlay (line 213) | def _run_paragon_overlay(self, preset_path: str) -> None: method _clear_key_binds (line 227) | def _clear_key_binds(self) -> None: method _register_hotkey (line 236) | def _register_hotkey(self, hotkey: str, callback: Callable[[], None]) ... method setup_key_binds (line 239) | def setup_key_binds(self): method filter_items (line 263) | def filter_items(self, force_refresh=ItemRefreshType.no_refresh, no_ma... method move_items_to_inventory (line 274) | def move_items_to_inventory(self): method move_items_to_stash (line 277) | def move_items_to_stash(self): method _start_or_stop_loot_interaction_thread (line 280) | def _start_or_stop_loot_interaction_thread(self, loot_interaction_meth... method _wrapper_run_loot_interaction_method (line 301) | def _wrapper_run_loot_interaction_method(self, loot_interaction_method... method run_vision_mode (line 316) | def run_vision_mode(self): function run_loot_filter (line 329) | def run_loot_filter(force_refresh: ItemRefreshType = ItemRefreshType.no_... FILE: src/scripts/loot_filter_tts.py function check_items (line 29) | def check_items( FILE: src/scripts/vision_mode_fast.py class VisionModeFast (line 24) | class VisionModeFast: method __init__ (line 25) | def __init__(self): method adjust_textbox_size (line 41) | def adjust_textbox_size(self): method clear_textbox (line 59) | def clear_textbox(self): method create_textbox (line 63) | def create_textbox(self): method draw_from_queue (line 79) | def draw_from_queue(self): method insert_colored_text (line 91) | def insert_colored_text(self, text, color): method refresh_clear_timer (line 100) | def refresh_clear_timer(self): method request_clear (line 106) | def request_clear(self): method request_draw (line 109) | def request_draw(self, text, color): method on_tts (line 112) | def on_tts(self, _): method start (line 152) | def start(self): method stop (line 157) | def stop(self): method running (line 163) | def running(self): function create_match_text (line 167) | def create_match_text(matches: list[MatchedFilter]): FILE: src/scripts/vision_mode_with_highlighting.py class CancellationRequested (line 38) | class CancellationRequested(Exception): class VisionModeWithHighlighting (line 43) | class VisionModeWithHighlighting: method __init__ (line 44) | def __init__(self): method draw_rect (line 94) | def draw_rect(self, canvas: tk.Canvas, bullet_width, obj, off, color): method draw_text (line 102) | def draw_text(self, canvas, text, color, previous_text_y, offset, canv... method create_signal_rect (line 155) | def create_signal_rect(self, canvas, w, thick, color): method draw_from_queue (line 174) | def draw_from_queue(self): method draw_empty_outline (line 198) | def draw_empty_outline(self, item_roi, color, text: str | None): method draw_match_outline (line 213) | def draw_match_outline(self, item_roi, should_keep_res, item_descr): method draw_no_match_outline (line 234) | def draw_no_match_outline(self, item_roi): method draw_codex_upgrade_outline (line 240) | def draw_codex_upgrade_outline(self, item_roi, should_keep_result: Fil... method on_tts (line 259) | def on_tts(self, _): method evaluate_item_and_queue_draw (line 285) | def evaluate_item_and_queue_draw(self, item_descr: Item): method check_for_thread_cancellation (line 402) | def check_for_thread_cancellation(cancel_event: Event): method stop_thread_and_wait (line 407) | def stop_thread_and_wait(thread: Thread, cancel_event: Event): method check_for_item_still_selected (line 411) | def check_for_item_still_selected(self, item_center): method get_coords_from_roi (line 424) | def get_coords_from_roi(self, item_roi): method request_clear (line 433) | def request_clear(self): method request_empty_outline (line 436) | def request_empty_outline(self, item_descr, item_roi, color, text: str... method request_match_box (line 439) | def request_match_box(self, item_descr, item_roi, should_keep_res, ite... method request_no_match_box (line 442) | def request_no_match_box(self, item_descr, item_roi): method request_codex_upgrade_box (line 445) | def request_codex_upgrade_box(self, item_descr, item_roi, res): method start (line 448) | def start(self): method stop (line 453) | def stop(self): method running (line 467) | def running(self): FILE: src/startup_messages.py function emit_startup_messages (line 14) | def emit_startup_messages(): function emit_early_startup_logs (line 23) | def emit_early_startup_logs(): FILE: src/template_finder.py class TemplateMatch (line 24) | class TemplateMatch: method __eq__ (line 32) | def __eq__(self, other): method __hash__ (line 37) | def __hash__(self): class SearchResult (line 42) | class SearchResult: method __post_init__ (line 46) | def __post_init__(self): class SearchArgs (line 52) | class SearchArgs: method __call__ (line 65) | def __call__(self, cls): method as_dict (line 69) | def as_dict(self): method detect (line 72) | def detect(self, img: np.ndarray = None) -> SearchResult: method is_visible (line 79) | def is_visible(self, img: np.ndarray = None) -> bool: method wait_until_visible (line 82) | def wait_until_visible(self, timeout: float = 30, suppress_debug: bool... method wait_until_hidden (line 90) | def wait_until_hidden(self, timeout: float = 3, suppress_debug: bool =... method wait_for_update (line 99) | def wait_for_update( function _process_template_refs (line 115) | def _process_template_refs(ref: str | np.ndarray | list[str]) -> list[Te... function _get_cv_result (line 134) | def _get_cv_result( function search (line 174) | def search( FILE: src/tools/gen_data.py function remove_content_in_braces (line 39) | def remove_content_in_braces(input_string) -> str: function get_random_number_idx (line 56) | def get_random_number_idx(s: str) -> list[int]: function is_placeholder_or_test_name (line 65) | def is_placeholder_or_test_name(name) -> bool: function check_ms (line 90) | def check_ms(input_string) -> str: function main (line 108) | def main(d4data_dir: Path, companion_app_dir: Path): function generate_aspects (line 276) | def generate_aspects(d4data_dir, language): function generate_uniques (line 312) | def generate_uniques(d4data_dir, language): FILE: src/tts.py class ItemIdentifiers (line 22) | class ItemIdentifiers(enum.Enum): class Publisher (line 31) | class Publisher: method __init__ (line 32) | def __init__(self): method find_item (line 36) | def find_item(self) -> None: method publish (line 51) | def publish(self, data): method subscribe (line 56) | def subscribe(self, subscriber): method unsubscribe (line 60) | def unsubscribe(self, subscriber): function create_pipe (line 65) | def create_pipe(): function read_pipe (line 94) | def read_pipe() -> None: function find_item_start (line 126) | def find_item_start(data: list[str]) -> int | None: function filter_data (line 143) | def filter_data(data: str) -> bool: function fix_data (line 147) | def fix_data(data: str) -> str: function start_connection (line 156) | def start_connection() -> None: FILE: src/ui/char_inventory.py class CharInventory (line 7) | class CharInventory(InventoryBase): method __init__ (line 8) | def __init__(self): FILE: src/ui/inventory_base.py class ItemSlot (line 16) | class ItemSlot: class InventoryBase (line 23) | class InventoryBase(Menu): method __init__ (line 29) | def __init__(self, rows: int = 3, columns: int = 11, is_stash: bool = ... method get_max_slot_size (line 39) | def get_max_slot_size(self): method get_item_slots (line 44) | def get_item_slots(self, img: np.ndarray | None = None) -> tuple[list[... method hover_item (line 85) | def hover_item(self, item: ItemSlot): method hover_left_of_item (line 89) | def hover_left_of_item(self, item: ItemSlot): method hover_item_with_delay (line 98) | def hover_item_with_delay(self, item: ItemSlot, delay_factor: tuple[fl... FILE: src/ui/menu.py class ToggleMethod (line 19) | class ToggleMethod(Enum): class Menu (line 24) | class Menu: method __init__ (line 25) | def __init__(self): method open (line 32) | def open(self) -> bool: method _check_match (line 48) | def _check_match(self, res: SearchResult) -> bool: method is_open (line 57) | def is_open(self, img: np.ndarray = None) -> bool: method wait_until_open (line 67) | def wait_until_open(self, timeout: float = 10) -> bool: FILE: src/ui/stash.py class Stash (line 14) | class Stash(InventoryBase): method __init__ (line 15) | def __init__(self): method switch_to_tab (line 24) | def switch_to_tab(tab_idx) -> bool: FILE: src/ui/vendor.py class Vendor (line 9) | class Vendor(InventoryBase): method __init__ (line 10) | def __init__(self): FILE: src/utils/custom_mouse.py function isNumeric (line 11) | def isNumeric(val): function is_list_of_points (line 15) | def is_list_of_points(value): class BezierCurve (line 27) | class BezierCurve: method binomial (line 29) | def binomial(n, k): method bernsteinPolynomialPoint (line 34) | def bernsteinPolynomialPoint(x, i, n): method bernsteinPolynomial (line 39) | def bernsteinPolynomial(points): method curvePoints (line 54) | def curvePoints(n, points): class HumanCurve (line 64) | class HumanCurve: method __init__ (line 67) | def __init__(self, fromPoint, toPoint, **kwargs): method generateCurve (line 72) | def generateCurve(self, **kwargs): method generateInternalKnots (line 96) | def generateInternalKnots(self, leftBoundary, rightBoundary, downBound... method generatePoints (line 122) | def generatePoints(self, knots): method distortPoints (line 132) | def distortPoints(self, points, distortionMean, distortionStdev, disto... method tweenPoints (line 155) | def tweenPoints(self, points, tween, targetPoints): class mouse (line 175) | class mouse: method move (line 176) | def move( method _is_clicking_safe (line 219) | def _is_clicking_safe(): method click (line 223) | def click(button): method get_position (line 228) | def get_position(): FILE: src/utils/image_operations.py class ThresholdTypes (line 11) | class ThresholdTypes(Enum): function threshold (line 17) | def threshold( function crop (line 58) | def crop(img: np.ndarray, roi: tuple[int, int, int, int]) -> np.ndarray: function mask_by_roi (line 75) | def mask_by_roi(img: np.ndarray, roi: tuple[int, int, int, int], masking... function alpha_to_mask (line 96) | def alpha_to_mask(img: np.ndarray) -> np.ndarray | None: function create_mask (line 108) | def create_mask(size: tuple[int, int], roi: tuple[int, int, int, int]) -... function color_filter (line 121) | def color_filter( function overlay_image (line 157) | def overlay_image(image1: np.ndarray, image2: np.ndarray, x_offset: int,... function get_typographic_lines (line 195) | def get_typographic_lines(img: np.ndarray, should_invert: bool = False) ... function compare_histograms (line 227) | def compare_histograms(imageA, imageB): FILE: src/utils/misc.py function is_in_roi (line 20) | def is_in_roi(roi: list[float], pos: tuple[float, float]): function hms (line 27) | def hms(seconds: int): function set_cv2_window (line 35) | def set_cv2_window(name, x, y, size): function generate_random_name (line 41) | def generate_random_name(length_min=8, length_max=14): function random_number_gaussian (line 47) | def random_number_gaussian(min_val, max_val): function random_coordinate_around_center (line 55) | def random_coordinate_around_center(x, y, radius_x, radius_y): function convert_args_to_numpy (line 66) | def convert_args_to_numpy(func): function run_until_condition (line 88) | def run_until_condition( function scale_vector_to_distance (line 112) | def scale_vector_to_distance(vector, target_distance): function slugify (line 119) | def slugify(value, allow_unicode=False, separator="_"): function find_and_eval_math_in_string (line 141) | def find_and_eval_math_in_string(s): function remove_commas_from_numbers (line 151) | def remove_commas_from_numbers(s: str) -> str: FILE: src/utils/process_handler.py function kill_thread (line 13) | def kill_thread(thread): function safe_exit (line 21) | def safe_exit(error_code=0): function set_process_name (line 59) | def set_process_name(name, window_spec): FILE: src/utils/roi_operations.py function compare_tuples (line 9) | def compare_tuples(t1, t2, uncertainty): function create_roi_from_rel (line 13) | def create_roi_from_rel(point, rel_roi): function fit_roi_to_window_size (line 23) | def fit_roi_to_window_size(roi, size): function get_center (line 47) | def get_center(roi: tuple[int, int, int, int]) -> tuple[int, int]: function intersect (line 57) | def intersect(*rects: list[tuple[int, int, int, int]] | tuple[int, int, ... function bounding_box (line 77) | def bounding_box( function to_grid (line 110) | def to_grid(roi: tuple[int, int, int, int], rows: int, columns: int) -> ... class Condition (line 138) | class Condition(Enum): function is_in_roi (line 144) | def is_in_roi( FILE: src/utils/window.py class WindowSpec (line 28) | class WindowSpec: method match (line 31) | def match(self, hwnd: int, check_window_name: bool = True) -> bool: function _list_active_window_ids (line 36) | def _list_active_window_ids() -> list[int]: function get_window_spec_id (line 42) | def get_window_spec_id(window_spec: WindowSpec) -> int | None: function _get_window_name_from_id (line 53) | def _get_window_name_from_id(hwnd: int) -> str: function _get_process_from_window_name (line 57) | def _get_process_from_window_name(hwnd: int) -> str: function start_detecting_window (line 65) | def start_detecting_window(window_spec: WindowSpec): function detect_window (line 74) | def detect_window(window_spec: WindowSpec): function find_and_set_window_position (line 81) | def find_and_set_window_position(window_spec: WindowSpec): function stop_detecting_window (line 91) | def stop_detecting_window(): function move_window_to_foreground (line 99) | def move_window_to_foreground(window_spec: WindowSpec): function is_window_foreground (line 106) | def is_window_foreground(window_spec: WindowSpec) -> bool: function screenshot (line 114) | def screenshot( FILE: tests/config/helper_test.py class TestKeyMustExist (line 6) | class TestKeyMustExist: method test_existing_key (line 7) | def test_existing_key(self): method test_modifier_key_works (line 11) | def test_modifier_key_works(self): method test_non_existing_key (line 14) | def test_non_existing_key(self): class TestSingletonDecorator (line 20) | class TestSingletonDecorator: class SingletonDummyClass (line 22) | class SingletonDummyClass: method __init__ (line 23) | def __init__(self, *args, **kwargs): method test_singleton_instance (line 26) | def test_singleton_instance(self): class TestStrToIntList (line 33) | class TestStrToIntList: method test_empty_string (line 34) | def test_empty_string(self): method test_single_integer (line 38) | def test_single_integer(self): method test_multiple_integers (line 42) | def test_multiple_integers(self): method test_invalid_input (line 46) | def test_invalid_input(self): method test_negative_numbers (line 51) | def test_negative_numbers(self): method test_whitespace (line 55) | def test_whitespace(self): FILE: tests/config/loader_test.py function isolated_ini_loader (line 15) | def isolated_ini_loader(tmp_path: Path): class TestIniConfigLoader (line 49) | class TestIniConfigLoader: method test_reload_if_changed_updates_models_and_revision (line 50) | def test_reload_if_changed_updates_models_and_revision(self, isolated_... method test_property_access_auto_reloads_changed_config (line 61) | def test_property_access_auto_reloads_changed_config(self, isolated_in... method test_save_value_updates_model_without_reloading_from_file (line 68) | def test_save_value_updates_model_without_reloading_from_file(self, is... method test_save_value_notifies_change_listeners (line 75) | def test_save_value_notifies_change_listeners(self, isolated_ini_loade... method test_reload_if_changed_notifies_changed_keys (line 84) | def test_reload_if_changed_notifies_changed_keys(self, isolated_ini_lo... method test_reload_if_changed_removes_defunct_model_keys (line 95) | def test_reload_if_changed_removes_defunct_model_keys( FILE: tests/config/models_test.py class TestSigil (line 15) | class TestSigil: method _setup (line 17) | def _setup(self, mock_ini_loader: IniConfigLoader) -> None: method test_all_bad_cases (line 22) | def test_all_bad_cases(data: dict[str, Any]) -> None: method test_all_good_cases (line 29) | def test_all_good_cases(data: dict[str, Any]) -> None: class TestUnique (line 34) | class TestUnique: method _setup (line 36) | def _setup(self, mock_ini_loader: IniConfigLoader) -> None: method test_all_bad_cases (line 41) | def test_all_bad_cases(data: dict[str, Any], expected_msg: str) -> None: method test_all_good_cases (line 47) | def test_all_good_cases() -> None: class TestGeneralProfiles (line 51) | class TestGeneralProfiles: method test_profiles_empty_entries_are_removed (line 53) | def test_profiles_empty_entries_are_removed() -> None: FILE: tests/config/ui_test.py function test_set_resolution (line 25) | def test_set_resolution(res): function test_transformation (line 31) | def test_transformation(result): function test_colors (line 39) | def test_colors(): function test_templates (line 43) | def test_templates(): FILE: tests/conftest.py function mock_ini_loader (line 13) | def mock_ini_loader(mocker: MockerFixture): FILE: tests/gui/importer/test_d4builds.py function test_extract_build_metadata_from_planner_header (line 28) | def test_extract_build_metadata_from_planner_header() -> None: function test_extract_build_metadata_prefers_description_for_guides (line 62) | def test_extract_build_metadata_prefers_description_for_guides() -> None: function test_extract_d4builds_season_number_from_gear_dropdown (line 85) | def test_extract_d4builds_season_number_from_gear_dropdown() -> None: function test_import_d4builds (line 109) | def test_import_d4builds(url: str, mock_ini_loader: MockerFixture, mocke... FILE: tests/gui/importer/test_diablo_trade.py function test_import_diablo_trade (line 20) | def test_import_diablo_trade(url: str, mock_ini_loader: MockerFixture, m... FILE: tests/gui/importer/test_gui_common.py function test_build_default_profile_file_name_maxroll (line 5) | def test_build_default_profile_file_name_maxroll() -> None: function test_build_default_profile_file_name_d4builds_strips_title_suffix (line 13) | def test_build_default_profile_file_name_d4builds_strips_title_suffix() ... function test_build_default_profile_file_name_d4builds_strips_spaced_title_suffix (line 21) | def test_build_default_profile_file_name_d4builds_strips_spaced_title_su... function test_build_default_profile_file_name_keeps_unknown_class_and_empty_variant (line 29) | def test_build_default_profile_file_name_keeps_unknown_class_and_empty_v... function test_build_default_profile_file_name_adds_season_and_strips_matching_header_marker (line 37) | def test_build_default_profile_file_name_adds_season_and_strips_matching... function test_build_default_profile_file_name_replaces_stale_season_marker_in_header (line 49) | def test_build_default_profile_file_name_replaces_stale_season_marker_in... function test_to_yaml_str_sorts_aspect_upgrades_and_uses_block_style (line 57) | def test_to_yaml_str_sorts_aspect_upgrades_and_uses_block_style(mock_ini... FILE: tests/gui/importer/test_maxroll.py function test_import_maxroll (line 31) | def test_import_maxroll(url: str, mock_ini_loader: MockerFixture, mocker... function test_find_item_type_uses_fix_weapon_type_with_slot_context (line 45) | def test_find_item_type_uses_fix_weapon_type_with_slot_context() -> None: function test_find_item_type_uses_fix_offhand_type_with_slot_and_class_context (line 52) | def test_find_item_type_uses_fix_offhand_type_with_slot_and_class_contex... function test_find_item_type_uses_fix_offhand_type_when_item_type_implies_offhand (line 59) | def test_find_item_type_uses_fix_offhand_type_when_item_type_implies_off... function test_resolve_visible_profile_index_skips_hidden_profiles (line 66) | def test_resolve_visible_profile_index_skips_hidden_profiles() -> None: function test_find_item_affixes_resolves_skill_rank_category_from_affix_key (line 77) | def test_find_item_affixes_resolves_skill_rank_category_from_affix_key()... function test_find_item_affixes_resolves_skill_rank_category_from_related_description (line 94) | def test_find_item_affixes_resolves_skill_rank_category_from_related_des... FILE: tests/gui/importer/test_mobalytics.py function test_extract_mobalytics_paragon_steps_normalizes_warlock_starting_board (line 31) | def test_extract_mobalytics_paragon_steps_normalizes_warlock_starting_bo... function test_import_mobalytics (line 48) | def test_import_mobalytics(url: str, mock_ini_loader: MockerFixture, moc... FILE: tests/item/filter/data/affixes.py class TestItem (line 7) | class TestItem(Item): method __init__ (line 8) | def __init__(self, rarity: ItemRarity = ItemRarity.Legendary, power=91... FILE: tests/item/filter/data/aspects.py class TestItem (line 7) | class TestItem(Item): method __init__ (line 8) | def __init__(self, rarity=ItemRarity.Legendary, power=910, is_codex_up... FILE: tests/item/filter/data/sigils.py class TestSigil (line 7) | class TestSigil(Item): method __init__ (line 8) | def __init__(self, rarity=ItemRarity.Common, item_type=ItemType.Sigil,... FILE: tests/item/filter/data/tributes.py class TestTribute (line 6) | class TestTribute(Item): method __init__ (line 7) | def __init__(self, rarity=ItemRarity.Common, item_type=ItemType.Tribut... FILE: tests/item/filter/data/uniques.py class TestUnique (line 8) | class TestUnique(Item): method __init__ (line 9) | def __init__( FILE: tests/item/filter/filter_test.py function _create_mocked_filter (line 25) | def _create_mocked_filter(mocker: MockerFixture) -> Filter: function test_affixes (line 42) | def test_affixes(_name: str, result: list[str], item: Item, mocker: Mock... function test_aspects (line 51) | def test_aspects(_name: str, result: list[str], item: Item, mocker: Mock... function test_global_uniques (line 63) | def test_global_uniques(_name: str, result: list[str], item: Item, mocke... function test_sigils (line 70) | def test_sigils(_name: str, result: list[str], item: Item, mocker: Mocke... function test_sigil_empty_lists (line 78) | def test_sigil_empty_lists(mocker: MockerFixture): function test_sigil_priority (line 89) | def test_sigil_priority(mocker: MockerFixture): function test_tributes (line 100) | def test_tributes(_name: str, result: list[str], item: Item, mocker: Moc... function test_uniques_with_affixes (line 111) | def test_uniques_with_affixes(_name: str, result: list[str], item: Item,... function test_mythic_always_kept (line 120) | def test_mythic_always_kept(_name: str, result: bool, item: Item, mocker... FILE: tests/item/read_descr_season6_tts_test.py function test_items (line 147) | def test_items(input_item: list[str], expected_item: Item): FILE: tests/item/read_descr_season8_tts_test.py function test_items (line 90) | def test_items(input_item: list[str], expected_item: Item): FILE: tests/item/read_descr_season_11_tts_test.py function test_items (line 431) | def test_items(input_item: list[str], expected_item: Item): FILE: tests/item/read_descr_season_12_tts_test.py function test_items (line 197) | def test_items(input_item: list[str], expected_item: Item): FILE: tests/item/read_descr_season_13_tts_test.py function test_items (line 394) | def test_items(input_item: list[str], expected_item: Item): FILE: tests/item/read_descr_tts_test.py function test_loot_filter_controls_are_not_tts_item_start (line 7) | def test_loot_filter_controls_are_not_tts_item_start(): function test_loot_filter_controls_do_not_raise_tts_parser_error (line 11) | def test_loot_filter_controls_do_not_raise_tts_parser_error(): FILE: tests/template_finder_test.py function test_search (line 7) | def test_search(): function test_search_best_match (line 18) | def test_search_best_match(): function test_search_all (line 29) | def test_search_all(): function test_search_all_multiple_templates (line 38) | def test_search_all_multiple_templates(): FILE: tests/ui/char_inventory_test.py function test_char_inventory (line 21) | def test_char_inventory(img_res, input_img): function test_get_item_slots (line 37) | def test_get_item_slots(img_res, input_img, occupied, junk, fav): FILE: tests/ui/chest_test.py function test_chest (line 12) | def test_chest(img_res, input_img): FILE: tests/utils/image_operations_test.py function test_binary_threshold (line 16) | def test_binary_threshold() -> None: function test_crop (line 34) | def test_crop() -> None: function test_mask_by_roi (line 47) | def test_mask_by_roi() -> None: function test_alpha_to_mask (line 95) | def test_alpha_to_mask() -> None: function test_create_mask (line 107) | def test_create_mask() -> None: function filter_img (line 115) | def filter_img() -> np.ndarray: function color_range (line 120) | def color_range() -> list[np.ndarray]: function test_color_filter_mask_shape (line 124) | def test_color_filter_mask_shape(filter_img: np.ndarray, color_range: li... function test_color_filter_no_img (line 129) | def test_color_filter_no_img(filter_img: np.ndarray, color_range: list[n... function test_color_filter_with_img (line 134) | def test_color_filter_with_img(filter_img: np.ndarray, color_range: list... function test_overlay_image (line 139) | def test_overlay_image() -> None: FILE: tests/utils/roi_operations_test.py function test_get_center (line 4) | def test_get_center() -> None: function test_intersect (line 11) | def test_intersect() -> None: function test_bounding_box (line 23) | def test_bounding_box() -> None: function test_is_coor_in_roi (line 49) | def test_is_coor_in_roi() -> None: FILE: tts/saapi.cpp function BOOL (line 12) | BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID ... function InitPipe (line 30) | void InitPipe() { hPipe = CreateFile(_T("\\\\.\\pipe\\d4lf"), GENERIC_WR... function SA_SayW (line 32) | bool SA_SayW(const wchar_t* str) { function SA_BrlShowTextW (line 46) | bool SA_BrlShowTextW(const wchar_t* str) { return true; } function SA_IsRunning (line 48) | bool SA_IsRunning() { return true; } function SA_StopAudio (line 50) | bool SA_StopAudio() { return true; }