Development Artifact Cleanup: ✅ BROTHER_NODE REORGANIZATION: Moved development test node to appropriate location - dev/test-nodes/brother_node/: Moved from root directory for better organization - Contains development configuration, test logs, and test chain data - No impact on production systems - purely development/testing artifact ✅ DEVELOPMENT ARTIFACTS IDENTIFIED: - Chain ID: aitbc-brother-chain (test/development chain) - Ports: 8010 (P2P) and 8011 (RPC) - different from production - Environment: .env file with test configuration - Logs: rpc.log and node.log from development testing session (March 15, 2026) ✅ ROOT DIRECTORY CLEANUP: Removed development clutter from production directory - brother_node/ moved to dev/test-nodes/brother_node/ - Root directory now contains only production-ready components - Development artifacts properly organized in dev/ subdirectory DIRECTORY STRUCTURE IMPROVEMENT: 📁 dev/test-nodes/: Development and testing node configurations 🏗️ Root Directory: Clean production structure with only essential components 🧪 Development Isolation: Test environments separated from production BENEFITS: ✅ Clean Production Directory: No development artifacts in root ✅ Better Organization: Development nodes grouped in dev/ subdirectory ✅ Clear Separation: Production vs development environments clearly distinguished ✅ Maintainability: Easier to identify and manage development components RESULT: Successfully moved brother_node development artifact to dev/test-nodes/ subdirectory, cleaning up the root directory while preserving development testing environment for future use.
49 lines
1.6 KiB
Python
Executable File
49 lines
1.6 KiB
Python
Executable File
"""The optimizer tries to constant fold expressions and modify the AST
|
|
in place so that it should be faster to evaluate.
|
|
|
|
Because the AST does not contain all the scoping information and the
|
|
compiler has to find that out, we cannot do all the optimizations we
|
|
want. For example, loop unrolling doesn't work because unrolled loops
|
|
would have a different scope. The solution would be a second syntax tree
|
|
that stored the scoping rules.
|
|
"""
|
|
|
|
import typing as t
|
|
|
|
from . import nodes
|
|
from .visitor import NodeTransformer
|
|
|
|
if t.TYPE_CHECKING:
|
|
from .environment import Environment
|
|
|
|
|
|
def optimize(node: nodes.Node, environment: "Environment") -> nodes.Node:
|
|
"""The context hint can be used to perform an static optimization
|
|
based on the context given."""
|
|
optimizer = Optimizer(environment)
|
|
return t.cast(nodes.Node, optimizer.visit(node))
|
|
|
|
|
|
class Optimizer(NodeTransformer):
|
|
def __init__(self, environment: "t.Optional[Environment]") -> None:
|
|
self.environment = environment
|
|
|
|
def generic_visit(
|
|
self, node: nodes.Node, *args: t.Any, **kwargs: t.Any
|
|
) -> nodes.Node:
|
|
node = super().generic_visit(node, *args, **kwargs)
|
|
|
|
# Do constant folding. Some other nodes besides Expr have
|
|
# as_const, but folding them causes errors later on.
|
|
if isinstance(node, nodes.Expr):
|
|
try:
|
|
return nodes.Const.from_untrusted(
|
|
node.as_const(args[0] if args else None),
|
|
lineno=node.lineno,
|
|
environment=self.environment,
|
|
)
|
|
except nodes.Impossible:
|
|
pass
|
|
|
|
return node
|