diff --git a/installer.py b/installer.py index 201d35e5c..f09eb7a9b 100644 --- a/installer.py +++ b/installer.py @@ -881,7 +881,7 @@ def check_torch(): try: import torch try: - import intel_extension_for_pytorch as ipex # pylint: disable=import-error, unused-import + import intel_extension_for_pytorch as ipex # pylint: disable=import-error, unused-import # ty: ignore[unresolved-import] log.info(f'Torch backend: type=IPEX version={ipex.__version__}') except Exception: pass @@ -952,7 +952,7 @@ def check_torch(): if args.use_directml and allow_directml: try: - import torch_directml # pylint: disable=import-error + import torch_directml # pylint: disable=import-error # ty: ignore[unresolved-import] dml_ver = package_version("torch-directml") log.warning(f'Torch backend: DirectML ({dml_ver})') log.warning('DirectML: end-of-life') @@ -1020,7 +1020,7 @@ def run_extension_installer(folder): env['PYTHONPATH'] = os.path.abspath(".") if os.environ.get('PYTHONPATH', None) is not None: seperator = ';' if sys.platform == 'win32' else ':' - env['PYTHONPATH'] += seperator + os.environ.get('PYTHONPATH', None) + env['PYTHONPATH'] += seperator + os.environ.get('PYTHONPATH', '') result, txt = run(sys.executable, path_installer, env=env, cwd=folder) debug(f'Extension installer: file="{path_installer}" {result.stdout}') if result.returncode != 0: diff --git a/modules/caption/vqa.py b/modules/caption/vqa.py index 6655a25e6..ff47f6eda 100644 --- a/modules/caption/vqa.py +++ b/modules/caption/vqa.py @@ -13,17 +13,17 @@ from modules import shared, devices, errors, model_quant, sd_models, sd_models_c from modules.sd_offload_aux import register_aux, deregister_aux, move_aux_to_gpu, offload_aux from modules.logger import log, console from modules.caption import vqa_detection -from modules.caption.models_def import vlm_models, vlm_prefill, vlm_prompt_mapping, vlm_prompt_placeholders, vlm_prompts_common, vlm_prompts_florence, vlm_prompts_moondream, vlm_prompts_moondream2, vlm_prompts_promptgen, get_vlm_repo +from modules.caption.models_def import vlm_models, vlm_prefill, vlm_prompt_mapping, vlm_prompt_placeholders, vlm_prompts_common, vlm_prompts_florence, vlm_prompts_moondream, vlm_prompts_moondream2, vlm_prompts_promptgen, vlm_prompts, vlm_default, vlm_system, get_vlm_repo # pylint: disable=unused-import + -# Debug logging - function-based to avoid circular import debug_enabled = os.environ.get('SD_CAPTION_DEBUG', None) is not None + def debug(*args, **kwargs): if debug_enabled: log.trace(*args, **kwargs) - def get_prompts_for_model(model_name: str) -> list: """Get available prompts based on selected model.""" if model_name is None: diff --git a/modules/extras.py b/modules/extras.py index 24df8f9d0..450cdb2d3 100644 --- a/modules/extras.py +++ b/modules/extras.py @@ -8,7 +8,7 @@ import torch import gradio as gr import safetensors.torch from modules.merging import merge, merge_utils, modules_sdxl -from modules import shared, images, sd_models, sd_vae, sd_samplers, devices +from modules import shared, images, sd_models, sd_checkpoint, sd_vae, sd_samplers, devices from modules.logger import log @@ -181,13 +181,13 @@ def run_modelmerger(id_task, **kwargs): # pylint: disable=unused-argument t1 = time.time() log.info(f"Merge complete: saved='{output_modelname}' time={t1-t0:.2f}") - sd_models.list_models() - created_model = next((ckpt for ckpt in sd_models.checkpoints_list.values() if ckpt.name == filename), None) + sd_checkpoint.list_models() + created_model = next((ckpt for ckpt in sd_checkpoint.checkpoints_list.values() if ckpt.name == filename), None) if created_model: created_model.calculate_shorthash() devices.torch_gc(force=True, reason='merge') shared.state.end(jobid) - return [*[gr.Dropdown.update(choices=sd_models.checkpoint_titles()) for _ in range(4)], f"Model saved to {output_modelname}"] + return [*[gr.Dropdown.update(choices=sd_checkpoint.checkpoint_titles()) for _ in range(4)], f"Model saved to {output_modelname}"] def run_model_modules(model_type:str, model_name:str, custom_name:str, diff --git a/modules/processing.py b/modules/processing.py index 4e8b001b8..abd6b2bd1 100644 --- a/modules/processing.py +++ b/modules/processing.py @@ -6,9 +6,7 @@ from PIL import Image, ImageOps from modules import shared, devices, errors, images, scripts_manager, memstats, script_callbacks, extra_networks, detailer, sd_models, sd_checkpoint, sd_vae, processing_helpers, processing_grading, timer from modules.logger import log from modules.sd_hijack_hypertile import context_hypertile_vae, context_hypertile_unet -from modules.processing_class import ( # pylint: disable=unused-import - StableDiffusionProcessing, -) +from modules.processing_class import StableDiffusionProcessing, StableDiffusionProcessingTxt2Img, StableDiffusionProcessingImg2Img, StableDiffusionProcessingControl, StableDiffusionProcessingVideo # pylint: disable=unused-import from modules.processing_info import create_infotext diff --git a/modules/sd_models.py b/modules/sd_models.py index c66871897..9b5d7a718 100644 --- a/modules/sd_models.py +++ b/modules/sd_models.py @@ -17,7 +17,7 @@ from modules.shared_helpers import walk_files from modules.modeldata import model_data from modules.sd_checkpoint import CheckpointInfo, select_checkpoint, list_models, checkpoint_titles, get_closest_checkpoint_match # pylint: disable=unused-import from modules.sd_offload import get_module_names, disable_offload, set_diffuser_offload, apply_balanced_offload, set_accelerate # pylint: disable=unused-import -from modules.sd_models_utils import NoWatermark, get_signature, path_to_repo, apply_function_to_model # pylint: disable=unused-import +from modules.sd_models_utils import NoWatermark, get_signature, path_to_repo, apply_function_to_model, read_state_dict # pylint: disable=unused-import model_dir = "Stable-diffusion" diff --git a/modules/shared.py b/modules/shared.py index 5445ca701..9431511b2 100644 --- a/modules/shared.py +++ b/modules/shared.py @@ -14,8 +14,8 @@ log.debug('Initializing: shared module') import modules.memmon import modules.paths as paths -from modules.json_helpers import readfile # pylint: disable=W0611 -from modules.shared_helpers import listdir # pylint: disable=W0611 +from modules.json_helpers import readfile # pylint: disable=unused-import +from modules.shared_helpers import listdir, req # pylint: disable=unused-import from modules import errors, devices, shared_state, cmd_args, history, files_cache # pylint: disable=unused-import from modules.shared_defaults import get_default_modes from modules.memstats import memory_stats # pylint: disable=unused-import diff --git a/modules/ui_extra_networks_checkpoints.py b/modules/ui_extra_networks_checkpoints.py index de5b0c319..1b9427ed4 100644 --- a/modules/ui_extra_networks_checkpoints.py +++ b/modules/ui_extra_networks_checkpoints.py @@ -3,7 +3,7 @@ import html import json import concurrent.futures from datetime import datetime -from modules import shared, ui_extra_networks, sd_models, modelstats, paths, devices +from modules import shared, ui_extra_networks, sd_models, sd_checkpoint, modelstats, paths, devices from modules.logger import log from modules.json_helpers import readfile @@ -32,7 +32,7 @@ class ExtraNetworksPageCheckpoints(ui_extra_networks.ExtraNetworksPage): shared.refresh_checkpoints() def list_reference(self): # pylint: disable=inconsistent-return-statements - existing = [model.filename if model.type == 'safetensors' else model.name for model in sd_models.checkpoints_list.values()] + existing = [model.filename if model.type == 'safetensors' else model.name for model in sd_checkpoint.checkpoints_list.values()] def reference_downloaded(url): url = url.split('@')[0] if '@' in url else 'Diffusers/' + url @@ -131,7 +131,7 @@ class ExtraNetworksPageCheckpoints(ui_extra_networks.ExtraNetworksPage): def create_item(self, name): record = None try: - checkpoint: sd_models.CheckpointInfo = sd_models.checkpoints_list.get(name) + checkpoint: sd_checkpoint.CheckpointInfo = sd_checkpoint.checkpoints_list.get(name) size, mtime = modelstats.stat(checkpoint.filename) record = { "type": 'Model', @@ -168,7 +168,7 @@ class ExtraNetworksPageCheckpoints(ui_extra_networks.ExtraNetworksPage): def list_items(self): items = [] with concurrent.futures.ThreadPoolExecutor(max_workers=shared.max_workers) as executor: - future_items = {executor.submit(self.create_item, cp): cp for cp in list(sd_models.checkpoints_list.copy())} + future_items = {executor.submit(self.create_item, cp): cp for cp in list(sd_checkpoint.checkpoints_list.copy())} for future in concurrent.futures.as_completed(future_items): item = future.result() if item is not None: diff --git a/modules/ui_models.py b/modules/ui_models.py index 57f621154..c07c16ec7 100644 --- a/modules/ui_models.py +++ b/modules/ui_models.py @@ -3,7 +3,7 @@ import inspect from html import escape from typing import cast import gradio as gr -from modules import errors, sd_models, sd_vae, extras, sd_samplers, ui_symbols, modelstats +from modules import errors, sd_models, sd_checkpoint, sd_vae, extras, sd_samplers, ui_symbols, modelstats from modules.ui_components import ToolButton from modules.ui_common import create_refresh_button from modules.call_queue import wrap_gradio_gpu_call @@ -24,12 +24,12 @@ def get_folder_size(folder): def update_model_hashes(): - from modules import sd_unet, sd_checkpoint + from modules import sd_unet unets = {} for k, v in sd_unet.unet_dict.items(): unets[k] = sd_checkpoint.CheckpointInfo(name=k, filename=v, model_type='unet') - yield from sd_models.update_model_hashes(unets, model_type='unet') - yield from sd_models.update_model_hashes(model_type='checkpoint') + yield from sd_checkpoint.update_model_hashes(unets, model_type='unet') + yield from sd_checkpoint.update_model_hashes(model_type='checkpoint') def create_models_table(rows: list = []): @@ -181,7 +181,7 @@ def create_ui(): model_table = gr.HTML(value=create_models_table(), elem_id="model_list_table", elem_classes="scroll-auto") model_checkhash_btn.click(fn=update_model_hashes, inputs=[], outputs=[model_table]) - model_list_btn.click(fn=lambda: create_models_table(list(sd_models.checkpoints_list.values())), inputs=[], outputs=[model_table]) + model_list_btn.click(fn=lambda: create_models_table(list(sd_checkpoint.checkpoints_list.values())), inputs=[], outputs=[model_table]) with gr.Tab(label="Cache List", elem_id="models_cache_tab"): with gr.Row(): diff --git a/pyproject.toml b/pyproject.toml index de1c4b741..2b2b771ac 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,7 +15,7 @@ exclude = [ ".vscode", ".ruff_cache", "__pycache__", - "node_modules", + "**/node_modules", "modules/teacache", "modules/sharpfin", "modules/seedvr/src", @@ -115,6 +115,7 @@ main.ignore-paths=[ ".ruff_cache", ".vscode", "venv", + ".*/node_modules/.*", "modules/apg", "modules/cfgzero", "modules/control/proc", @@ -141,7 +142,6 @@ main.ignore-paths=[ "modules/taesd", "modules/teacache", "modules/todo", - "node_modules", "pipelines/bria", "pipelines/chrono", "pipelines/f_lite", @@ -373,8 +373,8 @@ include = [ exclude = [ "**/.*", ".git/", - "**/node_modules", "**/__pycache__", + "**/node_modules", "venv", ] extraPaths = [ @@ -398,19 +398,17 @@ include = [ "extensions-builtin/**/*.py" ] exclude = [ - "venv/", + "**/.*", "*.git/", + "**/__pycache__", + "**/node_modules", + "venv/", ] [tool.ty.rules] invalid-method-override = "ignore" invalid-argument-type = "ignore" -unresolved-import = "ignore" unresolved-attribute = "ignore" invalid-assignment = "ignore" -unsupported-operator = "ignore" no-matching-overload = "ignore" unsupported-base = "ignore" -possibly-missing-attribute = "ignore" -invalid-parameter-default = "ignore" -call-non-callable = "ignore" diff --git a/scripts/xyz/xyz_grid_classes.py b/scripts/xyz/xyz_grid_classes.py index c13016ba4..d8a220dce 100644 --- a/scripts/xyz/xyz_grid_classes.py +++ b/scripts/xyz/xyz_grid_classes.py @@ -39,7 +39,7 @@ from scripts.xyz.xyz_grid_shared import ( # pylint: disable=no-name-in-module, u format_nothing, str_permutations, ) -from modules import shared, shared_items, sd_samplers, ipadapter, sd_models, sd_vae, sd_unet +from modules import shared, shared_items, sd_samplers, ipadapter, sd_models, sd_vae, sd_unet, sd_checkpoint from modules.control.units import controlnet, t2iadapter from modules.control import processor @@ -191,10 +191,10 @@ class SharedSettingsStackHelper(): axis_options = [ AxisOption("Nothing", str, do_nothing, fmt=format_nothing), - AxisOption("[Model] Model", str, apply_checkpoint, cost=1.0, fmt=format_value_add_label, choices=lambda: sorted(sd_models.checkpoints_list)), + AxisOption("[Model] Model", str, apply_checkpoint, cost=1.0, fmt=format_value_add_label, choices=lambda: sorted(sd_checkpoint.checkpoints_list)), AxisOption("[Model] UNET", str, apply_unet, cost=0.8, choices=lambda: ['None'] + list(sd_unet.unet_dict)), AxisOption("[Model] VAE", str, apply_vae, cost=0.6, choices=lambda: ['None'] + list(sd_vae.vae_dict)), - AxisOption("[Model] Refiner", str, apply_refiner, cost=0.8, fmt=format_value_add_label, choices=lambda: ['None'] + sorted(sd_models.checkpoints_list)), + AxisOption("[Model] Refiner", str, apply_refiner, cost=0.8, fmt=format_value_add_label, choices=lambda: ['None'] + sorted(sd_checkpoint.checkpoints_list)), AxisOption("[Model] Text encoder", str, apply_te, cost=0.7, choices=shared_items.sd_te_items), AxisOption("[Prompt] Search & replace", str, apply_prompt_primary, fmt=format_value_add_label), AxisOption("[Prompt] Search & replace refine", str, apply_prompt_refine, fmt=format_value_add_label),