diff --git a/Makefile b/Makefile index 2473dd2..d92bbff 100644 --- a/Makefile +++ b/Makefile @@ -31,7 +31,7 @@ lint: ## Run the linter .PHONY: test test: ## Run the unit tests $(info Running tests...) - pytest --pspec --cov=cldk --cov-fail-under=70 --disable-warnings + pytest --pspec --cov=cldk --cov-fail-under=75 --disable-warnings ##@ Build diff --git a/cldk/analysis/c/c_analysis.py b/cldk/analysis/c/c_analysis.py index 00b0288..8461913 100644 --- a/cldk/analysis/c/c_analysis.py +++ b/cldk/analysis/c/c_analysis.py @@ -18,11 +18,11 @@ Analysis model for C projects """ +import os from pathlib import Path from typing import Dict, List, Optional import networkx as nx - from cldk.analysis.c.clang import ClangAnalyzer from cldk.models.c import CApplication, CFunction, CTranslationUnit, CMacro, CTypedef, CStruct, CEnum, CVariable @@ -36,7 +36,7 @@ def __init__(self, project_dir: Path) -> None: self.c_application = self._init_application(project_dir) def _init_application(self, project_dir: Path) -> CApplication: - """Initializes the C application object. + """Should initialize the C application object. Args: project_dir (Path): Path to the project directory. @@ -56,7 +56,7 @@ def _init_application(self, project_dir: Path) -> CApplication: return CApplication(translation_units=translation_units) def get_c_application(self) -> CApplication: - """returns the C application object. + """Obtain the C application object. Returns: CApplication: C application object. @@ -90,7 +90,7 @@ def is_parsable(self, source_code: str) -> bool: raise NotImplementedError("Support for this functionality has not been implemented yet.") def get_call_graph(self) -> nx.DiGraph: - """returns the call graph of the C code. + """Should return the call graph of the C code. Returns: nx.DiGraph: The call graph of the C code. @@ -98,7 +98,7 @@ def get_call_graph(self) -> nx.DiGraph: raise NotImplementedError("Support for this functionality has not been implemented yet.") def get_call_graph_json(self) -> str: - """returns a serialized call graph in json. + """Should return a serialized call graph in json. Raises: NotImplementedError: Raised when this functionality is not suported. @@ -110,7 +110,7 @@ def get_call_graph_json(self) -> str: raise NotImplementedError("Producing a call graph over a single file is not implemented yet.") def get_callers(self, function: CFunction) -> Dict: - """returns a dictionary of callers of the target method. + """Should return a dictionary of callers of the target method. Args: function (CFunction): A CFunction object. @@ -125,7 +125,7 @@ def get_callers(self, function: CFunction) -> Dict: raise NotImplementedError("Generating all callers over a single file is not implemented yet.") def get_callees(self, function: CFunction) -> Dict: - """returns a dictionary of callees in a fuction. + """Should return a dictionary of callees in a fuction. Args: function (CFunction): A CFunction object. @@ -139,7 +139,7 @@ def get_callees(self, function: CFunction) -> Dict: raise NotImplementedError("Generating all callees over a single file is not implemented yet.") def get_functions(self) -> Dict[str, CFunction]: - """returns all functions in the project. + """Should return all functions in the project. Raises: NotImplementedError: Raised when current AnalysisEngine does not support this function. @@ -151,7 +151,7 @@ def get_functions(self) -> Dict[str, CFunction]: return translation_unit.functions def get_function(self, function_name: str, file_name: Optional[str]) -> CFunction | List[CFunction]: - """returns a function object given the function name. + """Should return a function object given the function name. Args: function_name (str): The name of the function. @@ -163,7 +163,7 @@ def get_function(self, function_name: str, file_name: Optional[str]) -> CFunctio raise NotImplementedError("Support for this functionality has not been implemented yet.") def get_C_file(self, file_name: str) -> str: - """returns a class given qualified class name. + """Should return a class given qualified class name. Args: file_name (str): The name of the file. @@ -191,7 +191,7 @@ def get_C_compilation_unit(self, file_path: str) -> CTranslationUnit: return self.c_application.translation_units.get(file_path) def get_functions_in_file(self, file_name: str) -> List[CFunction]: - """returns a dictionary of all methods of the given class. + """Should return a dictionary of all methods of the given class. Args: file_name (str): The name of the file. @@ -205,7 +205,7 @@ def get_functions_in_file(self, file_name: str) -> List[CFunction]: raise NotImplementedError("Support for this functionality has not been implemented yet.") def get_macros(self) -> List[CMacro]: - """returns a list of all macros in the C code. + """Should return a list of all macros in the C code. Raises: NotImplementedError: Raised when current AnalysisEngine does not support this function. @@ -216,7 +216,7 @@ def get_macros(self) -> List[CMacro]: raise NotImplementedError("Support for this functionality has not been implemented yet.") def get_macros_in_file(self, file_name: str) -> List[CMacro] | None: - """returns a list of all macros in the given file. + """Should return a list of all macros in the given file. Args: file_name (str): The name of the file. @@ -231,7 +231,7 @@ def get_macros_in_file(self, file_name: str) -> List[CMacro] | None: def get_includes(self) -> List[str]: - """returns a list of all include statements across all files in the C code. + """Should return a list of all include statements across all files in the C code. Returns: List[str]: A list of all include statements. Returns empty list if none found. @@ -243,7 +243,7 @@ def get_includes(self) -> List[str]: def get_includes_in_file(self, file_name: str) -> List[str] | None: - """returns a list of all include statements in the given file. + """Should return a list of all include statements in the given file. Args: file_name (str): The name of the file to search in. @@ -257,7 +257,7 @@ def get_includes_in_file(self, file_name: str) -> List[str] | None: def get_macros(self) -> List[CMacro]: - """returns a list of all macro definitions across all files in the C code. + """Should return a list of all macro definitions across all files in the C code. Returns: List[CMacro]: A list of all macro definitions. Returns empty list if none found. @@ -269,7 +269,7 @@ def get_macros(self) -> List[CMacro]: def get_macros_in_file(self, file_name: str) -> List[CMacro] | None: - """returns a list of all macro definitions in the given file. + """Should return a list of all macro definitions in the given file. Args: file_name (str): The name of the file to search in. @@ -283,7 +283,7 @@ def get_macros_in_file(self, file_name: str) -> List[CMacro] | None: def get_typedefs(self) -> List[CTypedef]: - """returns a list of all typedef declarations across all files in the C code. + """Should return a list of all typedef declarations across all files in the C code. Returns: List[CTypedef]: A list of all typedef declarations. Returns empty list if none found. @@ -295,7 +295,7 @@ def get_typedefs(self) -> List[CTypedef]: def get_typedefs_in_file(self, file_name: str) -> List[CTypedef] | None: - """returns a list of all typedef declarations in the given file. + """Should return a list of all typedef declarations in the given file. Args: file_name (str): The name of the file to search in. @@ -309,7 +309,7 @@ def get_typedefs_in_file(self, file_name: str) -> List[CTypedef] | None: def get_structs(self) -> List[CStruct]: - """returns a list of all struct/union declarations across all files in the C code. + """Should return a list of all struct/union declarations across all files in the C code. Returns: List[CStruct]: A list of all struct/union declarations. Returns empty list if none found. @@ -321,7 +321,7 @@ def get_structs(self) -> List[CStruct]: def get_structs_in_file(self, file_name: str) -> List[CStruct] | None: - """returns a list of all struct/union declarations in the given file. + """Should return a list of all struct/union declarations in the given file. Args: file_name (str): The name of the file to search in. @@ -335,7 +335,7 @@ def get_structs_in_file(self, file_name: str) -> List[CStruct] | None: def get_enums(self) -> List[CEnum]: - """returns a list of all enum declarations across all files in the C code. + """Should return a list of all enum declarations across all files in the C code. Returns: List[CEnum]: A list of all enum declarations. Returns empty list if none found. @@ -347,7 +347,7 @@ def get_enums(self) -> List[CEnum]: def get_enums_in_file(self, file_name: str) -> List[CEnum] | None: - """returns a list of all enum declarations in the given file. + """Should return a list of all enum declarations in the given file. Args: file_name (str): The name of the file to search in. @@ -361,7 +361,7 @@ def get_enums_in_file(self, file_name: str) -> List[CEnum] | None: def get_globals(self, file_name: str) -> List[CVariable] | None: - """returns a list of all global variable declarations in the given file. + """Should return a list of all global variable declarations in the given file. Args: file_name (str): The name of the file to search in. diff --git a/cldk/analysis/c/clang/clang_analyzer.py b/cldk/analysis/c/clang/clang_analyzer.py index 13672fa..3ce57cd 100644 --- a/cldk/analysis/c/clang/clang_analyzer.py +++ b/cldk/analysis/c/clang/clang_analyzer.py @@ -1,4 +1,5 @@ import os +from pdb import set_trace import platform from clang.cindex import Config from pathlib import Path @@ -12,68 +13,34 @@ # First, we only import Config from clang.cindex from clang.cindex import Config - - -def find_libclang() -> str: - """ - Locates the libclang library on the system based on the operating system. - This function runs before any other Clang functionality is used, ensuring - proper initialization of the Clang environment. - """ - system = platform.system() - - # On macOS, we check both Apple Silicon and Intel paths - if system == "Darwin": - possible_paths = [ - "/opt/homebrew/opt/llvm/lib/libclang.dylib", # Apple Silicon - "/usr/local/opt/llvm/lib/libclang.dylib", # Intel Mac - "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/libclang.dylib", - ] - install_instructions = "Install LLVM using: brew install llvm" - - # On Linux, we check various common installation paths - elif system == "Linux": - from pathlib import Path - - lib_paths = [Path("/usr/lib"), Path("/usr/lib64")] - possible_paths = [ - str(p) for base in lib_paths if base.exists() - for p in base.rglob("libclang*.so*") - ] - - install_instructions = "Install libclang development package using your system's package manager" - else: - raise RuntimeError(f"Unsupported operating system: {system}") - - # Check each possible path and return the first one that exists - for path in possible_paths: - if os.path.exists(path): - logger.info(f"Found libclang at: {path}") - return path - - # If no library is found, provide clear installation instructions - raise RuntimeError(f"Could not find libclang library. \n" f"Please ensure LLVM is installed:\n{install_instructions}") - - -# Initialize libclang at module level -try: - libclang_path = find_libclang() - Config.set_library_file(libclang_path) - logger.info("Successfully initialized libclang") - - # Now that libclang is initialized, we can safely import other Clang components - from clang.cindex import Index, TranslationUnit, CursorKind, TypeKind, CompilationDatabase - -except Exception as e: - logger.error(f"Failed to initialize libclang: {e}") - raise +from clang.cindex import Index, TranslationUnit, CursorKind, TypeKind, CompilationDatabase class ClangAnalyzer: """Analyzes C code using Clang's Python bindings.""" def __init__(self, compilation_database_path: Optional[Path] = None): - # Configure Clang before creating the Index + # # Let's turn off Address sanitization for parsing code + # # Initialize libclang at module level + # try: + if platform.system() == "Darwin": + possible_paths = [ + "/opt/homebrew/opt/llvm/lib/libclang.dylib", # Apple Silicon + "/usr/local/opt/llvm/lib/libclang.dylib", # Intel Mac + "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/libclang.dylib", + ] + + # We could not find libclang. Raise an error and provide instructions. + if len(possible_paths) == 0: + raise RuntimeError("Install LLVM 18 using: brew install llvm@18") + + # Check each possible path and return the first one that exists + for path in possible_paths: + if os.path.exists(path): + logger.info(f"Found libclang at: {path}") + # Configure Clang before creating the Index + Config.set_library_file(path) + self.index = Index.create() self.compilation_database = None # TODO: Implement compilation database for C/C++ projects so that we can get compile arguments for each file @@ -81,6 +48,44 @@ def __init__(self, compilation_database_path: Optional[Path] = None): if compilation_database_path: self.compilation_database = CompilationDatabase.fromDirectory(str(compilation_database_path)) + def __find_libclang(self) -> str: + """ + Locates the libclang library on the system based on the operating system. + This function runs before any other Clang functionality is used, ensuring + proper initialization of the Clang environment. + """ + + system = platform.system() + + # On macOS, we check both Apple Silicon and Intel paths + if system == "Darwin": + possible_paths = [ + "/opt/homebrew/opt/llvm/lib/libclang.dylib", # Apple Silicon + "/usr/local/opt/llvm/lib/libclang.dylib", # Intel Mac + "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/libclang.dylib", + ] + install_instructions = "Install LLVM using: brew install llvm" + + # On Linux, we check various common installation paths + elif system == "Linux": + from pathlib import Path + + lib_paths = [Path("/usr/lib"), Path("/usr/lib64")] + possible_paths = [str(p) for base in lib_paths if base.exists() for p in base.rglob("libclang*.so.17*")] + print(possible_paths) + install_instructions = "Install libclang development package using your system's package manager" + else: + raise RuntimeError(f"Unsupported operating system: {system}") + + # Check each possible path and return the first one that exists + for path in possible_paths: + if os.path.exists(path): + logger.info(f"Found libclang at: {path}") + return path + + # If no library is found, provide clear installation instructions + raise RuntimeError(f"Could not find libclang library. \n" f"Please ensure LLVM is installed:\n{install_instructions}") + def analyze_file(self, file_path: Path) -> CTranslationUnit: """Analyzes a single C source file using Clang.""" @@ -105,7 +110,7 @@ def analyze_file(self, file_path: Path) -> CTranslationUnit: return translation_unit def _process_translation_unit(self, cursor, translation_unit: CTranslationUnit): - """Processes all declarations in a translation unit.""" + """Should process all declarations in a translation unit.""" for child in cursor.get_children(): if child.location.file and str(child.location.file) != translation_unit.file_path: diff --git a/cldk/analysis/java/codeanalyzer/codeanalyzer.py b/cldk/analysis/java/codeanalyzer/codeanalyzer.py index 76b2fe4..bafafb5 100644 --- a/cldk/analysis/java/codeanalyzer/codeanalyzer.py +++ b/cldk/analysis/java/codeanalyzer/codeanalyzer.py @@ -112,7 +112,7 @@ def __init__( self.call_graph: nx.DiGraph | None = None def _get_application(self) -> JApplication: - """returns the application view of the Java code. + """Should return the application view of the Java code. Returns: JApplication: The application view of the Java code. @@ -122,7 +122,7 @@ def _get_application(self) -> JApplication: return self.application def _get_codeanalyzer_exec(self) -> List[str]: - """returns the executable command for codeanalyzer. + """Should return the executable command for codeanalyzer. Returns: List[str]: The executable command for codeanalyzer. @@ -153,7 +153,7 @@ def _get_codeanalyzer_exec(self) -> List[str]: @staticmethod def _init_japplication(data: str) -> JApplication: - """return JApplication giving the stringified JSON as input. + """Should return JApplication giving the stringified JSON as input. Returns ------- JApplication @@ -165,7 +165,7 @@ def _init_japplication(data: str) -> JApplication: return JApplication(**json.loads(data)) def _init_codeanalyzer(self, analysis_level=1) -> JApplication: - """Initializes the Codeanalyzer. + """Should initialize the Codeanalyzer. Args: analysis_level (int): The level of analysis to be performed (1 for symbol table, 2 for call graph). @@ -254,7 +254,7 @@ def _codeanalyzer_single_file(self) -> JApplication: raise CodeanalyzerExecutionException(str(e)) from e def get_symbol_table(self) -> Dict[str, JCompilationUnit]: - """returns the symbol table of the Java code. + """Should return the symbol table of the Java code. Returns: Dict[str, JCompilationUnit]: The symbol table of the Java code. @@ -264,7 +264,7 @@ def get_symbol_table(self) -> Dict[str, JCompilationUnit]: return self.application.symbol_table def get_application_view(self) -> JApplication: - """returns the application view of the Java code. + """Should return the application view of the Java code. Returns: JApplication: The application view of the Java code. @@ -334,14 +334,14 @@ def _generate_call_graph(self, using_symbol_table) -> nx.DiGraph: return cg def get_class_hierarchy(self) -> nx.DiGraph: - """returns the class hierarchy of the Java code. + """Should return the class hierarchy of the Java code. Returns: nx.DiGraph: The class hierarchy of the Java code. """ def get_call_graph(self) -> nx.DiGraph: - """returns the call graph of the Java code. + """Should return the call graph of the Java code. Returns: nx.DiGraph: The call graph of the Java code. @@ -439,7 +439,7 @@ def get_all_callees(self, source_class_name: str, source_method_signature: str, return callee_detail_dict def get_all_methods_in_application(self) -> Dict[str, Dict[str, JCallable]]: - """returns a dictionary of all methods in the Java code with qualified class name as the key + """Should return a dictionary of all methods in the Java code with qualified class name as the key and a dictionary of methods in that class as the value. Returns: @@ -453,7 +453,7 @@ def get_all_methods_in_application(self) -> Dict[str, Dict[str, JCallable]]: return class_method_dict def get_all_classes(self) -> Dict[str, JType]: - """returns a dictionary of all classes in the Java code. + """Should return a dictionary of all classes in the Java code. Returns: Dict[str, JType]: A dictionary of all classes in the Java code, with qualified class names as keys. @@ -466,7 +466,7 @@ def get_all_classes(self) -> Dict[str, JType]: return class_dict def get_class(self, qualified_class_name) -> JType: - """returns a class given the qualified class name. + """Should return a class given the qualified class name. Args: qualified_class_name (str): The qualified name of the class. @@ -480,7 +480,7 @@ def get_class(self, qualified_class_name) -> JType: return v.type_declarations.get(qualified_class_name) def get_method(self, qualified_class_name, method_signature) -> JCallable: - """returns a method given the qualified method name. + """Should return a method given the qualified method name. Args: qualified_class_name (str): The qualified name of the class. @@ -498,7 +498,7 @@ def get_method(self, qualified_class_name, method_signature) -> JCallable: return ci.callable_declarations[cd] def get_java_file(self, qualified_class_name) -> str: - """returns java file name given the qualified class name. + """Should return java file name given the qualified class name. Args: qualified_class_name (str): The qualified name of the class. @@ -526,7 +526,7 @@ def get_java_compilation_unit(self, file_path: str) -> JCompilationUnit: return self.application.symbol_table[file_path] def get_all_methods_in_class(self, qualified_class_name) -> Dict[str, JCallable]: - """returns a dictionary of all methods in the given class. + """Should return a dictionary of all methods in the given class. Args: qualified_class_name (str): The qualified name of the class. @@ -541,7 +541,7 @@ def get_all_methods_in_class(self, qualified_class_name) -> Dict[str, JCallable] return methods def get_all_constructors(self, qualified_class_name) -> Dict[str, JCallable]: - """returns a dictionary of all constructors of the given class. + """Should return a dictionary of all constructors of the given class. Args: qualified_class_name (str): The qualified name of the class. @@ -556,7 +556,7 @@ def get_all_constructors(self, qualified_class_name) -> Dict[str, JCallable]: return constructors def get_all_sub_classes(self, qualified_class_name) -> Dict[str, JType]: - """returns a dictionary of all sub-classes of the given class. + """Should return a dictionary of all sub-classes of the given class. Args: qualified_class_name (str): The qualified name of the class. @@ -573,7 +573,7 @@ def get_all_sub_classes(self, qualified_class_name) -> Dict[str, JType]: return sub_classes def get_all_fields(self, qualified_class_name) -> List[JField]: - """returns a list of all fields of the given class. + """Should return a list of all fields of the given class. Args: qualified_class_name (str): The qualified name of the class. @@ -588,7 +588,7 @@ def get_all_fields(self, qualified_class_name) -> List[JField]: return ci.field_declarations def get_all_nested_classes(self, qualified_class_name) -> List[JType]: - """returns a list of all nested classes for the given class. + """Should return a list of all nested classes for the given class. Args: qualified_class_name (str): The qualified name of the class. @@ -604,7 +604,7 @@ def get_all_nested_classes(self, qualified_class_name) -> List[JType]: return [self.get_class(c) for c in nested_classes] # Assuming qualified nested class names def get_extended_classes(self, qualified_class_name) -> List[str]: - """returns a list of all extended classes for the given class. + """Should return a list of all extended classes for the given class. Args: qualified_class_name (str): The qualified name of the class. @@ -619,7 +619,7 @@ def get_extended_classes(self, qualified_class_name) -> List[str]: return ci.extends_list def get_implemented_interfaces(self, qualified_class_name) -> List[str]: - """returns a list of all implemented interfaces for the given class. + """Should return a list of all implemented interfaces for the given class. Args: qualified_class_name (str): The qualified name of the class. @@ -634,7 +634,7 @@ def get_implemented_interfaces(self, qualified_class_name) -> List[str]: return ci.implements_list def get_class_call_graph_using_symbol_table(self, qualified_class_name: str, method_signature: str | None = None) -> (List)[Tuple[JMethodDetail, JMethodDetail]]: - """returns call graph using symbol table. The analysis will not be + """Should return call graph using symbol table. The analysis will not be complete as symbol table has known limitation of resolving types Args: qualified_class_name: qualified name of the class @@ -657,7 +657,7 @@ def get_class_call_graph_using_symbol_table(self, qualified_class_name: str, met return graph_edges def __call_graph_using_symbol_table(self, qualified_class_name: str, method_signature: str, is_target_method: bool = False) -> nx.DiGraph: - """Generate call graph using symbol table + """Should generate call graph using symbol table Args: qualified_class_name: qualified class name method_signature: method signature @@ -871,7 +871,7 @@ def remove_all_comments(self, src_code: str) -> str: raise NotImplementedError("This function is not implemented yet.") def get_all_entry_point_methods(self) -> Dict[str, Dict[str, JCallable]]: - """returns a dictionary of all entry point methods in the Java code. + """Should return a dictionary of all entry point methods in the Java code. Returns: Dict[str, Dict[str, JCallable]]: A dictionary of all entry point methods in the Java code. @@ -882,7 +882,7 @@ def get_all_entry_point_methods(self) -> Dict[str, Dict[str, JCallable]]: return {typename: {method: callable for _, method, callable in group} for typename, group in groupby(methods, key=lambda x: x[0])} def get_all_entry_point_classes(self) -> Dict[str, JType]: - """returns a dictionary of all entry point classes in the Java code. + """Should return a dictionary of all entry point classes in the Java code. Returns: Dict[str, JType]: A dictionary of all entry point classes in the Java code, @@ -892,7 +892,7 @@ def get_all_entry_point_classes(self) -> Dict[str, JType]: return {typename: klass for typename, klass in self.get_all_classes().items() if klass.is_entrypoint_class} def get_all_crud_operations(self) -> List[Dict[str, Union[JType, JCallable, List[JCRUDOperation]]]]: - """returns a dictionary of all CRUD operations in the source code. + """Should return a dictionary of all CRUD operations in the source code. Raises: NotImplementedError: Raised when current AnalysisEngine does not support this function. @@ -909,7 +909,7 @@ def get_all_crud_operations(self) -> List[Dict[str, Union[JType, JCallable, List return crud_operations def get_all_read_operations(self) -> List[Dict[str, Union[JType, JCallable, List[JCRUDOperation]]]]: - """returns a list of all read operations in the source code. + """Should return a list of all read operations in the source code. Raises: NotImplementedError: Raised when current AnalysisEngine does not support this function. @@ -931,7 +931,7 @@ def get_all_read_operations(self) -> List[Dict[str, Union[JType, JCallable, List return crud_read_operations def get_all_create_operations(self) -> List[Dict[str, Union[JType, JCallable, List[JCRUDOperation]]]]: - """returns a list of all create operations in the source code. + """Should return a list of all create operations in the source code. Raises: NotImplementedError: Raised when current AnalysisEngine does not support this function. @@ -953,7 +953,7 @@ def get_all_create_operations(self) -> List[Dict[str, Union[JType, JCallable, Li return crud_create_operations def get_all_update_operations(self) -> List[Dict[str, Union[JType, JCallable, List[JCRUDOperation]]]]: - """returns a list of all update operations in the source code. + """Should return a list of all update operations in the source code. Raises: NotImplementedError: Raised when current AnalysisEngine does not support this function. @@ -976,7 +976,7 @@ def get_all_update_operations(self) -> List[Dict[str, Union[JType, JCallable, Li return crud_update_operations def get_all_delete_operations(self) -> List[Dict[str, Union[JType, JCallable, List[JCRUDOperation]]]]: - """returns a list of all delete operations in the source code. + """Should return a list of all delete operations in the source code. Raises: NotImplementedError: Raised when current AnalysisEngine does not support this function. diff --git a/cldk/analysis/java/codeql/codeql.py b/cldk/analysis/java/codeql/codeql.py index fba7a11..352df2e 100644 --- a/cldk/analysis/java/codeql/codeql.py +++ b/cldk/analysis/java/codeql/codeql.py @@ -74,7 +74,7 @@ def __init__(self, project_dir: Union[str, Path], codeql_db: Union[str, Path, No @staticmethod def _init_codeql_db(project_dir: Union[str, Path], codeql_db: Union[str, Path, None]) -> Path: - """Initializes the CodeQL database. + """Should initialize the CodeQL database. Parameters ---------- diff --git a/cldk/analysis/java/java_analysis.py b/cldk/analysis/java/java_analysis.py index 92c4972..a95557f 100644 --- a/cldk/analysis/java/java_analysis.py +++ b/cldk/analysis/java/java_analysis.py @@ -95,7 +95,7 @@ def __init__( raise NotImplementedError(f"Support for {analysis_backend} has not been implemented yet.") def get_imports(self) -> List[str]: - """returns all the imports in the source code. + """Should return all the imports in the source code. Raises: NotImplementedError: Raised when this functionality is not suported. @@ -114,7 +114,7 @@ def get_variables(self, **kwargs): raise NotImplementedError("Support for this functionality has not been implemented yet.") def get_service_entry_point_classes(self, **kwargs): - """returns all service entry point classes. + """Should return all service entry point classes. Raises: NotImplementedError: Raised when this functionality is not suported. @@ -122,7 +122,7 @@ def get_service_entry_point_classes(self, **kwargs): raise NotImplementedError("Support for this functionality has not been implemented yet.") def get_service_entry_point_methods(self, **kwargs): - """returns all the service entry point methods. + """Should return all the service entry point methods. Raises: NotImplementedError: Raised when this functionality is not suported. @@ -130,7 +130,7 @@ def get_service_entry_point_methods(self, **kwargs): raise NotImplementedError("Support for this functionality has not been implemented yet.") def get_application_view(self) -> JApplication: - """returns application view of the java code. + """Should return application view of the java code. Raises: NotImplementedError: Raised when this functionality is not suported. @@ -143,7 +143,7 @@ def get_application_view(self) -> JApplication: return self.backend.get_application_view() def get_symbol_table(self) -> Dict[str, JCompilationUnit]: - """returns symbol table. + """Should return symbol table. Returns: Dict[str, JCompilationUnit]: Symbol table @@ -151,7 +151,7 @@ def get_symbol_table(self) -> Dict[str, JCompilationUnit]: return self.backend.get_symbol_table() def get_compilation_units(self) -> List[JCompilationUnit]: - """returns a list of all compilation units in the java code. + """Should return a list of all compilation units in the java code. Raises: NotImplementedError: Raised when this functionality is not supported. @@ -170,7 +170,7 @@ def get_compilation_units(self) -> List[JCompilationUnit]: raise NotImplementedError("Support for this functionality has not been implemented yet.") def get_class_hierarchy(self) -> nx.DiGraph: - """returns class hierarchy of the java code. + """Should return class hierarchy of the java code. Raises: NotImplementedError: Raised when this functionality is not suported. @@ -206,7 +206,7 @@ def get_raw_ast(self, source_code: str) -> Tree: return JavaSitter().get_raw_ast(source_code) def get_call_graph(self) -> nx.DiGraph: - """returns the call graph of the Java code. + """Should return the call graph of the Java code. Returns: nx.DiGraph: The call graph of the Java code. @@ -214,7 +214,7 @@ def get_call_graph(self) -> nx.DiGraph: return self.backend.get_call_graph() def get_call_graph_json(self) -> str: - """returns a serialized call graph in json. + """Should return a serialized call graph in json. Raises: NotImplementedError: Raised when this functionality is not suported. @@ -227,7 +227,7 @@ def get_call_graph_json(self) -> str: return self.backend.get_call_graph_json() def get_callers(self, target_class_name: str, target_method_declaration: str, using_symbol_table: bool = False) -> Dict: - """returns a dictionary of callers of the target method. + """Should return a dictionary of callers of the target method. Args: target_class_name (str): Qualified target class name. @@ -246,7 +246,7 @@ def get_callers(self, target_class_name: str, target_method_declaration: str, us return self.backend.get_all_callers(target_class_name, target_method_declaration, using_symbol_table) def get_callees(self, source_class_name: str, source_method_declaration: str, using_symbol_table: bool = False) -> Dict: - """returns a dictionary of callees by the given method in the given class. + """Should return a dictionary of callees by the given method in the given class. Args: source_class_name (str): Qualified class name where the given method is. @@ -264,7 +264,7 @@ def get_callees(self, source_class_name: str, source_method_declaration: str, us return self.backend.get_all_callees(source_class_name, source_method_declaration, using_symbol_table) def get_methods(self) -> Dict[str, Dict[str, JCallable]]: - """returns all methods in the Java code. + """Should return all methods in the Java code. Raises: NotImplementedError: Raised when current AnalysisEngine does not support this function. @@ -277,7 +277,7 @@ def get_methods(self) -> Dict[str, Dict[str, JCallable]]: return self.backend.get_all_methods_in_application() def get_classes(self) -> Dict[str, JType]: - """returns all classes in the Java code. + """Should return all classes in the Java code. Raises: NotImplementedError: Raised when current AnalysisEngine does not support this function. @@ -290,7 +290,7 @@ def get_classes(self) -> Dict[str, JType]: return self.backend.get_all_classes() def get_classes_by_criteria(self, inclusions=None, exclusions=None) -> Dict[str, JType]: - """returns a dictionary of all classes with the given criteria, in the Java code. + """Should return a dictionary of all classes with the given criteria, in the Java code. Args: inclusions (List, optional): inlusion criteria for the classes. Defaults to None. @@ -326,7 +326,7 @@ def get_classes_by_criteria(self, inclusions=None, exclusions=None) -> Dict[str, return class_dict def get_class(self, qualified_class_name: str) -> JType: - """returns a class object given qualified class name. + """Should return a class object given qualified class name. Args: qualified_class_name (str): The qualified name of the class. @@ -343,7 +343,7 @@ def get_class(self, qualified_class_name: str) -> JType: return self.backend.get_class(qualified_class_name) def get_method(self, qualified_class_name: str, qualified_method_name: str) -> JCallable: - """returns a method object given qualified class and method names. + """Should return a method object given qualified class and method names. Args: qualified_class_name (str): The qualified name of the class. @@ -360,7 +360,7 @@ def get_method(self, qualified_class_name: str, qualified_method_name: str) -> J return self.backend.get_method(qualified_class_name, qualified_method_name) def get_java_file(self, qualified_class_name: str) -> str: - """returns a class given qualified class name. + """Should return a class given qualified class name. Args: qualified_class_name (str): The qualified name of the class. @@ -392,7 +392,7 @@ def get_java_compilation_unit(self, file_path: str) -> JCompilationUnit: return self.backend.get_java_compilation_unit(file_path) def get_methods_in_class(self, qualified_class_name) -> Dict[str, JCallable]: - """returns a dictionary of all methods of the given class. + """Should return a dictionary of all methods of the given class. Args: qualified_class_name (str): qualified class name @@ -408,7 +408,7 @@ def get_methods_in_class(self, qualified_class_name) -> Dict[str, JCallable]: return self.backend.get_all_methods_in_class(qualified_class_name) def get_constructors(self, qualified_class_name) -> Dict[str, JCallable]: - """returns a dictionary of all constructors of the given class. + """Should return a dictionary of all constructors of the given class. Args: qualified_class_name (str): qualified class name @@ -424,7 +424,7 @@ def get_constructors(self, qualified_class_name) -> Dict[str, JCallable]: return self.backend.get_all_constructors(qualified_class_name) def get_fields(self, qualified_class_name) -> List[JField]: - """returns a dictionary of all fields of the given class + """Should return a dictionary of all fields of the given class Args: qualified_class_name (str): qualified class name @@ -440,7 +440,7 @@ def get_fields(self, qualified_class_name) -> List[JField]: return self.backend.get_all_fields(qualified_class_name) def get_nested_classes(self, qualified_class_name) -> List[JType]: - """returns a dictionary of all nested classes of the given class + """Should return a dictionary of all nested classes of the given class Args: qualified_class_name (str): qualified class name @@ -456,7 +456,7 @@ def get_nested_classes(self, qualified_class_name) -> List[JType]: return self.backend.get_all_nested_classes(qualified_class_name) def get_sub_classes(self, qualified_class_name) -> Dict[str, JType]: - """returns a dictionary of all sub-classes of the given class + """Should return a dictionary of all sub-classes of the given class Args: qualified_class_name (str): qualified class name @@ -467,7 +467,7 @@ def get_sub_classes(self, qualified_class_name) -> Dict[str, JType]: return self.backend.get_all_sub_classes(qualified_class_name=qualified_class_name) def get_extended_classes(self, qualified_class_name) -> List[str]: - """returns a list of all extended classes for the given class. + """Should return a list of all extended classes for the given class. Args: qualified_class_name (str): The qualified name of the class. @@ -482,7 +482,7 @@ def get_extended_classes(self, qualified_class_name) -> List[str]: return self.backend.get_extended_classes(qualified_class_name) def get_implemented_interfaces(self, qualified_class_name: str) -> List[str]: - """returns a list of all implemented interfaces for the given class. + """Should return a list of all implemented interfaces for the given class. Args: qualified_class_name (str): The qualified name of the class. @@ -535,7 +535,7 @@ def get_class_call_graph(self, qualified_class_name: str, method_signature: str return self.backend.get_class_call_graph(qualified_class_name, method_signature) def get_entry_point_classes(self) -> Dict[str, JType]: - """returns a dictionary of all entry point classes in the Java code. + """Should return a dictionary of all entry point classes in the Java code. Raises: NotImplementedError: Raised when current AnalysisEngine does not support this function. @@ -548,7 +548,7 @@ def get_entry_point_classes(self) -> Dict[str, JType]: return self.backend.get_all_entry_point_classes() def get_entry_point_methods(self) -> Dict[str, Dict[str, JCallable]]: - """returns a dictionary of all entry point methods in the Java code with qualified class name as key and dictionary of methods in that class as value + """Should return a dictionary of all entry point methods in the Java code with qualified class name as key and dictionary of methods in that class as value Raises: NotImplementedError: Raised when current AnalysisEngine does not support this function. @@ -572,7 +572,7 @@ def remove_all_comments(self) -> str: return self.backend.remove_all_comments(self.source_code) def get_methods_with_annotations(self, annotations: List[str]) -> Dict[str, List[Dict]]: - """returns a dictionary of method names and method bodies. + """Should return a dictionary of method names and method bodies. Args: annotations (List[str]): List of annotation strings. @@ -587,7 +587,7 @@ def get_methods_with_annotations(self, annotations: List[str]) -> Dict[str, List raise NotImplementedError("Support for this functionality has not been implemented yet.") def get_test_methods(self) -> Dict[str, str]: - """returns a dictionary of method names and method bodies. + """Should return a dictionary of method names and method bodies. Args: source_class_code (str): String containing code for a java class. @@ -604,7 +604,7 @@ def get_test_methods(self) -> Dict[str, str]: return self.backend.get_test_methods(self.source_code) def get_calling_lines(self, target_method_name: str) -> List[int]: - """returns a list of line numbers in source method block where target method is called. + """Should return a list of line numbers in source method block where target method is called. Args: target_method_name (str): target method name. @@ -629,7 +629,7 @@ def get_call_targets(self, declared_methods: dict) -> Set[str]: raise NotImplementedError("Support for this functionality has not been implemented yet.") def get_all_crud_operations(self) -> List[Dict[str, Union[JType, JCallable, List[JCRUDOperation]]]]: - """returns a dictionary of all CRUD operations in the source code. + """Should return a dictionary of all CRUD operations in the source code. Returns: List[Dict[str, Union[JType, JCallable, List[JCRUDOperation]]]]: A list of all CRUD operations in the source code. @@ -637,7 +637,7 @@ def get_all_crud_operations(self) -> List[Dict[str, Union[JType, JCallable, List return self.backend.get_all_crud_operations() def get_all_create_operations(self) -> List[Dict[str, Union[JType, JCallable, List[JCRUDOperation]]]]: - """returns a list of all create operations in the source code. + """Should return a list of all create operations in the source code. Returns: List[Dict[str, Union[JType, JCallable, List[JCRUDOperation]]]]: A list of all create operations in the source code. @@ -645,7 +645,7 @@ def get_all_create_operations(self) -> List[Dict[str, Union[JType, JCallable, Li return self.backend.get_all_create_operations() def get_all_read_operations(self) -> List[Dict[str, Union[JType, JCallable, List[JCRUDOperation]]]]: - """returns a list of all read operations in the source code. + """Should return a list of all read operations in the source code. Returns: List[Dict[str, Union[JType, JCallable, List[JCRUDOperation]]]]: A list of all read operations in the source code. @@ -653,7 +653,7 @@ def get_all_read_operations(self) -> List[Dict[str, Union[JType, JCallable, List return self.backend.get_all_read_operations() def get_all_update_operations(self) -> List[Dict[str, Union[JType, JCallable, List[JCRUDOperation]]]]: - """returns a list of all update operations in the source code. + """Should return a list of all update operations in the source code. Returns: List[Dict[str, Union[JType, JCallable, List[JCRUDOperation]]]]: A list of all update operations in the source code. @@ -661,7 +661,7 @@ def get_all_update_operations(self) -> List[Dict[str, Union[JType, JCallable, Li return self.backend.get_all_update_operations() def get_all_delete_operations(self) -> List[Dict[str, Union[JType, JCallable, List[JCRUDOperation]]]]: - """returns a list of all delete operations in the source code. + """Should return a list of all delete operations in the source code. Returns: List[Dict[str, Union[JType, JCallable, List[JCRUDOperation]]]]: A list of all delete operations in the source code. diff --git a/cldk/analysis/java/treesitter/java_sitter.py b/cldk/analysis/java/treesitter/java_sitter.py index 87c5941..3eeb761 100644 --- a/cldk/analysis/java/treesitter/java_sitter.py +++ b/cldk/analysis/java/treesitter/java_sitter.py @@ -229,7 +229,7 @@ def safe_ascend(self, node: Node, ascend_count: int) -> Node: return self.safe_ascend(node.parent, ascend_count - 1) def get_call_targets(self, method_body: str, declared_methods: dict) -> Set[str]: - """Generate a list of call targets from the method body. + """Should generate a list of call targets from the method body. Uses simple name resolution for finding the call targets. Nothing sophisticated here. Just a simple search over the AST. diff --git a/cldk/models/treesitter/models.py b/cldk/models/treesitter/models.py index 59cdb72..9592149 100644 --- a/cldk/models/treesitter/models.py +++ b/cldk/models/treesitter/models.py @@ -66,11 +66,11 @@ def __getitem__(self, index: int) -> Capture: return self.captures[index] def __iter__(self): - """return an iterator over the captures.""" + """Should return an iterator over the captures.""" return iter(self.captures) def __len__(self) -> int: - """return the number of captures.""" + """Should return the number of captures.""" return len(self.captures) def __add__(self, other: "Captures") -> "Captures": diff --git a/poetry.lock b/poetry.lock index 23db83c..8567b65 100644 --- a/poetry.lock +++ b/poetry.lock @@ -500,15 +500,15 @@ files = [ [[package]] name = "clang" -version = "17.0.6" +version = "18.1.8" description = "libclang python bindings" optional = false python-versions = "*" groups = ["main"] markers = "python_version >= \"3.12\" or python_version == \"3.11\"" files = [ - {file = "clang-17.0.6-py3-none-any.whl", hash = "sha256:d05ad6dddc9b360e94b9420e239c639a9117902cce8a57fd288a5226eea3092e"}, - {file = "clang-17.0.6.tar.gz", hash = "sha256:d228511e6a29e866dcbe99e10ed10649317b9b3e636ba805f6867b7afb6e8c44"}, + {file = "clang-18.1.8-py3-none-any.whl", hash = "sha256:2f6a00126743ee23d8fcd2a2338b42ef4d29897f293ee3a1bc4d5925d8ee875c"}, + {file = "clang-18.1.8.tar.gz", hash = "sha256:26d11859bab6da8d1fcdb85a244957f6c129a0cd15da2abca3059b054b87635f"}, ] [[package]] @@ -561,75 +561,76 @@ test = ["pytest"] [[package]] name = "coverage" -version = "7.6.10" +version = "7.6.12" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.9" groups = ["test"] markers = "python_version >= \"3.12\" or python_version == \"3.11\"" files = [ - {file = "coverage-7.6.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5c912978f7fbf47ef99cec50c4401340436d200d41d714c7a4766f377c5b7b78"}, - {file = "coverage-7.6.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a01ec4af7dfeb96ff0078ad9a48810bb0cc8abcb0115180c6013a6b26237626c"}, - {file = "coverage-7.6.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3b204c11e2b2d883946fe1d97f89403aa1811df28ce0447439178cc7463448a"}, - {file = "coverage-7.6.10-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32ee6d8491fcfc82652a37109f69dee9a830e9379166cb73c16d8dc5c2915165"}, - {file = "coverage-7.6.10-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675cefc4c06e3b4c876b85bfb7c59c5e2218167bbd4da5075cbe3b5790a28988"}, - {file = "coverage-7.6.10-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f4f620668dbc6f5e909a0946a877310fb3d57aea8198bde792aae369ee1c23b5"}, - {file = "coverage-7.6.10-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:4eea95ef275de7abaef630c9b2c002ffbc01918b726a39f5a4353916ec72d2f3"}, - {file = "coverage-7.6.10-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e2f0280519e42b0a17550072861e0bc8a80a0870de260f9796157d3fca2733c5"}, - {file = "coverage-7.6.10-cp310-cp310-win32.whl", hash = "sha256:bc67deb76bc3717f22e765ab3e07ee9c7a5e26b9019ca19a3b063d9f4b874244"}, - {file = "coverage-7.6.10-cp310-cp310-win_amd64.whl", hash = "sha256:0f460286cb94036455e703c66988851d970fdfd8acc2a1122ab7f4f904e4029e"}, - {file = "coverage-7.6.10-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ea3c8f04b3e4af80e17bab607c386a830ffc2fb88a5484e1df756478cf70d1d3"}, - {file = "coverage-7.6.10-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:507a20fc863cae1d5720797761b42d2d87a04b3e5aeb682ef3b7332e90598f43"}, - {file = "coverage-7.6.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d37a84878285b903c0fe21ac8794c6dab58150e9359f1aaebbeddd6412d53132"}, - {file = "coverage-7.6.10-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a534738b47b0de1995f85f582d983d94031dffb48ab86c95bdf88dc62212142f"}, - {file = "coverage-7.6.10-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d7a2bf79378d8fb8afaa994f91bfd8215134f8631d27eba3e0e2c13546ce994"}, - {file = "coverage-7.6.10-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6713ba4b4ebc330f3def51df1d5d38fad60b66720948112f114968feb52d3f99"}, - {file = "coverage-7.6.10-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ab32947f481f7e8c763fa2c92fd9f44eeb143e7610c4ca9ecd6a36adab4081bd"}, - {file = "coverage-7.6.10-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7bbd8c8f1b115b892e34ba66a097b915d3871db7ce0e6b9901f462ff3a975377"}, - {file = "coverage-7.6.10-cp311-cp311-win32.whl", hash = "sha256:299e91b274c5c9cdb64cbdf1b3e4a8fe538a7a86acdd08fae52301b28ba297f8"}, - {file = "coverage-7.6.10-cp311-cp311-win_amd64.whl", hash = "sha256:489a01f94aa581dbd961f306e37d75d4ba16104bbfa2b0edb21d29b73be83609"}, - {file = "coverage-7.6.10-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:27c6e64726b307782fa5cbe531e7647aee385a29b2107cd87ba7c0105a5d3853"}, - {file = "coverage-7.6.10-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c56e097019e72c373bae32d946ecf9858fda841e48d82df7e81c63ac25554078"}, - {file = "coverage-7.6.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7827a5bc7bdb197b9e066cdf650b2887597ad124dd99777332776f7b7c7d0d0"}, - {file = "coverage-7.6.10-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:204a8238afe787323a8b47d8be4df89772d5c1e4651b9ffa808552bdf20e1d50"}, - {file = "coverage-7.6.10-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e67926f51821b8e9deb6426ff3164870976fe414d033ad90ea75e7ed0c2e5022"}, - {file = "coverage-7.6.10-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e78b270eadb5702938c3dbe9367f878249b5ef9a2fcc5360ac7bff694310d17b"}, - {file = "coverage-7.6.10-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:714f942b9c15c3a7a5fe6876ce30af831c2ad4ce902410b7466b662358c852c0"}, - {file = "coverage-7.6.10-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:abb02e2f5a3187b2ac4cd46b8ced85a0858230b577ccb2c62c81482ca7d18852"}, - {file = "coverage-7.6.10-cp312-cp312-win32.whl", hash = "sha256:55b201b97286cf61f5e76063f9e2a1d8d2972fc2fcfd2c1272530172fd28c359"}, - {file = "coverage-7.6.10-cp312-cp312-win_amd64.whl", hash = "sha256:e4ae5ac5e0d1e4edfc9b4b57b4cbecd5bc266a6915c500f358817a8496739247"}, - {file = "coverage-7.6.10-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:05fca8ba6a87aabdd2d30d0b6c838b50510b56cdcfc604d40760dae7153b73d9"}, - {file = "coverage-7.6.10-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9e80eba8801c386f72e0712a0453431259c45c3249f0009aff537a517b52942b"}, - {file = "coverage-7.6.10-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a372c89c939d57abe09e08c0578c1d212e7a678135d53aa16eec4430adc5e690"}, - {file = "coverage-7.6.10-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ec22b5e7fe7a0fa8509181c4aac1db48f3dd4d3a566131b313d1efc102892c18"}, - {file = "coverage-7.6.10-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26bcf5c4df41cad1b19c84af71c22cbc9ea9a547fc973f1f2cc9a290002c8b3c"}, - {file = "coverage-7.6.10-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e4630c26b6084c9b3cb53b15bd488f30ceb50b73c35c5ad7871b869cb7365fd"}, - {file = "coverage-7.6.10-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2396e8116db77789f819d2bc8a7e200232b7a282c66e0ae2d2cd84581a89757e"}, - {file = "coverage-7.6.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:79109c70cc0882e4d2d002fe69a24aa504dec0cc17169b3c7f41a1d341a73694"}, - {file = "coverage-7.6.10-cp313-cp313-win32.whl", hash = "sha256:9e1747bab246d6ff2c4f28b4d186b205adced9f7bd9dc362051cc37c4a0c7bd6"}, - {file = "coverage-7.6.10-cp313-cp313-win_amd64.whl", hash = "sha256:254f1a3b1eef5f7ed23ef265eaa89c65c8c5b6b257327c149db1ca9d4a35f25e"}, - {file = "coverage-7.6.10-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2ccf240eb719789cedbb9fd1338055de2761088202a9a0b73032857e53f612fe"}, - {file = "coverage-7.6.10-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0c807ca74d5a5e64427c8805de15b9ca140bba13572d6d74e262f46f50b13273"}, - {file = "coverage-7.6.10-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bcfa46d7709b5a7ffe089075799b902020b62e7ee56ebaed2f4bdac04c508d8"}, - {file = "coverage-7.6.10-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e0de1e902669dccbf80b0415fb6b43d27edca2fbd48c74da378923b05316098"}, - {file = "coverage-7.6.10-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f7b444c42bbc533aaae6b5a2166fd1a797cdb5eb58ee51a92bee1eb94a1e1cb"}, - {file = "coverage-7.6.10-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b330368cb99ef72fcd2dc3ed260adf67b31499584dc8a20225e85bfe6f6cfed0"}, - {file = "coverage-7.6.10-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:9a7cfb50515f87f7ed30bc882f68812fd98bc2852957df69f3003d22a2aa0abf"}, - {file = "coverage-7.6.10-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6f93531882a5f68c28090f901b1d135de61b56331bba82028489bc51bdd818d2"}, - {file = "coverage-7.6.10-cp313-cp313t-win32.whl", hash = "sha256:89d76815a26197c858f53c7f6a656686ec392b25991f9e409bcef020cd532312"}, - {file = "coverage-7.6.10-cp313-cp313t-win_amd64.whl", hash = "sha256:54a5f0f43950a36312155dae55c505a76cd7f2b12d26abeebbe7a0b36dbc868d"}, - {file = "coverage-7.6.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:656c82b8a0ead8bba147de9a89bda95064874c91a3ed43a00e687f23cc19d53a"}, - {file = "coverage-7.6.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ccc2b70a7ed475c68ceb548bf69cec1e27305c1c2606a5eb7c3afff56a1b3b27"}, - {file = "coverage-7.6.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5e37dc41d57ceba70956fa2fc5b63c26dba863c946ace9705f8eca99daecdc4"}, - {file = "coverage-7.6.10-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0aa9692b4fdd83a4647eeb7db46410ea1322b5ed94cd1715ef09d1d5922ba87f"}, - {file = "coverage-7.6.10-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa744da1820678b475e4ba3dfd994c321c5b13381d1041fe9c608620e6676e25"}, - {file = "coverage-7.6.10-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c0b1818063dc9e9d838c09e3a473c1422f517889436dd980f5d721899e66f315"}, - {file = "coverage-7.6.10-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:59af35558ba08b758aec4d56182b222976330ef8d2feacbb93964f576a7e7a90"}, - {file = "coverage-7.6.10-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7ed2f37cfce1ce101e6dffdfd1c99e729dd2ffc291d02d3e2d0af8b53d13840d"}, - {file = "coverage-7.6.10-cp39-cp39-win32.whl", hash = "sha256:4bcc276261505d82f0ad426870c3b12cb177752834a633e737ec5ee79bbdff18"}, - {file = "coverage-7.6.10-cp39-cp39-win_amd64.whl", hash = "sha256:457574f4599d2b00f7f637a0700a6422243b3565509457b2dbd3f50703e11f59"}, - {file = "coverage-7.6.10-pp39.pp310-none-any.whl", hash = "sha256:fd34e7b3405f0cc7ab03d54a334c17a9e802897580d964bd8c2001f4b9fd488f"}, - {file = "coverage-7.6.10.tar.gz", hash = "sha256:7fb105327c8f8f0682e29843e2ff96af9dcbe5bab8eeb4b398c6a33a16d80a23"}, + {file = "coverage-7.6.12-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:704c8c8c6ce6569286ae9622e534b4f5b9759b6f2cd643f1c1a61f666d534fe8"}, + {file = "coverage-7.6.12-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ad7525bf0241e5502168ae9c643a2f6c219fa0a283001cee4cf23a9b7da75879"}, + {file = "coverage-7.6.12-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06097c7abfa611c91edb9e6920264e5be1d6ceb374efb4986f38b09eed4cb2fe"}, + {file = "coverage-7.6.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:220fa6c0ad7d9caef57f2c8771918324563ef0d8272c94974717c3909664e674"}, + {file = "coverage-7.6.12-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3688b99604a24492bcfe1c106278c45586eb819bf66a654d8a9a1433022fb2eb"}, + {file = "coverage-7.6.12-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d1a987778b9c71da2fc8948e6f2656da6ef68f59298b7e9786849634c35d2c3c"}, + {file = "coverage-7.6.12-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:cec6b9ce3bd2b7853d4a4563801292bfee40b030c05a3d29555fd2a8ee9bd68c"}, + {file = "coverage-7.6.12-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ace9048de91293e467b44bce0f0381345078389814ff6e18dbac8fdbf896360e"}, + {file = "coverage-7.6.12-cp310-cp310-win32.whl", hash = "sha256:ea31689f05043d520113e0552f039603c4dd71fa4c287b64cb3606140c66f425"}, + {file = "coverage-7.6.12-cp310-cp310-win_amd64.whl", hash = "sha256:676f92141e3c5492d2a1596d52287d0d963df21bf5e55c8b03075a60e1ddf8aa"}, + {file = "coverage-7.6.12-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e18aafdfb3e9ec0d261c942d35bd7c28d031c5855dadb491d2723ba54f4c3015"}, + {file = "coverage-7.6.12-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:66fe626fd7aa5982cdebad23e49e78ef7dbb3e3c2a5960a2b53632f1f703ea45"}, + {file = "coverage-7.6.12-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ef01d70198431719af0b1f5dcbefc557d44a190e749004042927b2a3fed0702"}, + {file = "coverage-7.6.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07e92ae5a289a4bc4c0aae710c0948d3c7892e20fd3588224ebe242039573bf0"}, + {file = "coverage-7.6.12-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e695df2c58ce526eeab11a2e915448d3eb76f75dffe338ea613c1201b33bab2f"}, + {file = "coverage-7.6.12-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d74c08e9aaef995f8c4ef6d202dbd219c318450fe2a76da624f2ebb9c8ec5d9f"}, + {file = "coverage-7.6.12-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e995b3b76ccedc27fe4f477b349b7d64597e53a43fc2961db9d3fbace085d69d"}, + {file = "coverage-7.6.12-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b1f097878d74fe51e1ddd1be62d8e3682748875b461232cf4b52ddc6e6db0bba"}, + {file = "coverage-7.6.12-cp311-cp311-win32.whl", hash = "sha256:1f7ffa05da41754e20512202c866d0ebfc440bba3b0ed15133070e20bf5aeb5f"}, + {file = "coverage-7.6.12-cp311-cp311-win_amd64.whl", hash = "sha256:e216c5c45f89ef8971373fd1c5d8d1164b81f7f5f06bbf23c37e7908d19e8558"}, + {file = "coverage-7.6.12-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b172f8e030e8ef247b3104902cc671e20df80163b60a203653150d2fc204d1ad"}, + {file = "coverage-7.6.12-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:641dfe0ab73deb7069fb972d4d9725bf11c239c309ce694dd50b1473c0f641c3"}, + {file = "coverage-7.6.12-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e549f54ac5f301e8e04c569dfdb907f7be71b06b88b5063ce9d6953d2d58574"}, + {file = "coverage-7.6.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:959244a17184515f8c52dcb65fb662808767c0bd233c1d8a166e7cf74c9ea985"}, + {file = "coverage-7.6.12-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bda1c5f347550c359f841d6614fb8ca42ae5cb0b74d39f8a1e204815ebe25750"}, + {file = "coverage-7.6.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1ceeb90c3eda1f2d8c4c578c14167dbd8c674ecd7d38e45647543f19839dd6ea"}, + {file = "coverage-7.6.12-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f16f44025c06792e0fb09571ae454bcc7a3ec75eeb3c36b025eccf501b1a4c3"}, + {file = "coverage-7.6.12-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b076e625396e787448d27a411aefff867db2bffac8ed04e8f7056b07024eed5a"}, + {file = "coverage-7.6.12-cp312-cp312-win32.whl", hash = "sha256:00b2086892cf06c7c2d74983c9595dc511acca00665480b3ddff749ec4fb2a95"}, + {file = "coverage-7.6.12-cp312-cp312-win_amd64.whl", hash = "sha256:7ae6eabf519bc7871ce117fb18bf14e0e343eeb96c377667e3e5dd12095e0288"}, + {file = "coverage-7.6.12-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:488c27b3db0ebee97a830e6b5a3ea930c4a6e2c07f27a5e67e1b3532e76b9ef1"}, + {file = "coverage-7.6.12-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5d1095bbee1851269f79fd8e0c9b5544e4c00c0c24965e66d8cba2eb5bb535fd"}, + {file = "coverage-7.6.12-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0533adc29adf6a69c1baa88c3d7dbcaadcffa21afbed3ca7a225a440e4744bf9"}, + {file = "coverage-7.6.12-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53c56358d470fa507a2b6e67a68fd002364d23c83741dbc4c2e0680d80ca227e"}, + {file = "coverage-7.6.12-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64cbb1a3027c79ca6310bf101014614f6e6e18c226474606cf725238cf5bc2d4"}, + {file = "coverage-7.6.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:79cac3390bfa9836bb795be377395f28410811c9066bc4eefd8015258a7578c6"}, + {file = "coverage-7.6.12-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:9b148068e881faa26d878ff63e79650e208e95cf1c22bd3f77c3ca7b1d9821a3"}, + {file = "coverage-7.6.12-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8bec2ac5da793c2685ce5319ca9bcf4eee683b8a1679051f8e6ec04c4f2fd7dc"}, + {file = "coverage-7.6.12-cp313-cp313-win32.whl", hash = "sha256:200e10beb6ddd7c3ded322a4186313d5ca9e63e33d8fab4faa67ef46d3460af3"}, + {file = "coverage-7.6.12-cp313-cp313-win_amd64.whl", hash = "sha256:2b996819ced9f7dbb812c701485d58f261bef08f9b85304d41219b1496b591ef"}, + {file = "coverage-7.6.12-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:299cf973a7abff87a30609879c10df0b3bfc33d021e1adabc29138a48888841e"}, + {file = "coverage-7.6.12-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4b467a8c56974bf06e543e69ad803c6865249d7a5ccf6980457ed2bc50312703"}, + {file = "coverage-7.6.12-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2458f275944db8129f95d91aee32c828a408481ecde3b30af31d552c2ce284a0"}, + {file = "coverage-7.6.12-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a9d8be07fb0832636a0f72b80d2a652fe665e80e720301fb22b191c3434d924"}, + {file = "coverage-7.6.12-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14d47376a4f445e9743f6c83291e60adb1b127607a3618e3185bbc8091f0467b"}, + {file = "coverage-7.6.12-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b95574d06aa9d2bd6e5cc35a5bbe35696342c96760b69dc4287dbd5abd4ad51d"}, + {file = "coverage-7.6.12-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:ecea0c38c9079570163d663c0433a9af4094a60aafdca491c6a3d248c7432827"}, + {file = "coverage-7.6.12-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:2251fabcfee0a55a8578a9d29cecfee5f2de02f11530e7d5c5a05859aa85aee9"}, + {file = "coverage-7.6.12-cp313-cp313t-win32.whl", hash = "sha256:eb5507795caabd9b2ae3f1adc95f67b1104971c22c624bb354232d65c4fc90b3"}, + {file = "coverage-7.6.12-cp313-cp313t-win_amd64.whl", hash = "sha256:f60a297c3987c6c02ffb29effc70eadcbb412fe76947d394a1091a3615948e2f"}, + {file = "coverage-7.6.12-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e7575ab65ca8399c8c4f9a7d61bbd2d204c8b8e447aab9d355682205c9dd948d"}, + {file = "coverage-7.6.12-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8161d9fbc7e9fe2326de89cd0abb9f3599bccc1287db0aba285cb68d204ce929"}, + {file = "coverage-7.6.12-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a1e465f398c713f1b212400b4e79a09829cd42aebd360362cd89c5bdc44eb87"}, + {file = "coverage-7.6.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f25d8b92a4e31ff1bd873654ec367ae811b3a943583e05432ea29264782dc32c"}, + {file = "coverage-7.6.12-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a936309a65cc5ca80fa9f20a442ff9e2d06927ec9a4f54bcba9c14c066323f2"}, + {file = "coverage-7.6.12-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:aa6f302a3a0b5f240ee201297fff0bbfe2fa0d415a94aeb257d8b461032389bd"}, + {file = "coverage-7.6.12-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:f973643ef532d4f9be71dd88cf7588936685fdb576d93a79fe9f65bc337d9d73"}, + {file = "coverage-7.6.12-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:78f5243bb6b1060aed6213d5107744c19f9571ec76d54c99cc15938eb69e0e86"}, + {file = "coverage-7.6.12-cp39-cp39-win32.whl", hash = "sha256:69e62c5034291c845fc4df7f8155e8544178b6c774f97a99e2734b05eb5bed31"}, + {file = "coverage-7.6.12-cp39-cp39-win_amd64.whl", hash = "sha256:b01a840ecc25dce235ae4c1b6a0daefb2a203dba0e6e980637ee9c2f6ee0df57"}, + {file = "coverage-7.6.12-pp39.pp310-none-any.whl", hash = "sha256:7e39e845c4d764208e7b8f6a21c541ade741e2c41afabdfa1caa28687a3c98cf"}, + {file = "coverage-7.6.12-py3-none-any.whl", hash = "sha256:eb8668cfbc279a536c633137deeb9435d2962caec279c3f8cf8b91fff6ff8953"}, + {file = "coverage-7.6.12.tar.gz", hash = "sha256:48cfc4641d95d34766ad41d9573cc0f22a48aa88d22657a1fe01dca0dbae4de2"}, ] [package.extras] @@ -749,15 +750,15 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc [[package]] name = "flake8" -version = "7.1.1" +version = "7.1.2" description = "the modular source code checker: pep8 pyflakes and co" optional = false python-versions = ">=3.8.1" groups = ["test"] markers = "python_version >= \"3.12\" or python_version == \"3.11\"" files = [ - {file = "flake8-7.1.1-py2.py3-none-any.whl", hash = "sha256:597477df7860daa5aa0fdd84bf5208a043ab96b8e96ab708770ae0364dd03213"}, - {file = "flake8-7.1.1.tar.gz", hash = "sha256:049d058491e228e03e67b390f311bbf88fce2dbaa8fa673e7aea87b7198b8d38"}, + {file = "flake8-7.1.2-py2.py3-none-any.whl", hash = "sha256:1cbc62e65536f65e6d754dfe6f1bada7f5cf392d6f5db3c2b85892466c3e7c1a"}, + {file = "flake8-7.1.2.tar.gz", hash = "sha256:c586ffd0b41540951ae41af572e6790dbd49fc12b3aa2541685d253d9bd504bd"}, ] [package.dependencies] @@ -1579,15 +1580,15 @@ files = [ [[package]] name = "mistune" -version = "3.1.1" +version = "3.1.2" description = "A sane and fast Markdown parser with useful plugins and renderers" optional = false python-versions = ">=3.8" groups = ["test"] markers = "python_version >= \"3.12\" or python_version == \"3.11\"" files = [ - {file = "mistune-3.1.1-py3-none-any.whl", hash = "sha256:02106ac2aa4f66e769debbfa028509a275069dcffce0dfa578edd7b991ee700a"}, - {file = "mistune-3.1.1.tar.gz", hash = "sha256:e0740d635f515119f7d1feb6f9b192ee60f0cc649f80a8f944f905706a21654c"}, + {file = "mistune-3.1.2-py3-none-any.whl", hash = "sha256:4b47731332315cdca99e0ded46fc0004001c1299ff773dfb48fbe1fd226de319"}, + {file = "mistune-3.1.2.tar.gz", hash = "sha256:733bf018ba007e8b5f2d3a9eb624034f6ee26c4ea769a98ec533ee111d504dff"}, ] [[package]] @@ -1768,68 +1769,68 @@ test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync" [[package]] name = "numpy" -version = "2.2.2" +version = "2.2.3" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.10" groups = ["main"] markers = "python_version >= \"3.12\" or python_version == \"3.11\"" files = [ - {file = "numpy-2.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7079129b64cb78bdc8d611d1fd7e8002c0a2565da6a47c4df8062349fee90e3e"}, - {file = "numpy-2.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2ec6c689c61df613b783aeb21f945c4cbe6c51c28cb70aae8430577ab39f163e"}, - {file = "numpy-2.2.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:40c7ff5da22cd391944a28c6a9c638a5eef77fcf71d6e3a79e1d9d9e82752715"}, - {file = "numpy-2.2.2-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:995f9e8181723852ca458e22de5d9b7d3ba4da3f11cc1cb113f093b271d7965a"}, - {file = "numpy-2.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b78ea78450fd96a498f50ee096f69c75379af5138f7881a51355ab0e11286c97"}, - {file = "numpy-2.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3fbe72d347fbc59f94124125e73fc4976a06927ebc503ec5afbfb35f193cd957"}, - {file = "numpy-2.2.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8e6da5cffbbe571f93588f562ed130ea63ee206d12851b60819512dd3e1ba50d"}, - {file = "numpy-2.2.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:09d6a2032faf25e8d0cadde7fd6145118ac55d2740132c1d845f98721b5ebcfd"}, - {file = "numpy-2.2.2-cp310-cp310-win32.whl", hash = "sha256:159ff6ee4c4a36a23fe01b7c3d07bd8c14cc433d9720f977fcd52c13c0098160"}, - {file = "numpy-2.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:64bd6e1762cd7f0986a740fee4dff927b9ec2c5e4d9a28d056eb17d332158014"}, - {file = "numpy-2.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:642199e98af1bd2b6aeb8ecf726972d238c9877b0f6e8221ee5ab945ec8a2189"}, - {file = "numpy-2.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6d9fc9d812c81e6168b6d405bf00b8d6739a7f72ef22a9214c4241e0dc70b323"}, - {file = "numpy-2.2.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:c7d1fd447e33ee20c1f33f2c8e6634211124a9aabde3c617687d8b739aa69eac"}, - {file = "numpy-2.2.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:451e854cfae0febe723077bd0cf0a4302a5d84ff25f0bfece8f29206c7bed02e"}, - {file = "numpy-2.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd249bc894af67cbd8bad2c22e7cbcd46cf87ddfca1f1289d1e7e54868cc785c"}, - {file = "numpy-2.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02935e2c3c0c6cbe9c7955a8efa8908dd4221d7755644c59d1bba28b94fd334f"}, - {file = "numpy-2.2.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a972cec723e0563aa0823ee2ab1df0cb196ed0778f173b381c871a03719d4826"}, - {file = "numpy-2.2.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d6d6a0910c3b4368d89dde073e630882cdb266755565155bc33520283b2d9df8"}, - {file = "numpy-2.2.2-cp311-cp311-win32.whl", hash = "sha256:860fd59990c37c3ef913c3ae390b3929d005243acca1a86facb0773e2d8d9e50"}, - {file = "numpy-2.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:da1eeb460ecce8d5b8608826595c777728cdf28ce7b5a5a8c8ac8d949beadcf2"}, - {file = "numpy-2.2.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ac9bea18d6d58a995fac1b2cb4488e17eceeac413af014b1dd26170b766d8467"}, - {file = "numpy-2.2.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:23ae9f0c2d889b7b2d88a3791f6c09e2ef827c2446f1c4a3e3e76328ee4afd9a"}, - {file = "numpy-2.2.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3074634ea4d6df66be04f6728ee1d173cfded75d002c75fac79503a880bf3825"}, - {file = "numpy-2.2.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:8ec0636d3f7d68520afc6ac2dc4b8341ddb725039de042faf0e311599f54eb37"}, - {file = "numpy-2.2.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ffbb1acd69fdf8e89dd60ef6182ca90a743620957afb7066385a7bbe88dc748"}, - {file = "numpy-2.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0349b025e15ea9d05c3d63f9657707a4e1d471128a3b1d876c095f328f8ff7f0"}, - {file = "numpy-2.2.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:463247edcee4a5537841d5350bc87fe8e92d7dd0e8c71c995d2c6eecb8208278"}, - {file = "numpy-2.2.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9dd47ff0cb2a656ad69c38da850df3454da88ee9a6fde0ba79acceee0e79daba"}, - {file = "numpy-2.2.2-cp312-cp312-win32.whl", hash = "sha256:4525b88c11906d5ab1b0ec1f290996c0020dd318af8b49acaa46f198b1ffc283"}, - {file = "numpy-2.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:5acea83b801e98541619af398cc0109ff48016955cc0818f478ee9ef1c5c3dcb"}, - {file = "numpy-2.2.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b208cfd4f5fe34e1535c08983a1a6803fdbc7a1e86cf13dd0c61de0b51a0aadc"}, - {file = "numpy-2.2.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d0bbe7dd86dca64854f4b6ce2ea5c60b51e36dfd597300057cf473d3615f2369"}, - {file = "numpy-2.2.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:22ea3bb552ade325530e72a0c557cdf2dea8914d3a5e1fecf58fa5dbcc6f43cd"}, - {file = "numpy-2.2.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:128c41c085cab8a85dc29e66ed88c05613dccf6bc28b3866cd16050a2f5448be"}, - {file = "numpy-2.2.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:250c16b277e3b809ac20d1f590716597481061b514223c7badb7a0f9993c7f84"}, - {file = "numpy-2.2.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0c8854b09bc4de7b041148d8550d3bd712b5c21ff6a8ed308085f190235d7ff"}, - {file = "numpy-2.2.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b6fb9c32a91ec32a689ec6410def76443e3c750e7cfc3fb2206b985ffb2b85f0"}, - {file = "numpy-2.2.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:57b4012e04cc12b78590a334907e01b3a85efb2107df2b8733ff1ed05fce71de"}, - {file = "numpy-2.2.2-cp313-cp313-win32.whl", hash = "sha256:4dbd80e453bd34bd003b16bd802fac70ad76bd463f81f0c518d1245b1c55e3d9"}, - {file = "numpy-2.2.2-cp313-cp313-win_amd64.whl", hash = "sha256:5a8c863ceacae696aff37d1fd636121f1a512117652e5dfb86031c8d84836369"}, - {file = "numpy-2.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:b3482cb7b3325faa5f6bc179649406058253d91ceda359c104dac0ad320e1391"}, - {file = "numpy-2.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:9491100aba630910489c1d0158034e1c9a6546f0b1340f716d522dc103788e39"}, - {file = "numpy-2.2.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:41184c416143defa34cc8eb9d070b0a5ba4f13a0fa96a709e20584638254b317"}, - {file = "numpy-2.2.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:7dca87ca328f5ea7dafc907c5ec100d187911f94825f8700caac0b3f4c384b49"}, - {file = "numpy-2.2.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bc61b307655d1a7f9f4b043628b9f2b721e80839914ede634e3d485913e1fb2"}, - {file = "numpy-2.2.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fad446ad0bc886855ddf5909cbf8cb5d0faa637aaa6277fb4b19ade134ab3c7"}, - {file = "numpy-2.2.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:149d1113ac15005652e8d0d3f6fd599360e1a708a4f98e43c9c77834a28238cb"}, - {file = "numpy-2.2.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:106397dbbb1896f99e044efc90360d098b3335060375c26aa89c0d8a97c5f648"}, - {file = "numpy-2.2.2-cp313-cp313t-win32.whl", hash = "sha256:0eec19f8af947a61e968d5429f0bd92fec46d92b0008d0a6685b40d6adf8a4f4"}, - {file = "numpy-2.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:97b974d3ba0fb4612b77ed35d7627490e8e3dff56ab41454d9e8b23448940576"}, - {file = "numpy-2.2.2-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b0531f0b0e07643eb089df4c509d30d72c9ef40defa53e41363eca8a8cc61495"}, - {file = "numpy-2.2.2-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:e9e82dcb3f2ebbc8cb5ce1102d5f1c5ed236bf8a11730fb45ba82e2841ec21df"}, - {file = "numpy-2.2.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0d4142eb40ca6f94539e4db929410f2a46052a0fe7a2c1c59f6179c39938d2a"}, - {file = "numpy-2.2.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:356ca982c188acbfa6af0d694284d8cf20e95b1c3d0aefa8929376fea9146f60"}, - {file = "numpy-2.2.2.tar.gz", hash = "sha256:ed6906f61834d687738d25988ae117683705636936cc605be0bb208b23df4d8f"}, + {file = "numpy-2.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cbc6472e01952d3d1b2772b720428f8b90e2deea8344e854df22b0618e9cce71"}, + {file = "numpy-2.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cdfe0c22692a30cd830c0755746473ae66c4a8f2e7bd508b35fb3b6a0813d787"}, + {file = "numpy-2.2.3-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:e37242f5324ffd9f7ba5acf96d774f9276aa62a966c0bad8dae692deebec7716"}, + {file = "numpy-2.2.3-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:95172a21038c9b423e68be78fd0be6e1b97674cde269b76fe269a5dfa6fadf0b"}, + {file = "numpy-2.2.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5b47c440210c5d1d67e1cf434124e0b5c395eee1f5806fdd89b553ed1acd0a3"}, + {file = "numpy-2.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0391ea3622f5c51a2e29708877d56e3d276827ac5447d7f45e9bc4ade8923c52"}, + {file = "numpy-2.2.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f6b3dfc7661f8842babd8ea07e9897fe3d9b69a1d7e5fbb743e4160f9387833b"}, + {file = "numpy-2.2.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1ad78ce7f18ce4e7df1b2ea4019b5817a2f6a8a16e34ff2775f646adce0a5027"}, + {file = "numpy-2.2.3-cp310-cp310-win32.whl", hash = "sha256:5ebeb7ef54a7be11044c33a17b2624abe4307a75893c001a4800857956b41094"}, + {file = "numpy-2.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:596140185c7fa113563c67c2e894eabe0daea18cf8e33851738c19f70ce86aeb"}, + {file = "numpy-2.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:16372619ee728ed67a2a606a614f56d3eabc5b86f8b615c79d01957062826ca8"}, + {file = "numpy-2.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5521a06a3148686d9269c53b09f7d399a5725c47bbb5b35747e1cb76326b714b"}, + {file = "numpy-2.2.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:7c8dde0ca2f77828815fd1aedfdf52e59071a5bae30dac3b4da2a335c672149a"}, + {file = "numpy-2.2.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:77974aba6c1bc26e3c205c2214f0d5b4305bdc719268b93e768ddb17e3fdd636"}, + {file = "numpy-2.2.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d42f9c36d06440e34226e8bd65ff065ca0963aeecada587b937011efa02cdc9d"}, + {file = "numpy-2.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2712c5179f40af9ddc8f6727f2bd910ea0eb50206daea75f58ddd9fa3f715bb"}, + {file = "numpy-2.2.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c8b0451d2ec95010d1db8ca733afc41f659f425b7f608af569711097fd6014e2"}, + {file = "numpy-2.2.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d9b4a8148c57ecac25a16b0e11798cbe88edf5237b0df99973687dd866f05e1b"}, + {file = "numpy-2.2.3-cp311-cp311-win32.whl", hash = "sha256:1f45315b2dc58d8a3e7754fe4e38b6fce132dab284a92851e41b2b344f6441c5"}, + {file = "numpy-2.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:9f48ba6f6c13e5e49f3d3efb1b51c8193215c42ac82610a04624906a9270be6f"}, + {file = "numpy-2.2.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:12c045f43b1d2915eca6b880a7f4a256f59d62df4f044788c8ba67709412128d"}, + {file = "numpy-2.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:87eed225fd415bbae787f93a457af7f5990b92a334e346f72070bf569b9c9c95"}, + {file = "numpy-2.2.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:712a64103d97c404e87d4d7c47fb0c7ff9acccc625ca2002848e0d53288b90ea"}, + {file = "numpy-2.2.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:a5ae282abe60a2db0fd407072aff4599c279bcd6e9a2475500fc35b00a57c532"}, + {file = "numpy-2.2.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5266de33d4c3420973cf9ae3b98b54a2a6d53a559310e3236c4b2b06b9c07d4e"}, + {file = "numpy-2.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b787adbf04b0db1967798dba8da1af07e387908ed1553a0d6e74c084d1ceafe"}, + {file = "numpy-2.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:34c1b7e83f94f3b564b35f480f5652a47007dd91f7c839f404d03279cc8dd021"}, + {file = "numpy-2.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4d8335b5f1b6e2bce120d55fb17064b0262ff29b459e8493d1785c18ae2553b8"}, + {file = "numpy-2.2.3-cp312-cp312-win32.whl", hash = "sha256:4d9828d25fb246bedd31e04c9e75714a4087211ac348cb39c8c5f99dbb6683fe"}, + {file = "numpy-2.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:83807d445817326b4bcdaaaf8e8e9f1753da04341eceec705c001ff342002e5d"}, + {file = "numpy-2.2.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7bfdb06b395385ea9b91bf55c1adf1b297c9fdb531552845ff1d3ea6e40d5aba"}, + {file = "numpy-2.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:23c9f4edbf4c065fddb10a4f6e8b6a244342d95966a48820c614891e5059bb50"}, + {file = "numpy-2.2.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:a0c03b6be48aaf92525cccf393265e02773be8fd9551a2f9adbe7db1fa2b60f1"}, + {file = "numpy-2.2.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:2376e317111daa0a6739e50f7ee2a6353f768489102308b0d98fcf4a04f7f3b5"}, + {file = "numpy-2.2.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8fb62fe3d206d72fe1cfe31c4a1106ad2b136fcc1606093aeab314f02930fdf2"}, + {file = "numpy-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:52659ad2534427dffcc36aac76bebdd02b67e3b7a619ac67543bc9bfe6b7cdb1"}, + {file = "numpy-2.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1b416af7d0ed3271cad0f0a0d0bee0911ed7eba23e66f8424d9f3dfcdcae1304"}, + {file = "numpy-2.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1402da8e0f435991983d0a9708b779f95a8c98c6b18a171b9f1be09005e64d9d"}, + {file = "numpy-2.2.3-cp313-cp313-win32.whl", hash = "sha256:136553f123ee2951bfcfbc264acd34a2fc2f29d7cdf610ce7daf672b6fbaa693"}, + {file = "numpy-2.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:5b732c8beef1d7bc2d9e476dbba20aaff6167bf205ad9aa8d30913859e82884b"}, + {file = "numpy-2.2.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:435e7a933b9fda8126130b046975a968cc2d833b505475e588339e09f7672890"}, + {file = "numpy-2.2.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:7678556eeb0152cbd1522b684dcd215250885993dd00adb93679ec3c0e6e091c"}, + {file = "numpy-2.2.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:2e8da03bd561504d9b20e7a12340870dfc206c64ea59b4cfee9fceb95070ee94"}, + {file = "numpy-2.2.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:c9aa4496fd0e17e3843399f533d62857cef5900facf93e735ef65aa4bbc90ef0"}, + {file = "numpy-2.2.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4ca91d61a4bf61b0f2228f24bbfa6a9facd5f8af03759fe2a655c50ae2c6610"}, + {file = "numpy-2.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:deaa09cd492e24fd9b15296844c0ad1b3c976da7907e1c1ed3a0ad21dded6f76"}, + {file = "numpy-2.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:246535e2f7496b7ac85deffe932896a3577be7af8fb7eebe7146444680297e9a"}, + {file = "numpy-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:daf43a3d1ea699402c5a850e5313680ac355b4adc9770cd5cfc2940e7861f1bf"}, + {file = "numpy-2.2.3-cp313-cp313t-win32.whl", hash = "sha256:cf802eef1f0134afb81fef94020351be4fe1d6681aadf9c5e862af6602af64ef"}, + {file = "numpy-2.2.3-cp313-cp313t-win_amd64.whl", hash = "sha256:aee2512827ceb6d7f517c8b85aa5d3923afe8fc7a57d028cffcd522f1c6fd082"}, + {file = "numpy-2.2.3-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:3c2ec8a0f51d60f1e9c0c5ab116b7fc104b165ada3f6c58abf881cb2eb16044d"}, + {file = "numpy-2.2.3-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:ed2cf9ed4e8ebc3b754d398cba12f24359f018b416c380f577bbae112ca52fc9"}, + {file = "numpy-2.2.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39261798d208c3095ae4f7bc8eaeb3481ea8c6e03dc48028057d3cbdbdb8937e"}, + {file = "numpy-2.2.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:783145835458e60fa97afac25d511d00a1eca94d4a8f3ace9fe2043003c678e4"}, + {file = "numpy-2.2.3.tar.gz", hash = "sha256:dbdc15f0c81611925f382dfa97b3bd0bc2c1ce19d4fe50482cb0ddc12ba30020"}, ] [[package]] @@ -2073,34 +2074,27 @@ wcwidth = "*" [[package]] name = "psutil" -version = "6.1.1" -description = "Cross-platform lib for process and system monitoring in Python." +version = "7.0.0" +description = "Cross-platform lib for process and system monitoring in Python. NOTE: the syntax of this script MUST be kept compatible with Python 2.7." optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +python-versions = ">=3.6" groups = ["test"] markers = "python_version >= \"3.12\" or python_version == \"3.11\"" files = [ - {file = "psutil-6.1.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:9ccc4316f24409159897799b83004cb1e24f9819b0dcf9c0b68bdcb6cefee6a8"}, - {file = "psutil-6.1.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ca9609c77ea3b8481ab005da74ed894035936223422dc591d6772b147421f777"}, - {file = "psutil-6.1.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:8df0178ba8a9e5bc84fed9cfa61d54601b371fbec5c8eebad27575f1e105c0d4"}, - {file = "psutil-6.1.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:1924e659d6c19c647e763e78670a05dbb7feaf44a0e9c94bf9e14dfc6ba50468"}, - {file = "psutil-6.1.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:018aeae2af92d943fdf1da6b58665124897cfc94faa2ca92098838f83e1b1bca"}, - {file = "psutil-6.1.1-cp27-none-win32.whl", hash = "sha256:6d4281f5bbca041e2292be3380ec56a9413b790579b8e593b1784499d0005dac"}, - {file = "psutil-6.1.1-cp27-none-win_amd64.whl", hash = "sha256:c777eb75bb33c47377c9af68f30e9f11bc78e0f07fbf907be4a5d70b2fe5f030"}, - {file = "psutil-6.1.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:fc0ed7fe2231a444fc219b9c42d0376e0a9a1a72f16c5cfa0f68d19f1a0663e8"}, - {file = "psutil-6.1.1-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:0bdd4eab935276290ad3cb718e9809412895ca6b5b334f5a9111ee6d9aff9377"}, - {file = "psutil-6.1.1-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b6e06c20c05fe95a3d7302d74e7097756d4ba1247975ad6905441ae1b5b66003"}, - {file = "psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97f7cb9921fbec4904f522d972f0c0e1f4fabbdd4e0287813b21215074a0f160"}, - {file = "psutil-6.1.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33431e84fee02bc84ea36d9e2c4a6d395d479c9dd9bba2376c1f6ee8f3a4e0b3"}, - {file = "psutil-6.1.1-cp36-cp36m-win32.whl", hash = "sha256:384636b1a64b47814437d1173be1427a7c83681b17a450bfc309a1953e329603"}, - {file = "psutil-6.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:8be07491f6ebe1a693f17d4f11e69d0dc1811fa082736500f649f79df7735303"}, - {file = "psutil-6.1.1-cp37-abi3-win32.whl", hash = "sha256:eaa912e0b11848c4d9279a93d7e2783df352b082f40111e078388701fd479e53"}, - {file = "psutil-6.1.1-cp37-abi3-win_amd64.whl", hash = "sha256:f35cfccb065fff93529d2afb4a2e89e363fe63ca1e4a5da22b603a85833c2649"}, - {file = "psutil-6.1.1.tar.gz", hash = "sha256:cf8496728c18f2d0b45198f06895be52f36611711746b7f30c464b422b50e2f5"}, + {file = "psutil-7.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:101d71dc322e3cffd7cea0650b09b3d08b8e7c4109dd6809fe452dfd00e58b25"}, + {file = "psutil-7.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:39db632f6bb862eeccf56660871433e111b6ea58f2caea825571951d4b6aa3da"}, + {file = "psutil-7.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fcee592b4c6f146991ca55919ea3d1f8926497a713ed7faaf8225e174581e91"}, + {file = "psutil-7.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b1388a4f6875d7e2aff5c4ca1cc16c545ed41dd8bb596cefea80111db353a34"}, + {file = "psutil-7.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f098451abc2828f7dc6b58d44b532b22f2088f4999a937557b603ce72b1993"}, + {file = "psutil-7.0.0-cp36-cp36m-win32.whl", hash = "sha256:84df4eb63e16849689f76b1ffcb36db7b8de703d1bc1fe41773db487621b6c17"}, + {file = "psutil-7.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:1e744154a6580bc968a0195fd25e80432d3afec619daf145b9e5ba16cc1d688e"}, + {file = "psutil-7.0.0-cp37-abi3-win32.whl", hash = "sha256:ba3fcef7523064a6c9da440fc4d6bd07da93ac726b5733c29027d7dc95b39d99"}, + {file = "psutil-7.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:4cf3d4eb1aa9b348dec30105c55cd9b7d4629285735a102beb4441e38db90553"}, + {file = "psutil-7.0.0.tar.gz", hash = "sha256:7be9c3eba38beccb6495ea33afd982a44074b78f28c434a1f51cc07fd315c456"}, ] [package.extras] -dev = ["abi3audit", "black", "check-manifest", "coverage", "packaging", "pylint", "pyperf", "pypinfo", "pytest-cov", "requests", "rstcheck", "ruff", "sphinx", "sphinx_rtd_theme", "toml-sort", "twine", "virtualenv", "vulture", "wheel"] +dev = ["abi3audit", "black (==24.10.0)", "check-manifest", "coverage", "packaging", "pylint", "pyperf", "pypinfo", "pytest", "pytest-cov", "pytest-xdist", "requests", "rstcheck", "ruff", "setuptools", "sphinx", "sphinx_rtd_theme", "toml-sort", "twine", "virtualenv", "vulture", "wheel"] test = ["pytest", "pytest-xdist", "setuptools"] [[package]] @@ -2838,116 +2832,116 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "rpds-py" -version = "0.22.3" +version = "0.23.1" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.9" groups = ["test"] markers = "python_version >= \"3.12\" or python_version == \"3.11\"" files = [ - {file = "rpds_py-0.22.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:6c7b99ca52c2c1752b544e310101b98a659b720b21db00e65edca34483259967"}, - {file = "rpds_py-0.22.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:be2eb3f2495ba669d2a985f9b426c1797b7d48d6963899276d22f23e33d47e37"}, - {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70eb60b3ae9245ddea20f8a4190bd79c705a22f8028aaf8bbdebe4716c3fab24"}, - {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4041711832360a9b75cfb11b25a6a97c8fb49c07b8bd43d0d02b45d0b499a4ff"}, - {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:64607d4cbf1b7e3c3c8a14948b99345eda0e161b852e122c6bb71aab6d1d798c"}, - {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e69b0a0e2537f26d73b4e43ad7bc8c8efb39621639b4434b76a3de50c6966e"}, - {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc27863442d388870c1809a87507727b799c8460573cfbb6dc0eeaef5a11b5ec"}, - {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e79dd39f1e8c3504be0607e5fc6e86bb60fe3584bec8b782578c3b0fde8d932c"}, - {file = "rpds_py-0.22.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e0fa2d4ec53dc51cf7d3bb22e0aa0143966119f42a0c3e4998293a3dd2856b09"}, - {file = "rpds_py-0.22.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fda7cb070f442bf80b642cd56483b5548e43d366fe3f39b98e67cce780cded00"}, - {file = "rpds_py-0.22.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cff63a0272fcd259dcc3be1657b07c929c466b067ceb1c20060e8d10af56f5bf"}, - {file = "rpds_py-0.22.3-cp310-cp310-win32.whl", hash = "sha256:9bd7228827ec7bb817089e2eb301d907c0d9827a9e558f22f762bb690b131652"}, - {file = "rpds_py-0.22.3-cp310-cp310-win_amd64.whl", hash = "sha256:9beeb01d8c190d7581a4d59522cd3d4b6887040dcfc744af99aa59fef3e041a8"}, - {file = "rpds_py-0.22.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d20cfb4e099748ea39e6f7b16c91ab057989712d31761d3300d43134e26e165f"}, - {file = "rpds_py-0.22.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:68049202f67380ff9aa52f12e92b1c30115f32e6895cd7198fa2a7961621fc5a"}, - {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb4f868f712b2dd4bcc538b0a0c1f63a2b1d584c925e69a224d759e7070a12d5"}, - {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bc51abd01f08117283c5ebf64844a35144a0843ff7b2983e0648e4d3d9f10dbb"}, - {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0f3cec041684de9a4684b1572fe28c7267410e02450f4561700ca5a3bc6695a2"}, - {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7ef9d9da710be50ff6809fed8f1963fecdfecc8b86656cadfca3bc24289414b0"}, - {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59f4a79c19232a5774aee369a0c296712ad0e77f24e62cad53160312b1c1eaa1"}, - {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a60bce91f81ddaac922a40bbb571a12c1070cb20ebd6d49c48e0b101d87300d"}, - {file = "rpds_py-0.22.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e89391e6d60251560f0a8f4bd32137b077a80d9b7dbe6d5cab1cd80d2746f648"}, - {file = "rpds_py-0.22.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e3fb866d9932a3d7d0c82da76d816996d1667c44891bd861a0f97ba27e84fc74"}, - {file = "rpds_py-0.22.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1352ae4f7c717ae8cba93421a63373e582d19d55d2ee2cbb184344c82d2ae55a"}, - {file = "rpds_py-0.22.3-cp311-cp311-win32.whl", hash = "sha256:b0b4136a252cadfa1adb705bb81524eee47d9f6aab4f2ee4fa1e9d3cd4581f64"}, - {file = "rpds_py-0.22.3-cp311-cp311-win_amd64.whl", hash = "sha256:8bd7c8cfc0b8247c8799080fbff54e0b9619e17cdfeb0478ba7295d43f635d7c"}, - {file = "rpds_py-0.22.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:27e98004595899949bd7a7b34e91fa7c44d7a97c40fcaf1d874168bb652ec67e"}, - {file = "rpds_py-0.22.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1978d0021e943aae58b9b0b196fb4895a25cc53d3956b8e35e0b7682eefb6d56"}, - {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:655ca44a831ecb238d124e0402d98f6212ac527a0ba6c55ca26f616604e60a45"}, - {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:feea821ee2a9273771bae61194004ee2fc33f8ec7db08117ef9147d4bbcbca8e"}, - {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22bebe05a9ffc70ebfa127efbc429bc26ec9e9b4ee4d15a740033efda515cf3d"}, - {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3af6e48651c4e0d2d166dc1b033b7042ea3f871504b6805ba5f4fe31581d8d38"}, - {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e67ba3c290821343c192f7eae1d8fd5999ca2dc99994114643e2f2d3e6138b15"}, - {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:02fbb9c288ae08bcb34fb41d516d5eeb0455ac35b5512d03181d755d80810059"}, - {file = "rpds_py-0.22.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f56a6b404f74ab372da986d240e2e002769a7d7102cc73eb238a4f72eec5284e"}, - {file = "rpds_py-0.22.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0a0461200769ab3b9ab7e513f6013b7a97fdeee41c29b9db343f3c5a8e2b9e61"}, - {file = "rpds_py-0.22.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8633e471c6207a039eff6aa116e35f69f3156b3989ea3e2d755f7bc41754a4a7"}, - {file = "rpds_py-0.22.3-cp312-cp312-win32.whl", hash = "sha256:593eba61ba0c3baae5bc9be2f5232430453fb4432048de28399ca7376de9c627"}, - {file = "rpds_py-0.22.3-cp312-cp312-win_amd64.whl", hash = "sha256:d115bffdd417c6d806ea9069237a4ae02f513b778e3789a359bc5856e0404cc4"}, - {file = "rpds_py-0.22.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:ea7433ce7e4bfc3a85654aeb6747babe3f66eaf9a1d0c1e7a4435bbdf27fea84"}, - {file = "rpds_py-0.22.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6dd9412824c4ce1aca56c47b0991e65bebb7ac3f4edccfd3f156150c96a7bf25"}, - {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20070c65396f7373f5df4005862fa162db5d25d56150bddd0b3e8214e8ef45b4"}, - {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0b09865a9abc0ddff4e50b5ef65467cd94176bf1e0004184eb915cbc10fc05c5"}, - {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3453e8d41fe5f17d1f8e9c383a7473cd46a63661628ec58e07777c2fff7196dc"}, - {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f5d36399a1b96e1a5fdc91e0522544580dbebeb1f77f27b2b0ab25559e103b8b"}, - {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:009de23c9c9ee54bf11303a966edf4d9087cd43a6003672e6aa7def643d06518"}, - {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1aef18820ef3e4587ebe8b3bc9ba6e55892a6d7b93bac6d29d9f631a3b4befbd"}, - {file = "rpds_py-0.22.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f60bd8423be1d9d833f230fdbccf8f57af322d96bcad6599e5a771b151398eb2"}, - {file = "rpds_py-0.22.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:62d9cfcf4948683a18a9aff0ab7e1474d407b7bab2ca03116109f8464698ab16"}, - {file = "rpds_py-0.22.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9253fc214112405f0afa7db88739294295f0e08466987f1d70e29930262b4c8f"}, - {file = "rpds_py-0.22.3-cp313-cp313-win32.whl", hash = "sha256:fb0ba113b4983beac1a2eb16faffd76cb41e176bf58c4afe3e14b9c681f702de"}, - {file = "rpds_py-0.22.3-cp313-cp313-win_amd64.whl", hash = "sha256:c58e2339def52ef6b71b8f36d13c3688ea23fa093353f3a4fee2556e62086ec9"}, - {file = "rpds_py-0.22.3-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:f82a116a1d03628a8ace4859556fb39fd1424c933341a08ea3ed6de1edb0283b"}, - {file = "rpds_py-0.22.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3dfcbc95bd7992b16f3f7ba05af8a64ca694331bd24f9157b49dadeeb287493b"}, - {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59259dc58e57b10e7e18ce02c311804c10c5a793e6568f8af4dead03264584d1"}, - {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5725dd9cc02068996d4438d397e255dcb1df776b7ceea3b9cb972bdb11260a83"}, - {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99b37292234e61325e7a5bb9689e55e48c3f5f603af88b1642666277a81f1fbd"}, - {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:27b1d3b3915a99208fee9ab092b8184c420f2905b7d7feb4aeb5e4a9c509b8a1"}, - {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f612463ac081803f243ff13cccc648578e2279295048f2a8d5eb430af2bae6e3"}, - {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f73d3fef726b3243a811121de45193c0ca75f6407fe66f3f4e183c983573e130"}, - {file = "rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:3f21f0495edea7fdbaaa87e633a8689cd285f8f4af5c869f27bc8074638ad69c"}, - {file = "rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:1e9663daaf7a63ceccbbb8e3808fe90415b0757e2abddbfc2e06c857bf8c5e2b"}, - {file = "rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a76e42402542b1fae59798fab64432b2d015ab9d0c8c47ba7addddbaf7952333"}, - {file = "rpds_py-0.22.3-cp313-cp313t-win32.whl", hash = "sha256:69803198097467ee7282750acb507fba35ca22cc3b85f16cf45fb01cb9097730"}, - {file = "rpds_py-0.22.3-cp313-cp313t-win_amd64.whl", hash = "sha256:f5cf2a0c2bdadf3791b5c205d55a37a54025c6e18a71c71f82bb536cf9a454bf"}, - {file = "rpds_py-0.22.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:378753b4a4de2a7b34063d6f95ae81bfa7b15f2c1a04a9518e8644e81807ebea"}, - {file = "rpds_py-0.22.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3445e07bf2e8ecfeef6ef67ac83de670358abf2996916039b16a218e3d95e97e"}, - {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b2513ba235829860b13faa931f3b6846548021846ac808455301c23a101689d"}, - {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eaf16ae9ae519a0e237a0f528fd9f0197b9bb70f40263ee57ae53c2b8d48aeb3"}, - {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:583f6a1993ca3369e0f80ba99d796d8e6b1a3a2a442dd4e1a79e652116413091"}, - {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4617e1915a539a0d9a9567795023de41a87106522ff83fbfaf1f6baf8e85437e"}, - {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c150c7a61ed4a4f4955a96626574e9baf1adf772c2fb61ef6a5027e52803543"}, - {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2fa4331c200c2521512595253f5bb70858b90f750d39b8cbfd67465f8d1b596d"}, - {file = "rpds_py-0.22.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:214b7a953d73b5e87f0ebece4a32a5bd83c60a3ecc9d4ec8f1dca968a2d91e99"}, - {file = "rpds_py-0.22.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:f47ad3d5f3258bd7058d2d506852217865afefe6153a36eb4b6928758041d831"}, - {file = "rpds_py-0.22.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f276b245347e6e36526cbd4a266a417796fc531ddf391e43574cf6466c492520"}, - {file = "rpds_py-0.22.3-cp39-cp39-win32.whl", hash = "sha256:bbb232860e3d03d544bc03ac57855cd82ddf19c7a07651a7c0fdb95e9efea8b9"}, - {file = "rpds_py-0.22.3-cp39-cp39-win_amd64.whl", hash = "sha256:cfbc454a2880389dbb9b5b398e50d439e2e58669160f27b60e5eca11f68ae17c"}, - {file = "rpds_py-0.22.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:d48424e39c2611ee1b84ad0f44fb3b2b53d473e65de061e3f460fc0be5f1939d"}, - {file = "rpds_py-0.22.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:24e8abb5878e250f2eb0d7859a8e561846f98910326d06c0d51381fed59357bd"}, - {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b232061ca880db21fa14defe219840ad9b74b6158adb52ddf0e87bead9e8493"}, - {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac0a03221cdb5058ce0167ecc92a8c89e8d0decdc9e99a2ec23380793c4dcb96"}, - {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb0c341fa71df5a4595f9501df4ac5abfb5a09580081dffbd1ddd4654e6e9123"}, - {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf9db5488121b596dbfc6718c76092fda77b703c1f7533a226a5a9f65248f8ad"}, - {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b8db6b5b2d4491ad5b6bdc2bc7c017eec108acbf4e6785f42a9eb0ba234f4c9"}, - {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b3d504047aba448d70cf6fa22e06cb09f7cbd761939fdd47604f5e007675c24e"}, - {file = "rpds_py-0.22.3-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:e61b02c3f7a1e0b75e20c3978f7135fd13cb6cf551bf4a6d29b999a88830a338"}, - {file = "rpds_py-0.22.3-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:e35ba67d65d49080e8e5a1dd40101fccdd9798adb9b050ff670b7d74fa41c566"}, - {file = "rpds_py-0.22.3-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:26fd7cac7dd51011a245f29a2cc6489c4608b5a8ce8d75661bb4a1066c52dfbe"}, - {file = "rpds_py-0.22.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:177c7c0fce2855833819c98e43c262007f42ce86651ffbb84f37883308cb0e7d"}, - {file = "rpds_py-0.22.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:bb47271f60660803ad11f4c61b42242b8c1312a31c98c578f79ef9387bbde21c"}, - {file = "rpds_py-0.22.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:70fb28128acbfd264eda9bf47015537ba3fe86e40d046eb2963d75024be4d055"}, - {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44d61b4b7d0c2c9ac019c314e52d7cbda0ae31078aabd0f22e583af3e0d79723"}, - {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f0e260eaf54380380ac3808aa4ebe2d8ca28b9087cf411649f96bad6900c728"}, - {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b25bc607423935079e05619d7de556c91fb6adeae9d5f80868dde3468657994b"}, - {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fb6116dfb8d1925cbdb52595560584db42a7f664617a1f7d7f6e32f138cdf37d"}, - {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a63cbdd98acef6570c62b92a1e43266f9e8b21e699c363c0fef13bd530799c11"}, - {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2b8f60e1b739a74bab7e01fcbe3dddd4657ec685caa04681df9d562ef15b625f"}, - {file = "rpds_py-0.22.3-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:2e8b55d8517a2fda8d95cb45d62a5a8bbf9dd0ad39c5b25c8833efea07b880ca"}, - {file = "rpds_py-0.22.3-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:2de29005e11637e7a2361fa151f780ff8eb2543a0da1413bb951e9f14b699ef3"}, - {file = "rpds_py-0.22.3-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:666ecce376999bf619756a24ce15bb14c5bfaf04bf00abc7e663ce17c3f34fe7"}, - {file = "rpds_py-0.22.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:5246b14ca64a8675e0a7161f7af68fe3e910e6b90542b4bfb5439ba752191df6"}, - {file = "rpds_py-0.22.3.tar.gz", hash = "sha256:e32fee8ab45d3c2db6da19a5323bc3362237c8b653c70194414b892fd06a080d"}, + {file = "rpds_py-0.23.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2a54027554ce9b129fc3d633c92fa33b30de9f08bc61b32c053dc9b537266fed"}, + {file = "rpds_py-0.23.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b5ef909a37e9738d146519657a1aab4584018746a18f71c692f2f22168ece40c"}, + {file = "rpds_py-0.23.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ee9d6f0b38efb22ad94c3b68ffebe4c47865cdf4b17f6806d6c674e1feb4246"}, + {file = "rpds_py-0.23.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f7356a6da0562190558c4fcc14f0281db191cdf4cb96e7604c06acfcee96df15"}, + {file = "rpds_py-0.23.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9441af1d25aed96901f97ad83d5c3e35e6cd21a25ca5e4916c82d7dd0490a4fa"}, + {file = "rpds_py-0.23.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d8abf7896a91fb97e7977d1aadfcc2c80415d6dc2f1d0fca5b8d0df247248f3"}, + {file = "rpds_py-0.23.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b08027489ba8fedde72ddd233a5ea411b85a6ed78175f40285bd401bde7466d"}, + {file = "rpds_py-0.23.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fee513135b5a58f3bb6d89e48326cd5aa308e4bcdf2f7d59f67c861ada482bf8"}, + {file = "rpds_py-0.23.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:35d5631ce0af26318dba0ae0ac941c534453e42f569011585cb323b7774502a5"}, + {file = "rpds_py-0.23.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a20cb698c4a59c534c6701b1c24a968ff2768b18ea2991f886bd8985ce17a89f"}, + {file = "rpds_py-0.23.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e9c206a1abc27e0588cf8b7c8246e51f1a16a103734f7750830a1ccb63f557a"}, + {file = "rpds_py-0.23.1-cp310-cp310-win32.whl", hash = "sha256:d9f75a06ecc68f159d5d7603b734e1ff6daa9497a929150f794013aa9f6e3f12"}, + {file = "rpds_py-0.23.1-cp310-cp310-win_amd64.whl", hash = "sha256:f35eff113ad430b5272bbfc18ba111c66ff525828f24898b4e146eb479a2cdda"}, + {file = "rpds_py-0.23.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:b79f5ced71efd70414a9a80bbbfaa7160da307723166f09b69773153bf17c590"}, + {file = "rpds_py-0.23.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c9e799dac1ffbe7b10c1fd42fe4cd51371a549c6e108249bde9cd1200e8f59b4"}, + {file = "rpds_py-0.23.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:721f9c4011b443b6e84505fc00cc7aadc9d1743f1c988e4c89353e19c4a968ee"}, + {file = "rpds_py-0.23.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f88626e3f5e57432e6191cd0c5d6d6b319b635e70b40be2ffba713053e5147dd"}, + {file = "rpds_py-0.23.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:285019078537949cecd0190f3690a0b0125ff743d6a53dfeb7a4e6787af154f5"}, + {file = "rpds_py-0.23.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b92f5654157de1379c509b15acec9d12ecf6e3bc1996571b6cb82a4302060447"}, + {file = "rpds_py-0.23.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e768267cbe051dd8d1c5305ba690bb153204a09bf2e3de3ae530de955f5b5580"}, + {file = "rpds_py-0.23.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c5334a71f7dc1160382d45997e29f2637c02f8a26af41073189d79b95d3321f1"}, + {file = "rpds_py-0.23.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d6adb81564af0cd428910f83fa7da46ce9ad47c56c0b22b50872bc4515d91966"}, + {file = "rpds_py-0.23.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:cafa48f2133d4daa028473ede7d81cd1b9f9e6925e9e4003ebdf77010ee02f35"}, + {file = "rpds_py-0.23.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0fced9fd4a07a1ded1bac7e961ddd9753dd5d8b755ba8e05acba54a21f5f1522"}, + {file = "rpds_py-0.23.1-cp311-cp311-win32.whl", hash = "sha256:243241c95174b5fb7204c04595852fe3943cc41f47aa14c3828bc18cd9d3b2d6"}, + {file = "rpds_py-0.23.1-cp311-cp311-win_amd64.whl", hash = "sha256:11dd60b2ffddba85715d8a66bb39b95ddbe389ad2cfcf42c833f1bcde0878eaf"}, + {file = "rpds_py-0.23.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3902df19540e9af4cc0c3ae75974c65d2c156b9257e91f5101a51f99136d834c"}, + {file = "rpds_py-0.23.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:66f8d2a17e5838dd6fb9be6baaba8e75ae2f5fa6b6b755d597184bfcd3cb0eba"}, + {file = "rpds_py-0.23.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:112b8774b0b4ee22368fec42749b94366bd9b536f8f74c3d4175d4395f5cbd31"}, + {file = "rpds_py-0.23.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e0df046f2266e8586cf09d00588302a32923eb6386ced0ca5c9deade6af9a149"}, + {file = "rpds_py-0.23.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0f3288930b947cbebe767f84cf618d2cbe0b13be476e749da0e6a009f986248c"}, + {file = "rpds_py-0.23.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ce473a2351c018b06dd8d30d5da8ab5a0831056cc53b2006e2a8028172c37ce5"}, + {file = "rpds_py-0.23.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d550d7e9e7d8676b183b37d65b5cd8de13676a738973d330b59dc8312df9c5dc"}, + {file = "rpds_py-0.23.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e14f86b871ea74c3fddc9a40e947d6a5d09def5adc2076ee61fb910a9014fb35"}, + {file = "rpds_py-0.23.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1bf5be5ba34e19be579ae873da515a2836a2166d8d7ee43be6ff909eda42b72b"}, + {file = "rpds_py-0.23.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:d7031d493c4465dbc8d40bd6cafefef4bd472b17db0ab94c53e7909ee781b9ef"}, + {file = "rpds_py-0.23.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:55ff4151cfd4bc635e51cfb1c59ac9f7196b256b12e3a57deb9e5742e65941ad"}, + {file = "rpds_py-0.23.1-cp312-cp312-win32.whl", hash = "sha256:a9d3b728f5a5873d84cba997b9d617c6090ca5721caaa691f3b1a78c60adc057"}, + {file = "rpds_py-0.23.1-cp312-cp312-win_amd64.whl", hash = "sha256:b03a8d50b137ee758e4c73638b10747b7c39988eb8e6cd11abb7084266455165"}, + {file = "rpds_py-0.23.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:4caafd1a22e5eaa3732acb7672a497123354bef79a9d7ceed43387d25025e935"}, + {file = "rpds_py-0.23.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:178f8a60fc24511c0eb756af741c476b87b610dba83270fce1e5a430204566a4"}, + {file = "rpds_py-0.23.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c632419c3870507ca20a37c8f8f5352317aca097639e524ad129f58c125c61c6"}, + {file = "rpds_py-0.23.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:698a79d295626ee292d1730bc2ef6e70a3ab135b1d79ada8fde3ed0047b65a10"}, + {file = "rpds_py-0.23.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:271fa2184cf28bdded86bb6217c8e08d3a169fe0bbe9be5e8d96e8476b707122"}, + {file = "rpds_py-0.23.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b91cceb5add79ee563bd1f70b30896bd63bc5f78a11c1f00a1e931729ca4f1f4"}, + {file = "rpds_py-0.23.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a6cb95074777f1ecda2ca4fa7717caa9ee6e534f42b7575a8f0d4cb0c24013"}, + {file = "rpds_py-0.23.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:50fb62f8d8364978478b12d5f03bf028c6bc2af04082479299139dc26edf4c64"}, + {file = "rpds_py-0.23.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c8f7e90b948dc9dcfff8003f1ea3af08b29c062f681c05fd798e36daa3f7e3e8"}, + {file = "rpds_py-0.23.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5b98b6c953e5c2bda51ab4d5b4f172617d462eebc7f4bfdc7c7e6b423f6da957"}, + {file = "rpds_py-0.23.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2893d778d4671ee627bac4037a075168b2673c57186fb1a57e993465dbd79a93"}, + {file = "rpds_py-0.23.1-cp313-cp313-win32.whl", hash = "sha256:2cfa07c346a7ad07019c33fb9a63cf3acb1f5363c33bc73014e20d9fe8b01cdd"}, + {file = "rpds_py-0.23.1-cp313-cp313-win_amd64.whl", hash = "sha256:3aaf141d39f45322e44fc2c742e4b8b4098ead5317e5f884770c8df0c332da70"}, + {file = "rpds_py-0.23.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:759462b2d0aa5a04be5b3e37fb8183615f47014ae6b116e17036b131985cb731"}, + {file = "rpds_py-0.23.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3e9212f52074fc9d72cf242a84063787ab8e21e0950d4d6709886fb62bcb91d5"}, + {file = "rpds_py-0.23.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9e9f3a3ac919406bc0414bbbd76c6af99253c507150191ea79fab42fdb35982a"}, + {file = "rpds_py-0.23.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c04ca91dda8a61584165825907f5c967ca09e9c65fe8966ee753a3f2b019fe1e"}, + {file = "rpds_py-0.23.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4ab923167cfd945abb9b51a407407cf19f5bee35001221f2911dc85ffd35ff4f"}, + {file = "rpds_py-0.23.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ed6f011bedca8585787e5082cce081bac3d30f54520097b2411351b3574e1219"}, + {file = "rpds_py-0.23.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6959bb9928c5c999aba4a3f5a6799d571ddc2c59ff49917ecf55be2bbb4e3722"}, + {file = "rpds_py-0.23.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1ed7de3c86721b4e83ac440751329ec6a1102229aa18163f84c75b06b525ad7e"}, + {file = "rpds_py-0.23.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:5fb89edee2fa237584e532fbf78f0ddd1e49a47c7c8cfa153ab4849dc72a35e6"}, + {file = "rpds_py-0.23.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:7e5413d2e2d86025e73f05510ad23dad5950ab8417b7fc6beaad99be8077138b"}, + {file = "rpds_py-0.23.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:d31ed4987d72aabdf521eddfb6a72988703c091cfc0064330b9e5f8d6a042ff5"}, + {file = "rpds_py-0.23.1-cp313-cp313t-win32.whl", hash = "sha256:f3429fb8e15b20961efca8c8b21432623d85db2228cc73fe22756c6637aa39e7"}, + {file = "rpds_py-0.23.1-cp313-cp313t-win_amd64.whl", hash = "sha256:d6f6512a90bd5cd9030a6237f5346f046c6f0e40af98657568fa45695d4de59d"}, + {file = "rpds_py-0.23.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:09cd7dbcb673eb60518231e02874df66ec1296c01a4fcd733875755c02014b19"}, + {file = "rpds_py-0.23.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c6760211eee3a76316cf328f5a8bd695b47b1626d21c8a27fb3b2473a884d597"}, + {file = "rpds_py-0.23.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72e680c1518733b73c994361e4b06441b92e973ef7d9449feec72e8ee4f713da"}, + {file = "rpds_py-0.23.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ae28144c1daa61366205d32abd8c90372790ff79fc60c1a8ad7fd3c8553a600e"}, + {file = "rpds_py-0.23.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c698d123ce5d8f2d0cd17f73336615f6a2e3bdcedac07a1291bb4d8e7d82a05a"}, + {file = "rpds_py-0.23.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98b257ae1e83f81fb947a363a274c4eb66640212516becaff7bef09a5dceacaa"}, + {file = "rpds_py-0.23.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c9ff044eb07c8468594d12602291c635da292308c8c619244e30698e7fc455a"}, + {file = "rpds_py-0.23.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7938c7b0599a05246d704b3f5e01be91a93b411d0d6cc62275f025293b8a11ce"}, + {file = "rpds_py-0.23.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:e9cb79ecedfc156c0692257ac7ed415243b6c35dd969baa461a6888fc79f2f07"}, + {file = "rpds_py-0.23.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:7b77e07233925bd33fc0022b8537774423e4c6680b6436316c5075e79b6384f4"}, + {file = "rpds_py-0.23.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a970bfaf130c29a679b1d0a6e0f867483cea455ab1535fb427566a475078f27f"}, + {file = "rpds_py-0.23.1-cp39-cp39-win32.whl", hash = "sha256:4233df01a250b3984465faed12ad472f035b7cd5240ea3f7c76b7a7016084495"}, + {file = "rpds_py-0.23.1-cp39-cp39-win_amd64.whl", hash = "sha256:c617d7453a80e29d9973b926983b1e700a9377dbe021faa36041c78537d7b08c"}, + {file = "rpds_py-0.23.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c1f8afa346ccd59e4e5630d5abb67aba6a9812fddf764fd7eb11f382a345f8cc"}, + {file = "rpds_py-0.23.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:fad784a31869747df4ac968a351e070c06ca377549e4ace94775aaa3ab33ee06"}, + {file = "rpds_py-0.23.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5a96fcac2f18e5a0a23a75cd27ce2656c66c11c127b0318e508aab436b77428"}, + {file = "rpds_py-0.23.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3e77febf227a1dc3220159355dba68faa13f8dca9335d97504abf428469fb18b"}, + {file = "rpds_py-0.23.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:26bb3e8de93443d55e2e748e9fd87deb5f8075ca7bc0502cfc8be8687d69a2ec"}, + {file = "rpds_py-0.23.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:db7707dde9143a67b8812c7e66aeb2d843fe33cc8e374170f4d2c50bd8f2472d"}, + {file = "rpds_py-0.23.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1eedaaccc9bb66581d4ae7c50e15856e335e57ef2734dbc5fd8ba3e2a4ab3cb6"}, + {file = "rpds_py-0.23.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:28358c54fffadf0ae893f6c1050e8f8853e45df22483b7fff2f6ab6152f5d8bf"}, + {file = "rpds_py-0.23.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:633462ef7e61d839171bf206551d5ab42b30b71cac8f10a64a662536e057fdef"}, + {file = "rpds_py-0.23.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:a98f510d86f689fcb486dc59e6e363af04151e5260ad1bdddb5625c10f1e95f8"}, + {file = "rpds_py-0.23.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e0397dd0b3955c61ef9b22838144aa4bef6f0796ba5cc8edfc64d468b93798b4"}, + {file = "rpds_py-0.23.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:75307599f0d25bf6937248e5ac4e3bde5ea72ae6618623b86146ccc7845ed00b"}, + {file = "rpds_py-0.23.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3614d280bf7aab0d3721b5ce0e73434acb90a2c993121b6e81a1c15c665298ac"}, + {file = "rpds_py-0.23.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:e5963ea87f88bddf7edd59644a35a0feecf75f8985430124c253612d4f7d27ae"}, + {file = "rpds_py-0.23.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad76f44f70aac3a54ceb1813ca630c53415da3a24fd93c570b2dfb4856591017"}, + {file = "rpds_py-0.23.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2c6ae11e6e93728d86aafc51ced98b1658a0080a7dd9417d24bfb955bb09c3c2"}, + {file = "rpds_py-0.23.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc869af5cba24d45fb0399b0cfdbcefcf6910bf4dee5d74036a57cf5264b3ff4"}, + {file = "rpds_py-0.23.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c76b32eb2ab650a29e423525e84eb197c45504b1c1e6e17b6cc91fcfeb1a4b1d"}, + {file = "rpds_py-0.23.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4263320ed887ed843f85beba67f8b2d1483b5947f2dc73a8b068924558bfeace"}, + {file = "rpds_py-0.23.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7f9682a8f71acdf59fd554b82b1c12f517118ee72c0f3944eda461606dfe7eb9"}, + {file = "rpds_py-0.23.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:754fba3084b70162a6b91efceee8a3f06b19e43dac3f71841662053c0584209a"}, + {file = "rpds_py-0.23.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:a1c66e71ecfd2a4acf0e4bd75e7a3605afa8f9b28a3b497e4ba962719df2be57"}, + {file = "rpds_py-0.23.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:8d67beb6002441faef8251c45e24994de32c4c8686f7356a1f601ad7c466f7c3"}, + {file = "rpds_py-0.23.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a1e17d8dc8e57d8e0fd21f8f0f0a5211b3fa258b2e444c2053471ef93fe25a00"}, + {file = "rpds_py-0.23.1.tar.gz", hash = "sha256:7f3240dcfa14d198dba24b8b9cb3b108c06b68d45b7babd9eefc1038fdf7e707"}, ] [[package]] @@ -3471,4 +3465,4 @@ files = [ [metadata] lock-version = "2.1" python-versions = ">=3.11" -content-hash = "10fe74ba95ff02ef8aae0800183c29ce6c953dbea09966f30d751c09abc6fd0a" +content-hash = "1f4b9a615d9ced4bdf111d7d4694f7f36591e371e306b48806638655d3e7a6b8" diff --git a/pyproject.toml b/pyproject.toml index 822abff..0b73a8c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -42,8 +42,8 @@ tree-sitter-c = "0.23.5" tree-sitter-go = "0.23.4" tree-sitter-python = "0.23.6" tree-sitter-javascript = "0.23.1" -libclang = "^18.1.1" -clang = "^17.0.6" +clang = "17.0.6" +libclang = "17.0.6" [tool.poetry.group.dev.dependencies] ipdb = "^0.13.13" @@ -113,6 +113,7 @@ title = "Test Coverage Report" directory = "coverage_html_report" [tool.cldk.testing] +sample-c-application = "tests/resources/c/application/" sample-application = "tests/resources/java/application/" sample-application-analysis-json = "tests/resources/java/analysis_json/" codeanalyzer-jar-path = "tests/resources/java/codeanalyzer_jars/" diff --git a/tests/analysis/c/test_c_analysis.py b/tests/analysis/c/test_c_analysis.py new file mode 100644 index 0000000..7269d0c --- /dev/null +++ b/tests/analysis/c/test_c_analysis.py @@ -0,0 +1,26 @@ +################################################################################ +# Copyright IBM Corporation 2024, 2025 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +################################################################################ + +""" +C/C++ Tests +""" +from cldk.analysis.c.c_analysis import CAnalysis + + +def test_get_c_application(test_fixture_binutils): + """Should return a CAnalysis object""" + analysis = CAnalysis(test_fixture_binutils) + assert isinstance(analysis, CAnalysis), "get_c_application should return a CAnalysis object" diff --git a/tests/analysis/java/test_java_analysis.py b/tests/analysis/java/test_java_analysis.py index f3c5780..21765f6 100644 --- a/tests/analysis/java/test_java_analysis.py +++ b/tests/analysis/java/test_java_analysis.py @@ -35,7 +35,7 @@ def test_get_symbol_table_is_not_null(test_fixture, analysis_json): - """return a symbol table that is not null""" + """Should return a symbol table that is not null""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -54,7 +54,7 @@ def test_get_symbol_table_is_not_null(test_fixture, analysis_json): # def test_get_class_call_graph(test_fixture, analysis_json): -# """return the class call graph""" +# """Should return the class call graph""" # # Patch subprocess so that it does not run codeanalyzer # with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: # run_mock.return_value = MagicMock(stdout=analysis_json, returncode=0) @@ -76,7 +76,7 @@ def test_get_symbol_table_is_not_null(test_fixture, analysis_json): def test_get_imports(test_fixture, analysis_json): - """return NotImplemented for get_imports()""" + """Should return NotImplemented for get_imports()""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -100,7 +100,7 @@ def test_get_imports(test_fixture, analysis_json): def test_get_variables(test_fixture, analysis_json): - """return NotImplemented for get_variables()""" + """Should return NotImplemented for get_variables()""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -124,7 +124,7 @@ def test_get_variables(test_fixture, analysis_json): def test_get_service_entry_point_classes(test_fixture, analysis_json): - """return NotImplemented for get_service_entry_point_classes()""" + """Should return NotImplemented for get_service_entry_point_classes()""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -148,7 +148,7 @@ def test_get_service_entry_point_classes(test_fixture, analysis_json): def test_get_service_entry_point_methods(test_fixture, analysis_json): - """return NotImplemented for get_service_entry_point_methods()""" + """Should return NotImplemented for get_service_entry_point_methods()""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -172,7 +172,7 @@ def test_get_service_entry_point_methods(test_fixture, analysis_json): def test_get_application_view(test_fixture, analysis_json): - """return the application view""" + """Should return the application view""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -204,7 +204,7 @@ def test_get_application_view(test_fixture, analysis_json): def test_get_symbol_table(test_fixture, analysis_json): - """return the symbol table""" + """Should return the symbol table""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -229,7 +229,7 @@ def test_get_symbol_table(test_fixture, analysis_json): def test_get_compilation_units(test_fixture, analysis_json): - """return the compilation units""" + """Should return the compilation units""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -253,7 +253,7 @@ def test_get_compilation_units(test_fixture, analysis_json): def test_get_class_hierarchy(test_fixture, analysis_json): - """return the class hierarchy""" + """Should return the class hierarchy""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -277,7 +277,7 @@ def test_get_class_hierarchy(test_fixture, analysis_json): def test_is_parsable(test_fixture, analysis_json): - """be parsable""" + """Should be parsable""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -303,7 +303,7 @@ def test_is_parsable(test_fixture, analysis_json): def test_get_raw_ast(test_fixture, analysis_json): - """return the raw AST""" + """Should return the raw AST""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -332,7 +332,7 @@ def test_get_raw_ast(test_fixture, analysis_json): def test_get_call_graph(test_fixture, analysis_json): - """return the Call Graph""" + """Should return the Call Graph""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -358,7 +358,7 @@ def test_get_call_graph(test_fixture, analysis_json): def test_get_call_graph_json(test_fixture, analysis_json): - """return the Call Graph as JSON""" + """Should return the Call Graph as JSON""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -386,7 +386,7 @@ def test_get_call_graph_json(test_fixture, analysis_json): def test_get_callers(test_fixture, analysis_json): - """return the callers""" + """Should return the callers""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -433,7 +433,7 @@ def test_get_callers(test_fixture, analysis_json): def test_get_callees(test_fixture, analysis_json): - """return the callees""" + """Should return the callees""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -485,7 +485,7 @@ def test_get_callees(test_fixture, analysis_json): def test_get_methods(test_fixture, analysis_json): - """return the methods""" + """Should return the methods""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -517,7 +517,7 @@ def test_get_methods(test_fixture, analysis_json): def test_get_classes(test_fixture, analysis_json): - """return the classes""" + """Should return the classes""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -549,7 +549,7 @@ def test_get_classes(test_fixture, analysis_json): def test_get_classes_by_criteria(test_fixture, analysis_json): - """return the classes by criteria""" + """Should return the classes by criteria""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -596,7 +596,7 @@ def test_get_classes_by_criteria(test_fixture, analysis_json): def test_get_class(test_fixture, analysis_json): - """return a single class""" + """Should return a single class""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -625,7 +625,7 @@ def test_get_class(test_fixture, analysis_json): def test_get_method(test_fixture, analysis_json): - """return a single method""" + """Should return a single method""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -655,7 +655,7 @@ def test_get_method(test_fixture, analysis_json): def test_get_java_file(test_fixture, analysis_json): - """return the java file and compilation unit""" + """Should return the java file and compilation unit""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -692,7 +692,7 @@ def test_get_java_file(test_fixture, analysis_json): def test_get_methods_in_class(test_fixture, analysis_json): - """return the methods in a class""" + """Should return the methods in a class""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -725,7 +725,7 @@ def test_get_methods_in_class(test_fixture, analysis_json): def test_get_fields(test_fixture, analysis_json): - """return the fields for a class""" + """Should return the fields for a class""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -758,7 +758,7 @@ def test_get_fields(test_fixture, analysis_json): def test_get_nested_classes(test_fixture, analysis_json): - """return the nested classes for a class""" + """Should return the nested classes for a class""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -784,7 +784,7 @@ def test_get_nested_classes(test_fixture, analysis_json): def test_get_sub_classes(test_fixture, analysis_json): - """return the subclasses for a class""" + """Should return the subclasses for a class""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -817,7 +817,7 @@ def test_get_sub_classes(test_fixture, analysis_json): def test_get_extended_classes(test_fixture, analysis_json): - """return the extended classes for a class""" + """Should return the extended classes for a class""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -856,7 +856,7 @@ def test_get_extended_classes(test_fixture, analysis_json): def test_get_implemented_interfaces(test_fixture, analysis_json): - """return the implemented interfaces classes for a class""" + """Should return the implemented interfaces classes for a class""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -895,7 +895,7 @@ def test_get_implemented_interfaces(test_fixture, analysis_json): def test_get_class_call_graph(test_fixture, analysis_json): - """return the class call graph""" + """Should return the class call graph""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -936,7 +936,7 @@ def test_get_class_call_graph(test_fixture, analysis_json): def test_get_entry_point_classes(test_fixture, analysis_json): - """return the entry point classes""" + """Should return the entry point classes""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -968,7 +968,7 @@ def test_get_entry_point_classes(test_fixture, analysis_json): def test_get_entry_point_methods(test_fixture, analysis_json): - """return the entry point methods""" + """Should return the entry point methods""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -1031,7 +1031,7 @@ def test_remove_all_comments(test_fixture, analysis_json): def test_get_methods_with_annotations(test_fixture, analysis_json): - """return methods with annotations""" + """Should return methods with annotations""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -1061,7 +1061,7 @@ def test_get_methods_with_annotations(test_fixture, analysis_json): def test_get_test_methods(test_fixture, analysis_json): - """return test methods""" + """Should return test methods""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -1099,7 +1099,7 @@ def test_get_test_methods(test_fixture, analysis_json): def test_get_calling_lines(test_fixture, analysis_json): - """return calling lines""" + """Should return calling lines""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -1137,7 +1137,7 @@ def test_get_calling_lines(test_fixture, analysis_json): def test_get_call_targets(test_fixture, analysis_json): - """return calling targets""" + """Should return calling targets""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: diff --git a/tests/analysis/java/test_java_sitter.py b/tests/analysis/java/test_java_sitter.py index a168721..3dc6278 100644 --- a/tests/analysis/java/test_java_sitter.py +++ b/tests/analysis/java/test_java_sitter.py @@ -44,7 +44,7 @@ def test_method_is_not_in_class(test_fixture): def test_is_parsable(test_fixture): - """be able to parse the file""" + """Should be able to parse the file""" java_sitter = JavaSitter() # Get a test source file and send its contents @@ -63,7 +63,7 @@ def test_is_parsable(test_fixture): def test_get_raw_ast(test_fixture): - """return the raw AST""" + """Should return the raw AST""" java_sitter = JavaSitter() # Get a test source file and send its contents @@ -78,7 +78,7 @@ def test_get_raw_ast(test_fixture): def test_get_all_imports(test_fixture): - """return all of the imports""" + """Should return all of the imports""" java_sitter = JavaSitter() # Get a test source file and send its contents @@ -97,7 +97,7 @@ def test_get_all_imports(test_fixture): def test_get_package_name(test_fixture): - """return the package name""" + """Should return the package name""" java_sitter = JavaSitter() # Get a test source file and send its contents @@ -112,7 +112,7 @@ def test_get_package_name(test_fixture): def test_get_class_name(test_fixture): - """return the class name""" + """Should return the class name""" java_sitter = JavaSitter() # Get a test source file and send its contents @@ -127,7 +127,7 @@ def test_get_class_name(test_fixture): def test_get_superclass(test_fixture): - """return the superclass name""" + """Should return the superclass name""" java_sitter = JavaSitter() # Get a test source file with no supper class @@ -157,7 +157,7 @@ def test_get_superclass(test_fixture): def test_get_all_interfaces(test_fixture): - """return all interfaces""" + """Should return all interfaces""" java_sitter = JavaSitter() # Get a test source file with interfaces @@ -184,7 +184,7 @@ def test_get_all_interfaces(test_fixture): def test_get_method_name_from_declaration(): - """return the method name from a declarations""" + """Should return the method name from a declarations""" java_sitter = JavaSitter() declaration = "public Future submitOrder(Integer orderID, boolean twoPhase)" @@ -195,7 +195,7 @@ def test_get_method_name_from_declaration(): def test_get_method_name_from_invocation(): - """return the method name from an invocation""" + """Should return the method name from an invocation""" java_sitter = JavaSitter() invocation = "asyncOrder.setProperties(orderID,twoPhase);" @@ -206,7 +206,7 @@ def test_get_method_name_from_invocation(): def test_get_identifier_from_arbitrary_statement(): - """return the method name from an arbitrary statement""" + """Should return the method name from an arbitrary statement""" java_sitter = JavaSitter() arbitrary_statement = "asyncOrder.setProperties(orderID,twoPhase);" @@ -295,7 +295,7 @@ def test_get_calling_lines(): def test_get_test_methods(test_fixture): - """return the test methods""" + """Should return the test methods""" java_sitter = JavaSitter() # TODO: Need to find an example with test methods @@ -312,7 +312,7 @@ def test_get_test_methods(test_fixture): def test_get_methods_with_annotations(test_fixture): - """return methods with annotations""" + """Should return methods with annotations""" java_sitter = JavaSitter() # Get a test source file with annotations @@ -333,7 +333,7 @@ def test_get_methods_with_annotations(test_fixture): def test_get_all_type_invocations(test_fixture): - """return all of the type invocations""" + """Should return all of the type invocations""" java_sitter = JavaSitter() # Get a test source file @@ -376,7 +376,7 @@ def test_get_method_return_type(): def test_get_lexical_tokens(test_fixture): - """return the lexical tokens""" + """Should return the lexical tokens""" java_sitter = JavaSitter() # Get a test source file diff --git a/tests/analysis/java/test_jcodeanalyzer.py b/tests/analysis/java/test_jcodeanalyzer.py index efde527..c0395d9 100644 --- a/tests/analysis/java/test_jcodeanalyzer.py +++ b/tests/analysis/java/test_jcodeanalyzer.py @@ -31,7 +31,7 @@ def test_init_japplication(test_fixture, codeanalyzer_jar_path, analysis_json): - """return the initialized JApplication""" + """Should return the initialized JApplication""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -52,7 +52,7 @@ def test_init_japplication(test_fixture, codeanalyzer_jar_path, analysis_json): def test_init_codeanalyzer_no_json_path(test_fixture, analysis_json): - """initialize the codeanalyzer without a json path""" + """Should initialize the codeanalyzer without a json path""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -73,7 +73,7 @@ def test_init_codeanalyzer_no_json_path(test_fixture, analysis_json): def test_init_codeanalyzer_with_json_path(test_fixture, analysis_json, analysis_json_fixture): - """initialize the codeanalyzer with a json path""" + """Should initialize the codeanalyzer with a json path""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -106,7 +106,7 @@ def test_init_codeanalyzer_with_json_path(test_fixture, analysis_json, analysis_ def test_get_codeanalyzer_exec(test_fixture, codeanalyzer_jar_path, analysis_json): - """return the correct codeanalyzer location""" + """Should return the correct codeanalyzer location""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -142,7 +142,7 @@ def test_get_codeanalyzer_exec(test_fixture, codeanalyzer_jar_path, analysis_jso def test_generate_call_graph(test_fixture, analysis_json): - """generate a graph""" + """Should generate a graph""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -173,7 +173,7 @@ def test_generate_call_graph(test_fixture, analysis_json): def test_codeanalyzer_single_file(test_fixture, analysis_json): - """process a single file""" + """Should process a single file""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -194,7 +194,7 @@ def test_codeanalyzer_single_file(test_fixture, analysis_json): def test_get_application(test_fixture, analysis_json): - """return the application""" + """Should return the application""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -216,7 +216,7 @@ def test_get_application(test_fixture, analysis_json): def test_get_symbol_table(test_fixture, analysis_json): - """return the symbol table""" + """Should return the symbol table""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -240,7 +240,7 @@ def test_get_symbol_table(test_fixture, analysis_json): def test_get_application_view(test_fixture, analysis_json): - """return an application view""" + """Should return an application view""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -268,7 +268,7 @@ def test_get_application_view(test_fixture, analysis_json): def test_get_system_dependency_graph(test_fixture, analysis_json): - """return an system dependency graph""" + """Should return an system dependency graph""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -292,7 +292,7 @@ def test_get_system_dependency_graph(test_fixture, analysis_json): def test_get_call_graph(test_fixture, analysis_json): - """return a call graph""" + """Should return a call graph""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -319,7 +319,7 @@ def test_get_call_graph(test_fixture, analysis_json): def test_get_call_graph_json(test_fixture, analysis_json): - """return the call graph as json""" + """Should return the call graph as json""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -343,7 +343,7 @@ def test_get_call_graph_json(test_fixture, analysis_json): def test_get_all_callers(test_fixture, analysis_json): - """return all of the callers""" + """Should return all of the callers""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -380,7 +380,7 @@ def test_get_all_callers(test_fixture, analysis_json): def test_get_all_callees(test_fixture, analysis_json): - """return all of the callees""" + """Should return all of the callees""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -415,7 +415,7 @@ def test_get_all_callees(test_fixture, analysis_json): def test_get_all_classes(test_fixture, analysis_json): - """return all of the classes in an application""" + """Should return all of the classes in an application""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -442,7 +442,7 @@ def test_get_all_classes(test_fixture, analysis_json): def test_get_class(test_fixture, analysis_json): - """return a class given the qualified name""" + """Should return a class given the qualified name""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -464,7 +464,7 @@ def test_get_class(test_fixture, analysis_json): def test_get_method(test_fixture, analysis_json): - """return the method""" + """Should return the method""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -486,7 +486,7 @@ def test_get_method(test_fixture, analysis_json): def test_get_java_file(test_fixture, analysis_json): - """return the java file for a class""" + """Should return the java file for a class""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -515,7 +515,7 @@ def test_get_java_file(test_fixture, analysis_json): def test_get_all_methods_in_class(test_fixture, analysis_json): - """return all of the methods for a class""" + """Should return all of the methods for a class""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -542,7 +542,7 @@ def test_get_all_methods_in_class(test_fixture, analysis_json): def test_get_all_constructors(test_fixture, analysis_json): - """return all of the constructors for a class""" + """Should return all of the constructors for a class""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -576,7 +576,7 @@ def test_get_all_constructors(test_fixture, analysis_json): def test_get_all_sub_classes(test_fixture, analysis_json): - """return all of the subclasses for a class""" + """Should return all of the subclasses for a class""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -600,7 +600,7 @@ def test_get_all_sub_classes(test_fixture, analysis_json): def test_get_all_fields(test_fixture, analysis_json): - """return all of the fields for a class""" + """Should return all of the fields for a class""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -629,7 +629,7 @@ def test_get_all_fields(test_fixture, analysis_json): def test_get_all_nested_classes(test_fixture, analysis_json): - """return all the nested classes for a class""" + """Should return all the nested classes for a class""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -655,7 +655,7 @@ def test_get_all_nested_classes(test_fixture, analysis_json): def test_get_extended_classes(test_fixture, analysis_json): - """return all of the extended classes for a class""" + """Should return all of the extended classes for a class""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -685,7 +685,7 @@ def test_get_extended_classes(test_fixture, analysis_json): def test_get_implemented_interfaces(test_fixture, analysis_json): - """return all of the implemented interfaces for a class""" + """Should return all of the implemented interfaces for a class""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -717,7 +717,7 @@ def test_get_implemented_interfaces(test_fixture, analysis_json): def test_get_class_call_graph_using_symbol_table(test_fixture, analysis_json): - """return the call graph using the symbol table""" + """Should return the call graph using the symbol table""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -734,8 +734,7 @@ def test_get_class_call_graph_using_symbol_table(test_fixture, analysis_json): ) # Call without method signature - all_call_graph = code_analyzer.get_class_call_graph_using_symbol_table("com.ibm.websphere.samples.daytrader" - ".impl.direct.AsyncOrder", None) + all_call_graph = code_analyzer.get_class_call_graph_using_symbol_table("com.ibm.websphere.samples.daytrader" ".impl.direct.AsyncOrder", None) assert all_call_graph is not None assert isinstance(all_call_graph, List) @@ -745,7 +744,7 @@ def test_get_class_call_graph_using_symbol_table(test_fixture, analysis_json): def test_get_class_call_graph(test_fixture, analysis_json): - """return the call graph""" + """Should return the call graph""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -781,7 +780,7 @@ def test_get_class_call_graph(test_fixture, analysis_json): def test_get_all_methods_in_application(test_fixture, analysis_json): - """return all of the methods in an application""" + """Should return all of the methods in an application""" # Patch subprocess so that it does not run codeanalyzer with patch("cldk.analysis.java.codeanalyzer.codeanalyzer.subprocess.run") as run_mock: @@ -810,7 +809,7 @@ def test_get_all_methods_in_application(test_fixture, analysis_json): def test_get_all_entrypoint_methods_in_application(test_fixture, codeanalyzer_jar_path): - """return all of the entrypoint methods in an application""" + """Should return all of the entrypoint methods in an application""" code_analyzer = JCodeanalyzer( project_dir=test_fixture, source_code=None, @@ -836,7 +835,7 @@ def test_get_all_entrypoint_methods_in_application(test_fixture, codeanalyzer_ja def test_get_all_entrypoint_classes_in_the_application(test_fixture, codeanalyzer_jar_path): - """return all of the entrypoint classes in an application""" + """Should return all of the entrypoint classes in an application""" code_analyzer = JCodeanalyzer( project_dir=test_fixture, source_code=None, @@ -859,7 +858,7 @@ def test_get_all_entrypoint_classes_in_the_application(test_fixture, codeanalyze def test_get_all_get_crud_operations(test_fixture_pbw, codeanalyzer_jar_path): - """return all of the CRUD operations in an application""" + """Should return all of the CRUD operations in an application""" code_analyzer = JCodeanalyzer( project_dir=test_fixture_pbw, source_code=None, @@ -884,7 +883,7 @@ def test_get_all_get_crud_operations(test_fixture_pbw, codeanalyzer_jar_path): def test_get_all_get_crud_read_operations(test_fixture_pbw, codeanalyzer_jar_path): - """return all of the CRUD read operations in an application""" + """Should return all of the CRUD read operations in an application""" code_analyzer = JCodeanalyzer( project_dir=test_fixture_pbw, source_code=None, @@ -909,7 +908,7 @@ def test_get_all_get_crud_read_operations(test_fixture_pbw, codeanalyzer_jar_pat def test_get_all_get_crud_create_operations(test_fixture_pbw, codeanalyzer_jar_path): - """return all of the CRUD create operations in an application""" + """Should return all of the CRUD create operations in an application""" code_analyzer = JCodeanalyzer( project_dir=test_fixture_pbw, source_code=None, @@ -934,7 +933,7 @@ def test_get_all_get_crud_create_operations(test_fixture_pbw, codeanalyzer_jar_p def test_get_all_get_crud_update_operations(test_fixture_pbw, codeanalyzer_jar_path): - """return all of the CRUD update operations in an application""" + """Should return all of the CRUD update operations in an application""" code_analyzer = JCodeanalyzer( project_dir=test_fixture_pbw, source_code=None, @@ -959,7 +958,7 @@ def test_get_all_get_crud_update_operations(test_fixture_pbw, codeanalyzer_jar_p def test_get_all_get_crud_delete_operations(test_fixture_pbw, codeanalyzer_jar_path): - """return all of the CRUD delete operations in an application""" + """Should return all of the CRUD delete operations in an application""" code_analyzer = JCodeanalyzer( project_dir=test_fixture_pbw, source_code=None, @@ -984,7 +983,7 @@ def test_get_all_get_crud_delete_operations(test_fixture_pbw, codeanalyzer_jar_p def test_get_all_get_crud_operations_daytrader8(test_fixture, codeanalyzer_jar_path): - """return all of the CRUD operations in an application""" + """Should return all of the CRUD operations in an application""" code_analyzer = JCodeanalyzer( project_dir=test_fixture, source_code=None, diff --git a/tests/analysis/python/test_python_analysis.py b/tests/analysis/python/test_python_analysis.py index edce8cf..8329bfc 100644 --- a/tests/analysis/python/test_python_analysis.py +++ b/tests/analysis/python/test_python_analysis.py @@ -67,7 +67,7 @@ def divide(self, a, b): def test_not_implemented(): - """return raise a not implemented exception""" + """Should return raise a not implemented exception""" # test with CodeQL with pytest.raises(NotImplementedError) as except_info: _ = PythonAnalysis( @@ -89,7 +89,7 @@ def test_not_implemented(): def test_get_methods(): - """return all of the methods""" + """Should return all of the methods""" python_analysis = PythonAnalysis( analysis_backend=AnalysisEngine.TREESITTER, eager_analysis=True, project_dir=None, source_code=PYTHON_CODE, analysis_backend_path=None, analysis_json_path=None ) @@ -103,7 +103,7 @@ def test_get_methods(): def test_get_functions(): - """return all of the functions""" + """Should return all of the functions""" python_analysis = PythonAnalysis( analysis_backend=AnalysisEngine.TREESITTER, eager_analysis=True, project_dir=None, source_code=PYTHON_CODE, analysis_backend_path=None, analysis_json_path=None ) @@ -117,7 +117,7 @@ def test_get_functions(): def test_get_all_modules(tmp_path): - """return all of the modules""" + """Should return all of the modules""" python_analysis = PythonAnalysis( analysis_backend=AnalysisEngine.TREESITTER, eager_analysis=True, project_dir=tmp_path, source_code=None, analysis_backend_path=None, analysis_json_path=None ) @@ -139,7 +139,7 @@ def test_get_all_modules(tmp_path): def test_get_method_details(): - """return the method details""" + """Should return the method details""" python_analysis = PythonAnalysis( analysis_backend=AnalysisEngine.TREESITTER, eager_analysis=True, project_dir=None, source_code=PYTHON_CODE, analysis_backend_path=None, analysis_json_path=None ) @@ -151,7 +151,7 @@ def test_get_method_details(): def test_is_parsable(): - """be able to parse the code""" + """Should be able to parse the code""" python_analysis = PythonAnalysis( analysis_backend=AnalysisEngine.TREESITTER, eager_analysis=True, project_dir=None, source_code=PYTHON_CODE, analysis_backend_path=None, analysis_json_path=None ) @@ -166,7 +166,7 @@ def test_is_parsable(): def test_get_raw_ast(): - """return the raw AST""" + """Should return the raw AST""" python_analysis = PythonAnalysis( analysis_backend=AnalysisEngine.TREESITTER, eager_analysis=True, project_dir=None, source_code=PYTHON_CODE, analysis_backend_path=None, analysis_json_path=None ) @@ -178,7 +178,7 @@ def test_get_raw_ast(): def test_get_imports(): - """return all of the imports""" + """Should return all of the imports""" python_analysis = PythonAnalysis( analysis_backend=AnalysisEngine.TREESITTER, eager_analysis=True, project_dir=None, source_code=PYTHON_CODE, analysis_backend_path=None, analysis_json_path=None ) @@ -192,7 +192,7 @@ def test_get_imports(): def test_get_variables(): - """return all of the variables""" + """Should return all of the variables""" python_analysis = PythonAnalysis( analysis_backend=AnalysisEngine.TREESITTER, eager_analysis=True, project_dir=None, source_code=PYTHON_CODE, analysis_backend_path=None, analysis_json_path=None ) @@ -203,7 +203,7 @@ def test_get_variables(): def test_get_classes(): - """return all of the classes""" + """Should return all of the classes""" python_analysis = PythonAnalysis( analysis_backend=AnalysisEngine.TREESITTER, eager_analysis=True, project_dir=None, source_code=PYTHON_CODE, analysis_backend_path=None, analysis_json_path=None ) @@ -218,7 +218,7 @@ def test_get_classes(): def test_get_classes_by_criteria(): - """return all of the classes that match the criteria""" + """Should return all of the classes that match the criteria""" python_analysis = PythonAnalysis( analysis_backend=AnalysisEngine.TREESITTER, eager_analysis=True, project_dir=None, source_code=PYTHON_CODE, analysis_backend_path=None, analysis_json_path=None ) @@ -229,7 +229,7 @@ def test_get_classes_by_criteria(): def test_get_sub_classes(): - """return all of the subclasses""" + """Should return all of the subclasses""" python_analysis = PythonAnalysis( analysis_backend=AnalysisEngine.TREESITTER, eager_analysis=True, project_dir=None, source_code=PYTHON_CODE, analysis_backend_path=None, analysis_json_path=None ) @@ -240,7 +240,7 @@ def test_get_sub_classes(): def test_get_nested_classes(): - """return all of the nested classes""" + """Should return all of the nested classes""" python_analysis = PythonAnalysis( analysis_backend=AnalysisEngine.TREESITTER, eager_analysis=True, project_dir=None, source_code=PYTHON_CODE, analysis_backend_path=None, analysis_json_path=None ) @@ -251,7 +251,7 @@ def test_get_nested_classes(): def test_get_constructors(): - """return all of the constructors""" + """Should return all of the constructors""" python_analysis = PythonAnalysis( analysis_backend=AnalysisEngine.TREESITTER, eager_analysis=True, project_dir=None, source_code=PYTHON_CODE, analysis_backend_path=None, analysis_json_path=None ) @@ -262,7 +262,7 @@ def test_get_constructors(): def test_get_methods_in_class(): - """return all of the methods in the class""" + """Should return all of the methods in the class""" python_analysis = PythonAnalysis( analysis_backend=AnalysisEngine.TREESITTER, eager_analysis=True, project_dir=None, source_code=PYTHON_CODE, analysis_backend_path=None, analysis_json_path=None ) @@ -273,7 +273,7 @@ def test_get_methods_in_class(): def test_get_fields(): - """return all of the fields in the class""" + """Should return all of the fields in the class""" python_analysis = PythonAnalysis( analysis_backend=AnalysisEngine.TREESITTER, eager_analysis=True, project_dir=None, source_code=PYTHON_CODE, analysis_backend_path=None, analysis_json_path=None ) diff --git a/tests/analysis/python/test_python_sitter.py b/tests/analysis/python/test_python_sitter.py index 5be56f9..1f837c9 100644 --- a/tests/analysis/python/test_python_sitter.py +++ b/tests/analysis/python/test_python_sitter.py @@ -66,7 +66,7 @@ def divide(self, a, b): def test_is_parsable(): - """be able to parse the code""" + """Should be able to parse the code""" python_sitter = PythonSitter() code = "def is_parsable(self, code: str) -> bool: return True" @@ -93,7 +93,7 @@ def test_is_parsable(): def test_get_raw_ast(): - """return the raw AST""" + """Should return the raw AST""" python_sitter = PythonSitter() raw_ast = python_sitter.get_raw_ast(PYTHON_CODE) @@ -103,7 +103,7 @@ def test_get_raw_ast(): def test_get_all_methods(): - """return all of the methods""" + """Should return all of the methods""" python_sitter = PythonSitter() all_methods = python_sitter.get_all_methods(PYTHON_CODE) @@ -115,7 +115,7 @@ def test_get_all_methods(): def test_get_all_functions(): - """return all of the functions""" + """Should return all of the functions""" python_sitter = PythonSitter() all_functions = python_sitter.get_all_functions(PYTHON_CODE) @@ -127,7 +127,7 @@ def test_get_all_functions(): def test_get_method_details(): - """return the method details""" + """Should return the method details""" python_sitter = PythonSitter() method_details = python_sitter.get_method_details(PYTHON_CODE, "add(self, a, b)") @@ -143,7 +143,7 @@ def test_get_method_details(): def test_get_all_imports(): - """return all of the imports""" + """Should return all of the imports""" python_sitter = PythonSitter() all_imports = python_sitter.get_all_imports(PYTHON_CODE) @@ -156,7 +156,7 @@ def test_get_all_imports(): def test_get_module_details(): - """return the module details""" + """Should return the module details""" python_sitter = PythonSitter() module_details = python_sitter.get_module_details(PYTHON_CODE) @@ -168,7 +168,7 @@ def test_get_module_details(): def test_get_all_import_details(): - """return all of the import details""" + """Should return all of the import details""" python_sitter = PythonSitter() all_import_details = python_sitter.get_all_imports_details(PYTHON_CODE) @@ -180,7 +180,7 @@ def test_get_all_import_details(): def test_get_all_classes(): - """return all of the classes""" + """Should return all of the classes""" python_sitter = PythonSitter() all_classes = python_sitter.get_all_classes(PYTHON_CODE) @@ -193,7 +193,7 @@ def test_get_all_classes(): def test_get_all_modules(tmp_path): - """return all of the modules""" + """Should return all of the modules""" python_sitter = PythonSitter() # set up some temporary modules diff --git a/tests/analysis/test_codeql.py b/tests/analysis/test_codeql.py deleted file mode 100644 index e69de29..0000000 diff --git a/tests/conftest.py b/tests/conftest.py index 53eb282..f7f2f12 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -19,7 +19,12 @@ """ import os + +os.putenv("ASAN_DISABLE", "1") +os.putenv("ASAN_OPTIONS", "verify_asan_link_order=0") + import json +from pdb import set_trace import shutil import zipfile from pathlib import Path @@ -156,3 +161,32 @@ def test_fixture_pbw(): if directory.exists() and directory.is_dir(): shutil.rmtree(directory) # --------------------------------------------------------------------------------- + + +@pytest.fixture(scope="session", autouse=True) +def test_fixture_binutils(): + """Create a test fixture for the analysis of C applications""" + # ----------------------------------[ SETUP ]---------------------------------- + # Path to your pyproject.toml + pyproject_path = Path(__file__).parent.parent / "pyproject.toml" + + # Load the configuration + config = toml.load(pyproject_path) + + # Access the test data path + test_data_path = config["tool"]["cldk"]["testing"]["sample-c-application"] + filename = Path(test_data_path).absolute() / "binutils.zip" + + # Extract the zip file to the test data path + with zipfile.ZipFile(filename, "r") as zip_ref: + zip_ref.extractall(test_data_path) + + # ------------------------------ [ TEST FIXTURE ]------------------------------ + # Binutils sample application path + yield Path(test_data_path) / "binutils" + + # ---------------------------------[ TEARDOWN ]-------------------------------- + # Remove the binutils sample application that was downloaded for testing + for directory in Path(test_data_path).iterdir(): + if directory.exists() and directory.is_dir(): + shutil.rmtree(directory) diff --git a/tests/resources/c/application/.gitignore b/tests/resources/c/application/.gitignore new file mode 100644 index 0000000..2dac1f9 --- /dev/null +++ b/tests/resources/c/application/.gitignore @@ -0,0 +1 @@ +!*.zip \ No newline at end of file diff --git a/tests/resources/c/application/binutils.zip b/tests/resources/c/application/binutils.zip new file mode 100644 index 0000000..ecc58de Binary files /dev/null and b/tests/resources/c/application/binutils.zip differ diff --git a/tests/resources/java/application/.gitkeep b/tests/resources/java/application/.gitkeep deleted file mode 100644 index e69de29..0000000