From d1fa0a696a2a20dcead7f31703d61fab64bfe08d Mon Sep 17 00:00:00 2001 From: jbjd Date: Mon, 12 Jan 2026 21:29:15 -0600 Subject: [PATCH 1/2] Improvement: Set sys.platform to machine_info --- .../parser/machine_info.py | 1 + .../parser/skipper.py | 27 ++++++++++++++++--- tests/parser/test_same_machine.py | 14 +++++++--- version.txt | 2 +- 4 files changed, 36 insertions(+), 8 deletions(-) diff --git a/personal_python_ast_optimizer/parser/machine_info.py b/personal_python_ast_optimizer/parser/machine_info.py index 15fe03a..568f1db 100644 --- a/personal_python_ast_optimizer/parser/machine_info.py +++ b/personal_python_ast_optimizer/parser/machine_info.py @@ -4,6 +4,7 @@ machine_dependent_attributes: dict[str, str] = { "os.name": os.name, "sys.byteorder": sys.byteorder, + "sys.platform": sys.platform, } machine_dependent_functions: dict[str, int | None] = {"os.cpu_count": os.cpu_count()} diff --git a/personal_python_ast_optimizer/parser/skipper.py b/personal_python_ast_optimizer/parser/skipper.py index 79a9562..b6849ef 100644 --- a/personal_python_ast_optimizer/parser/skipper.py +++ b/personal_python_ast_optimizer/parser/skipper.py @@ -118,6 +118,9 @@ def generic_visit(self, node: ast.AST) -> ast.AST: else: setattr(node, field, new_node) + elif old_value is not None: + pass + return node @staticmethod @@ -307,14 +310,15 @@ def visit_Assign(self, node: ast.Assign) -> ast.AST | None: def visit_AnnAssign(self, node: ast.AnnAssign) -> ast.AST | None: """Skips assign if it is an assignment to a constant that is being folded""" + target_name: str = get_node_name(node.target) if ( self._should_skip_function_assign(node) - or get_node_name(node.target) in self.tokens_config.variables_to_skip + or target_name in self.tokens_config.variables_to_skip or self._is_assign_of_folded_constant(node.target) ): return None - if self._within_class and get_node_name(node.target) == "__slots__": + if self._within_class and target_name == "__slots__": remove_duplicate_slots(node) parsed_node: ast.AnnAssign = self.generic_visit(node) # type: ignore @@ -383,8 +387,10 @@ def visit_Dict(self, node: ast.Dict) -> ast.AST: for k, v in zip(node.keys, node.values, strict=True) if getattr(k, "value", "") not in self.tokens_config.dict_keys_to_skip } - node.keys = list(new_dict.keys()) - node.values = list(new_dict.values()) + + if len(new_dict) < len(node.keys): + node.keys = list(new_dict.keys()) + node.values = list(new_dict.values()) return self.generic_visit(node) @@ -687,3 +693,16 @@ def visit_Name(self, node: ast.Name) -> ast.Name: def visit_Attribute(self, node: ast.Attribute) -> ast.AST: self.names_and_attrs.add(node.attr) return self.generic_visit(node) + + # Nodes that do not need to be fully visited + def visit_alias(self, node: ast.alias) -> ast.alias: + return node + + def visit_Pass(self, node: ast.Pass) -> ast.Pass: + return node + + def visit_Break(self, node: ast.Break) -> ast.Break: + return node + + def visit_Continue(self, node: ast.Continue) -> ast.Continue: + return node diff --git a/tests/parser/test_same_machine.py b/tests/parser/test_same_machine.py index b791dd4..75bc974 100644 --- a/tests/parser/test_same_machine.py +++ b/tests/parser/test_same_machine.py @@ -13,7 +13,10 @@ def get_cpu_count(): _os_name_example: str = "print(os.name)" -_sys_example: str = f"N = '<' if sys.byteorder == '{sys.byteorder}' else '>'" +_sys_example: str = f""" +N = '<' if sys.byteorder == '{sys.byteorder}' else '>' +print(sys.platform == 'a') +""" @pytest.mark.parametrize( @@ -25,8 +28,13 @@ def get_cpu_count(): f"def get_cpu_count():return {os.cpu_count()}", ), (False, _cpu_count_example, "def get_cpu_count():return os.cpu_count()or 1"), - (True, _sys_example, "N='<'"), - (False, _sys_example, f"N='<'if sys.byteorder=='{sys.byteorder}'else'>'"), + (True, _sys_example, "N='<'\nprint(False)"), + ( + False, + _sys_example, + f"N='<'if sys.byteorder=='{sys.byteorder}'else'>'" + "\nprint(sys.platform=='a')", + ), (True, _os_name_example, f"print('{os.name}')"), (False, _os_name_example, _os_name_example), ], diff --git a/version.txt b/version.txt index 03f488b..c7cb131 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -5.3.0 +5.3.1 From 5cc0ec98bbf8353bc97cf2a4ea166200ceac69c7 Mon Sep 17 00:00:00 2001 From: jbjd Date: Mon, 12 Jan 2026 21:35:45 -0600 Subject: [PATCH 2/2] Remove debug code --- personal_python_ast_optimizer/parser/skipper.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/personal_python_ast_optimizer/parser/skipper.py b/personal_python_ast_optimizer/parser/skipper.py index b6849ef..6fb8583 100644 --- a/personal_python_ast_optimizer/parser/skipper.py +++ b/personal_python_ast_optimizer/parser/skipper.py @@ -118,9 +118,6 @@ def generic_visit(self, node: ast.AST) -> ast.AST: else: setattr(node, field, new_node) - elif old_value is not None: - pass - return node @staticmethod