shifted PR to new repo. refactors optimizer code into a FunctionOptimizer class
This commit is contained in:
parent
5851ec2b84
commit
8e8258a99f
10 changed files with 1564 additions and 1519 deletions
1176
codeflash/optimization/function_optimizer.py
Normal file
1176
codeflash/optimization/function_optimizer.py
Normal file
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -2,7 +2,6 @@ from __future__ import annotations
|
|||
|
||||
import dataclasses
|
||||
import os
|
||||
from argparse import Namespace
|
||||
from collections import defaultdict
|
||||
from pathlib import Path
|
||||
|
||||
|
|
@ -14,7 +13,8 @@ from codeflash.code_utils.code_replacer import (
|
|||
)
|
||||
from codeflash.discovery.functions_to_optimize import FunctionToOptimize
|
||||
from codeflash.models.models import FunctionParent
|
||||
from codeflash.optimization.optimizer import Optimizer
|
||||
from codeflash.optimization.function_optimizer import FunctionOptimizer
|
||||
from codeflash.verification.verification_utils import TestConfig
|
||||
|
||||
os.environ["CODEFLASH_API_KEY"] = "cf-test-key"
|
||||
|
||||
|
|
@ -766,24 +766,18 @@ class MainClass:
|
|||
return HelperClass(self.name).helper_method()
|
||||
"""
|
||||
file_path = Path(__file__).resolve()
|
||||
opt = Optimizer(
|
||||
Namespace(
|
||||
project_root=file_path.parent.resolve(),
|
||||
disable_telemetry=True,
|
||||
tests_root="tests",
|
||||
test_framework="pytest",
|
||||
pytest_cmd="pytest",
|
||||
experiment_id=None,
|
||||
test_project_root=file_path.parent.resolve(),
|
||||
)
|
||||
)
|
||||
func_top_optimize = FunctionToOptimize(
|
||||
function_name="main_method", file_path=file_path, parents=[FunctionParent("MainClass", "ClassDef")]
|
||||
)
|
||||
original_code = file_path.read_text()
|
||||
code_context = opt.get_code_optimization_context(
|
||||
function_to_optimize=func_top_optimize, project_root=file_path.parent, original_source_code=original_code
|
||||
).unwrap()
|
||||
test_config = TestConfig(
|
||||
tests_root=file_path.parent,
|
||||
tests_project_rootdir=file_path.parent,
|
||||
project_root_path=file_path.parent,
|
||||
test_framework="pytest",
|
||||
pytest_cmd="pytest",
|
||||
)
|
||||
func_optimizer = FunctionOptimizer(function_to_optimize=func_top_optimize, test_cfg=test_config)
|
||||
code_context = func_optimizer.get_code_optimization_context().unwrap()
|
||||
assert code_context.code_to_optimize_with_helpers == get_code_output
|
||||
|
||||
|
||||
|
|
@ -1105,8 +1099,8 @@ class TestResults(BaseModel):
|
|||
)
|
||||
|
||||
assert (
|
||||
new_code
|
||||
== """from __future__ import annotations
|
||||
new_code
|
||||
== """from __future__ import annotations
|
||||
import sys
|
||||
from codeflash.verification.comparator import comparator
|
||||
from enum import Enum
|
||||
|
|
@ -1311,8 +1305,8 @@ def cosine_similarity_top_k(
|
|||
project_root_path=Path(__file__).parent.parent.resolve(),
|
||||
)
|
||||
assert (
|
||||
new_code
|
||||
== '''import numpy as np
|
||||
new_code
|
||||
== '''import numpy as np
|
||||
from pydantic.dataclasses import dataclass
|
||||
from typing import List, Optional, Tuple, Union
|
||||
@dataclass(config=dict(arbitrary_types_allowed=True))
|
||||
|
|
@ -1370,8 +1364,8 @@ def cosine_similarity_top_k(
|
|||
)
|
||||
|
||||
assert (
|
||||
new_helper_code
|
||||
== '''import numpy as np
|
||||
new_helper_code
|
||||
== '''import numpy as np
|
||||
from pydantic.dataclasses import dataclass
|
||||
from typing import List, Optional, Tuple, Union
|
||||
@dataclass(config=dict(arbitrary_types_allowed=True))
|
||||
|
|
|
|||
|
|
@ -2,18 +2,18 @@ from __future__ import annotations
|
|||
|
||||
import os
|
||||
import re
|
||||
from argparse import Namespace
|
||||
from pathlib import Path
|
||||
|
||||
from codeflash.code_utils.code_utils import get_run_tmp_file
|
||||
from codeflash.code_utils.compat import SAFE_SYS_EXECUTABLE
|
||||
from codeflash.discovery.functions_to_optimize import FunctionToOptimize
|
||||
from codeflash.models.models import FunctionParent, TestFile, TestFiles, TestingMode
|
||||
from codeflash.optimization.optimizer import Optimizer
|
||||
from codeflash.optimization.function_optimizer import FunctionOptimizer
|
||||
from codeflash.verification.equivalence import compare_test_results
|
||||
from codeflash.verification.instrument_codeflash_capture import instrument_codeflash_capture
|
||||
from codeflash.verification.test_results import TestType, VerificationType
|
||||
from codeflash.verification.test_runner import execute_test_subprocess
|
||||
from codeflash.verification.verification_utils import TestConfig
|
||||
|
||||
|
||||
# Tests for get_stack_info. Ensures that when a test is run via pytest, the correct test information is extracted
|
||||
|
|
@ -184,6 +184,7 @@ class MyClass:
|
|||
self.x = 2
|
||||
print(f"TEST_INFO_START|{{get_test_info_from_stack('{test_dir!s}')}}|TEST_INFO_END")
|
||||
"""
|
||||
test_dir = (Path(__file__).parent.parent / "code_to_optimize" / "tests" / "pytest").resolve()
|
||||
test_file_name = "test_stack_info_temp.py"
|
||||
|
||||
test_path = test_dir / test_file_name
|
||||
|
|
@ -319,7 +320,6 @@ class MyClass:
|
|||
assert results[5][3] == "23"
|
||||
|
||||
finally:
|
||||
# Clean up files
|
||||
test_path.unlink(missing_ok=True)
|
||||
sample_code_path.unlink(missing_ok=True)
|
||||
|
||||
|
|
@ -346,6 +346,7 @@ class MyClass:
|
|||
self.x = 2
|
||||
print(f"TEST_INFO_START|{{get_test_info_from_stack('{test_dir!s}')}}|TEST_INFO_END")
|
||||
"""
|
||||
test_dir = (Path(__file__).parent.parent / "code_to_optimize" / "tests" / "pytest").resolve()
|
||||
test_file_name = "test_stack_info_temp.py"
|
||||
|
||||
test_path = test_dir / test_file_name
|
||||
|
|
@ -431,23 +432,25 @@ class MyClass:
|
|||
f.write(test_code)
|
||||
with sample_code_path.open("w") as f:
|
||||
f.write(sample_code)
|
||||
opt = Optimizer(
|
||||
Namespace(
|
||||
project_root=project_root_path,
|
||||
disable_telemetry=True,
|
||||
tests_root=tests_root,
|
||||
test_framework="pytest",
|
||||
pytest_cmd="pytest",
|
||||
experiment_id=None,
|
||||
test_project_root=project_root_path,
|
||||
)
|
||||
)
|
||||
|
||||
test_env = os.environ.copy()
|
||||
test_env["CODEFLASH_TEST_ITERATION"] = "0"
|
||||
test_env["CODEFLASH_LOOP_INDEX"] = "1"
|
||||
test_type = TestType.EXISTING_UNIT_TEST
|
||||
test_files = TestFiles(
|
||||
test_config = TestConfig(
|
||||
tests_root=tests_root,
|
||||
tests_project_rootdir=project_root_path,
|
||||
project_root_path=project_root_path,
|
||||
test_framework="pytest",
|
||||
pytest_cmd="pytest",
|
||||
)
|
||||
fto = FunctionToOptimize(
|
||||
function_name="some_function",
|
||||
file_path=sample_code_path,
|
||||
parents=[FunctionParent(name="MyClass", type="ClassDef")],
|
||||
)
|
||||
func_optimizer = FunctionOptimizer(function_to_optimize=fto, test_cfg=test_config)
|
||||
func_optimizer.test_files = TestFiles(
|
||||
test_files=[
|
||||
TestFile(
|
||||
instrumented_behavior_file_path=test_path,
|
||||
|
|
@ -457,10 +460,10 @@ class MyClass:
|
|||
)
|
||||
]
|
||||
)
|
||||
test_results, coverage_data = opt.run_and_parse_tests(
|
||||
test_results, coverage_data = func_optimizer.run_and_parse_tests(
|
||||
testing_type=TestingMode.BEHAVIOR,
|
||||
test_env=test_env,
|
||||
test_files=test_files,
|
||||
test_files=func_optimizer.test_files,
|
||||
optimization_iteration=0,
|
||||
pytest_min_loops=1,
|
||||
pytest_max_loops=1,
|
||||
|
|
@ -541,23 +544,24 @@ class MyClass(ParentClass):
|
|||
f.write(test_code)
|
||||
with sample_code_path.open("w") as f:
|
||||
f.write(sample_code)
|
||||
opt = Optimizer(
|
||||
Namespace(
|
||||
project_root=project_root_path,
|
||||
disable_telemetry=True,
|
||||
tests_root=tests_root,
|
||||
test_framework="pytest",
|
||||
pytest_cmd="pytest",
|
||||
experiment_id=None,
|
||||
test_project_root=project_root_path,
|
||||
)
|
||||
)
|
||||
|
||||
test_env = os.environ.copy()
|
||||
test_env["CODEFLASH_TEST_ITERATION"] = "0"
|
||||
test_env["CODEFLASH_LOOP_INDEX"] = "1"
|
||||
test_type = TestType.EXISTING_UNIT_TEST
|
||||
test_files = TestFiles(
|
||||
test_config = TestConfig(
|
||||
tests_root=tests_root,
|
||||
tests_project_rootdir=project_root_path,
|
||||
project_root_path=project_root_path,
|
||||
test_framework="pytest",
|
||||
pytest_cmd="pytest",
|
||||
)
|
||||
fto = FunctionToOptimize(
|
||||
function_name="some_function",
|
||||
file_path=sample_code_path,
|
||||
parents=[FunctionParent(name="MyClass", type="ClassDef")],
|
||||
)
|
||||
func_optimizer = FunctionOptimizer(function_to_optimize=fto, test_cfg=test_config)
|
||||
func_optimizer.test_files = TestFiles(
|
||||
test_files=[
|
||||
TestFile(
|
||||
instrumented_behavior_file_path=test_path,
|
||||
|
|
@ -567,10 +571,10 @@ class MyClass(ParentClass):
|
|||
)
|
||||
]
|
||||
)
|
||||
test_results, coverage_data = opt.run_and_parse_tests(
|
||||
test_results, coverage_data = func_optimizer.run_and_parse_tests(
|
||||
testing_type=TestingMode.BEHAVIOR,
|
||||
test_env=test_env,
|
||||
test_files=test_files,
|
||||
test_files=func_optimizer.test_files,
|
||||
optimization_iteration=0,
|
||||
pytest_min_loops=1,
|
||||
pytest_max_loops=1,
|
||||
|
|
@ -653,25 +657,24 @@ class MyClass:
|
|||
with sample_code_path.open("w") as f:
|
||||
f.write(sample_code)
|
||||
|
||||
opt = Optimizer(
|
||||
Namespace(
|
||||
project_root=project_root_path,
|
||||
disable_telemetry=True,
|
||||
tests_root=tests_root,
|
||||
test_framework="pytest",
|
||||
pytest_cmd="pytest",
|
||||
experiment_id=None,
|
||||
test_project_root=project_root_path,
|
||||
)
|
||||
)
|
||||
|
||||
# Environment variables for codeflash
|
||||
test_env = os.environ.copy()
|
||||
test_env["CODEFLASH_TEST_ITERATION"] = "0"
|
||||
test_env["CODEFLASH_LOOP_INDEX"] = "1"
|
||||
|
||||
test_type = TestType.EXISTING_UNIT_TEST
|
||||
test_files = TestFiles(
|
||||
test_config = TestConfig(
|
||||
tests_root=tests_root,
|
||||
tests_project_rootdir=project_root_path,
|
||||
project_root_path=project_root_path,
|
||||
test_framework="pytest",
|
||||
pytest_cmd="pytest",
|
||||
)
|
||||
fto = FunctionToOptimize(
|
||||
function_name="some_function",
|
||||
file_path=sample_code_path,
|
||||
parents=[FunctionParent(name="MyClass", type="ClassDef")],
|
||||
)
|
||||
func_optimizer = FunctionOptimizer(function_to_optimize=fto, test_cfg=test_config)
|
||||
func_optimizer.test_files = TestFiles(
|
||||
test_files=[
|
||||
TestFile(
|
||||
instrumented_behavior_file_path=test_path,
|
||||
|
|
@ -681,12 +684,10 @@ class MyClass:
|
|||
)
|
||||
]
|
||||
)
|
||||
|
||||
# Run the tests and parse results
|
||||
test_results, coverage_data = opt.run_and_parse_tests(
|
||||
test_results, coverage_data = func_optimizer.run_and_parse_tests(
|
||||
testing_type=TestingMode.BEHAVIOR,
|
||||
test_env=test_env,
|
||||
test_files=test_files,
|
||||
test_files=func_optimizer.test_files,
|
||||
optimization_iteration=0,
|
||||
pytest_min_loops=1,
|
||||
pytest_max_loops=1,
|
||||
|
|
@ -804,24 +805,26 @@ class AnotherHelperClass:
|
|||
f.write(original_code)
|
||||
with test_path.open("w") as f:
|
||||
f.write(test_code)
|
||||
opt = Optimizer(
|
||||
Namespace(
|
||||
project_root=project_root_path,
|
||||
disable_telemetry=True,
|
||||
tests_root=tests_root,
|
||||
test_framework="pytest",
|
||||
pytest_cmd="pytest",
|
||||
experiment_id=None,
|
||||
test_project_root=project_root_path,
|
||||
)
|
||||
)
|
||||
|
||||
test_env = os.environ.copy()
|
||||
test_env["CODEFLASH_TEST_ITERATION"] = "0"
|
||||
test_env["CODEFLASH_LOOP_INDEX"] = "1"
|
||||
|
||||
test_type = TestType.EXISTING_UNIT_TEST
|
||||
test_files = TestFiles(
|
||||
test_config = TestConfig(
|
||||
tests_root=tests_root,
|
||||
tests_project_rootdir=project_root_path,
|
||||
project_root_path=project_root_path,
|
||||
test_framework="pytest",
|
||||
pytest_cmd="pytest",
|
||||
)
|
||||
fto = FunctionToOptimize(
|
||||
function_name="target_function",
|
||||
file_path=fto_file_path,
|
||||
parents=[FunctionParent(name="MyClass", type="ClassDef")],
|
||||
)
|
||||
func_optimizer = FunctionOptimizer(function_to_optimize=fto, test_cfg=test_config)
|
||||
func_optimizer.test_files = TestFiles(
|
||||
test_files=[
|
||||
TestFile(
|
||||
instrumented_behavior_file_path=test_path,
|
||||
|
|
@ -832,10 +835,10 @@ class AnotherHelperClass:
|
|||
]
|
||||
)
|
||||
|
||||
test_results, coverage_data = opt.run_and_parse_tests(
|
||||
test_results, coverage_data = func_optimizer.run_and_parse_tests(
|
||||
testing_type=TestingMode.BEHAVIOR,
|
||||
test_env=test_env,
|
||||
test_files=test_files,
|
||||
test_files=func_optimizer.test_files,
|
||||
optimization_iteration=0,
|
||||
pytest_min_loops=1,
|
||||
pytest_max_loops=1,
|
||||
|
|
@ -925,7 +928,7 @@ class AnotherHelperClass:
|
|||
helper_path_2 = test_dir / helper_file_2
|
||||
fto_file_path = test_dir / fto_file_name
|
||||
|
||||
tests_root = (Path(__file__).parent.resolve() / "../code_to_optimize/tests/pytest/").resolve()
|
||||
tests_root = Path(__file__).parent.resolve() / "../code_to_optimize/tests/pytest/"
|
||||
project_root_path = (Path(__file__).parent / "..").resolve()
|
||||
|
||||
try:
|
||||
|
|
@ -938,30 +941,26 @@ class AnotherHelperClass:
|
|||
with test_path.open("w") as f:
|
||||
f.write(test_code)
|
||||
|
||||
fto = FunctionToOptimize("target_function", str(fto_file_path), parents=[FunctionParent("MyClass", "ClassDef")])
|
||||
fto = FunctionToOptimize("target_function", fto_file_path, parents=[FunctionParent("MyClass", "ClassDef")])
|
||||
file_path_to_helper_class = {
|
||||
helper_path_1: {"HelperClass1"},
|
||||
helper_path_2: {"HelperClass2", "AnotherHelperClass"},
|
||||
}
|
||||
instrument_codeflash_capture(fto, file_path_to_helper_class, tests_root)
|
||||
opt = Optimizer(
|
||||
Namespace(
|
||||
project_root=project_root_path,
|
||||
disable_telemetry=True,
|
||||
tests_root=tests_root,
|
||||
test_framework="pytest",
|
||||
pytest_cmd="pytest",
|
||||
experiment_id=None,
|
||||
test_project_root=project_root_path,
|
||||
)
|
||||
)
|
||||
|
||||
test_env = os.environ.copy()
|
||||
test_env["CODEFLASH_TEST_ITERATION"] = "0"
|
||||
test_env["CODEFLASH_LOOP_INDEX"] = "1"
|
||||
|
||||
test_type = TestType.EXISTING_UNIT_TEST
|
||||
test_files = TestFiles(
|
||||
test_config = TestConfig(
|
||||
tests_root=tests_root,
|
||||
tests_project_rootdir=project_root_path,
|
||||
project_root_path=project_root_path,
|
||||
test_framework="pytest",
|
||||
pytest_cmd="pytest",
|
||||
)
|
||||
func_optimizer = FunctionOptimizer(function_to_optimize=fto, test_cfg=test_config)
|
||||
func_optimizer.test_files = TestFiles(
|
||||
test_files=[
|
||||
TestFile(
|
||||
instrumented_behavior_file_path=test_path,
|
||||
|
|
@ -983,10 +982,10 @@ class AnotherHelperClass:
|
|||
}
|
||||
instrument_codeflash_capture(fto, file_path_to_helper_classes, tests_root)
|
||||
|
||||
test_results, coverage_data = opt.run_and_parse_tests(
|
||||
test_results, coverage_data = func_optimizer.run_and_parse_tests(
|
||||
testing_type=TestingMode.BEHAVIOR,
|
||||
test_env=test_env,
|
||||
test_files=test_files,
|
||||
test_files=func_optimizer.test_files,
|
||||
optimization_iteration=0,
|
||||
pytest_min_loops=1,
|
||||
pytest_max_loops=1,
|
||||
|
|
@ -994,7 +993,7 @@ class AnotherHelperClass:
|
|||
)
|
||||
|
||||
# Remove instrumentation
|
||||
opt.write_code_and_helpers(candidate_fto_code, candidate_helper_code, fto.file_path)
|
||||
FunctionOptimizer.write_code_and_helpers(candidate_fto_code, candidate_helper_code, fto.file_path)
|
||||
|
||||
assert len(test_results.test_results) == 4
|
||||
assert test_results[0].id.test_function_name == "test_helper_classes"
|
||||
|
|
@ -1035,17 +1034,17 @@ class MyClass:
|
|||
Path(helper_path_2): {"HelperClass2", "AnotherHelperClass"},
|
||||
}
|
||||
instrument_codeflash_capture(fto, file_path_to_helper_classes, tests_root)
|
||||
modified_test_results, coverage_data = opt.run_and_parse_tests(
|
||||
modified_test_results, coverage_data = func_optimizer.run_and_parse_tests(
|
||||
testing_type=TestingMode.BEHAVIOR,
|
||||
test_env=test_env,
|
||||
test_files=test_files,
|
||||
test_files=func_optimizer.test_files,
|
||||
optimization_iteration=0,
|
||||
pytest_min_loops=1,
|
||||
pytest_max_loops=1,
|
||||
testing_time=0.1,
|
||||
)
|
||||
# Remove instrumentation
|
||||
opt.write_code_and_helpers(candidate_fto_code, candidate_helper_code, fto.file_path)
|
||||
FunctionOptimizer.write_code_and_helpers(candidate_fto_code, candidate_helper_code, fto.file_path)
|
||||
|
||||
# Now, this fto_code mutates the instance so it should fail
|
||||
mutated_fto_code = """
|
||||
|
|
@ -1074,17 +1073,17 @@ class MyClass:
|
|||
Path(helper_path_2): {"HelperClass2", "AnotherHelperClass"},
|
||||
}
|
||||
instrument_codeflash_capture(fto, file_path_to_helper_classes, tests_root)
|
||||
mutated_test_results, coverage_data = opt.run_and_parse_tests(
|
||||
mutated_test_results, coverage_data = func_optimizer.run_and_parse_tests(
|
||||
testing_type=TestingMode.BEHAVIOR,
|
||||
test_env=test_env,
|
||||
test_files=test_files,
|
||||
test_files=func_optimizer.test_files,
|
||||
optimization_iteration=0,
|
||||
pytest_min_loops=1,
|
||||
pytest_max_loops=1,
|
||||
testing_time=0.1,
|
||||
)
|
||||
# Remove instrumentation
|
||||
opt.write_code_and_helpers(candidate_fto_code, candidate_helper_code, fto.file_path)
|
||||
FunctionOptimizer.write_code_and_helpers(candidate_fto_code, candidate_helper_code, fto.file_path)
|
||||
assert not compare_test_results(test_results, mutated_test_results)
|
||||
|
||||
# This fto code stopped using a helper class. it should still pass
|
||||
|
|
@ -1112,17 +1111,17 @@ class MyClass:
|
|||
Path(helper_path_2): {"HelperClass2", "AnotherHelperClass"},
|
||||
}
|
||||
instrument_codeflash_capture(fto, file_path_to_helper_classes, tests_root)
|
||||
no_helper1_test_results, coverage_data = opt.run_and_parse_tests(
|
||||
no_helper1_test_results, coverage_data = func_optimizer.run_and_parse_tests(
|
||||
testing_type=TestingMode.BEHAVIOR,
|
||||
test_env=test_env,
|
||||
test_files=test_files,
|
||||
test_files=func_optimizer.test_files,
|
||||
optimization_iteration=0,
|
||||
pytest_min_loops=1,
|
||||
pytest_max_loops=1,
|
||||
testing_time=0.1,
|
||||
)
|
||||
# Remove instrumentation
|
||||
opt.write_code_and_helpers(candidate_fto_code, candidate_helper_code, fto.file_path)
|
||||
FunctionOptimizer.write_code_and_helpers(candidate_fto_code, candidate_helper_code, fto.file_path)
|
||||
assert compare_test_results(test_results, no_helper1_test_results)
|
||||
|
||||
finally:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
import pathlib
|
||||
from argparse import Namespace
|
||||
from dataclasses import dataclass
|
||||
|
||||
import pytest
|
||||
|
|
@ -7,7 +6,8 @@ from codeflash.discovery.functions_to_optimize import FunctionToOptimize
|
|||
from codeflash.either import is_successful
|
||||
from codeflash.models.models import FunctionParent
|
||||
from codeflash.optimization.function_context import get_function_variables_definitions
|
||||
from codeflash.optimization.optimizer import Optimizer
|
||||
from codeflash.optimization.function_optimizer import FunctionOptimizer
|
||||
from codeflash.verification.verification_utils import TestConfig
|
||||
|
||||
|
||||
def calculate_something(data):
|
||||
|
|
@ -184,17 +184,7 @@ class Graph:
|
|||
|
||||
def test_class_method_dependencies() -> None:
|
||||
file_path = pathlib.Path(__file__).resolve()
|
||||
opt = Optimizer(
|
||||
Namespace(
|
||||
project_root=file_path.parent.resolve(),
|
||||
disable_telemetry=True,
|
||||
tests_root="tests",
|
||||
test_framework="pytest",
|
||||
pytest_cmd="pytest",
|
||||
experiment_id=None,
|
||||
test_project_root=file_path.parent.resolve(),
|
||||
)
|
||||
)
|
||||
|
||||
function_to_optimize = FunctionToOptimize(
|
||||
function_name="topologicalSort",
|
||||
file_path=str(file_path),
|
||||
|
|
@ -202,9 +192,19 @@ def test_class_method_dependencies() -> None:
|
|||
starting_line=None,
|
||||
ending_line=None,
|
||||
)
|
||||
func_optimizer = FunctionOptimizer(
|
||||
function_to_optimize=function_to_optimize,
|
||||
test_cfg=TestConfig(
|
||||
tests_root=file_path,
|
||||
tests_project_rootdir=file_path.parent,
|
||||
project_root_path=file_path.parent,
|
||||
test_framework="pytest",
|
||||
pytest_cmd="pytest",
|
||||
),
|
||||
)
|
||||
with open(file_path) as f:
|
||||
original_code = f.read()
|
||||
ctx_result = opt.get_code_optimization_context(function_to_optimize, opt.args.project_root, original_code)
|
||||
ctx_result = func_optimizer.get_code_optimization_context()
|
||||
if not is_successful(ctx_result):
|
||||
pytest.fail()
|
||||
code_context = ctx_result.unwrap()
|
||||
|
|
@ -280,17 +280,7 @@ def test_decorator_dependencies() -> None:
|
|||
|
||||
def test_recursive_function_context() -> None:
|
||||
file_path = pathlib.Path(__file__).resolve()
|
||||
opt = Optimizer(
|
||||
Namespace(
|
||||
project_root=file_path.parent.resolve(),
|
||||
disable_telemetry=True,
|
||||
tests_root="tests",
|
||||
test_framework="pytest",
|
||||
pytest_cmd="pytest",
|
||||
experiment_id=None,
|
||||
test_project_root=file_path.parent.resolve(),
|
||||
)
|
||||
)
|
||||
|
||||
function_to_optimize = FunctionToOptimize(
|
||||
function_name="recursive",
|
||||
file_path=str(file_path),
|
||||
|
|
@ -298,9 +288,20 @@ def test_recursive_function_context() -> None:
|
|||
starting_line=None,
|
||||
ending_line=None,
|
||||
)
|
||||
func_optimizer = FunctionOptimizer(
|
||||
function_to_optimize=function_to_optimize,
|
||||
test_cfg=TestConfig(
|
||||
tests_root=file_path,
|
||||
tests_project_rootdir=file_path.parent,
|
||||
project_root_path=file_path.parent,
|
||||
test_framework="pytest",
|
||||
pytest_cmd="pytest",
|
||||
),
|
||||
)
|
||||
with open(file_path) as f:
|
||||
original_code = f.read()
|
||||
ctx_result = opt.get_code_optimization_context(function_to_optimize, opt.args.project_root, original_code)
|
||||
|
||||
ctx_result = func_optimizer.get_code_optimization_context()
|
||||
if not is_successful(ctx_result):
|
||||
pytest.fail()
|
||||
code_context = ctx_result.unwrap()
|
||||
|
|
|
|||
|
|
@ -3,10 +3,13 @@ from argparse import Namespace
|
|||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
from codeflash.discovery.functions_to_optimize import FunctionToOptimize
|
||||
from codeflash.either import is_successful
|
||||
from codeflash.models.models import FunctionParent
|
||||
from codeflash.optimization.function_optimizer import FunctionOptimizer
|
||||
from codeflash.optimization.optimizer import Optimizer
|
||||
from codeflash.verification.verification_utils import TestConfig
|
||||
|
||||
|
||||
class HelperClass:
|
||||
|
|
@ -31,6 +34,7 @@ def test_get_outside_method_helper() -> None:
|
|||
experiment_id=None,
|
||||
)
|
||||
)
|
||||
|
||||
function_to_optimize = FunctionToOptimize(
|
||||
function_name="OptimizeMe", file_path=file_path, parents=[], starting_line=None, ending_line=None
|
||||
)
|
||||
|
|
@ -213,17 +217,6 @@ class _PersistentCache(Generic[_P, _R, _CacheBackendT]):
|
|||
f.write(code)
|
||||
f.flush()
|
||||
file_path = Path(f.name).resolve()
|
||||
opt = Optimizer(
|
||||
Namespace(
|
||||
project_root=file_path.parent.resolve(),
|
||||
disable_telemetry=True,
|
||||
tests_root="tests",
|
||||
test_framework="pytest",
|
||||
pytest_cmd="pytest",
|
||||
experiment_id=None,
|
||||
test_project_root=Path().resolve(),
|
||||
)
|
||||
)
|
||||
function_to_optimize = FunctionToOptimize(
|
||||
function_name="__call__",
|
||||
file_path=file_path,
|
||||
|
|
@ -231,17 +224,25 @@ class _PersistentCache(Generic[_P, _R, _CacheBackendT]):
|
|||
starting_line=None,
|
||||
ending_line=None,
|
||||
)
|
||||
test_config = TestConfig(
|
||||
tests_root="tests",
|
||||
tests_project_rootdir=Path.cwd(),
|
||||
project_root_path=file_path.parent.resolve(),
|
||||
test_framework="pytest",
|
||||
pytest_cmd="pytest",
|
||||
)
|
||||
func_optimizer = FunctionOptimizer(function_to_optimize=function_to_optimize, test_cfg=test_config)
|
||||
with open(file_path) as f:
|
||||
original_code = f.read()
|
||||
ctx_result = opt.get_code_optimization_context(function_to_optimize, opt.args.project_root, original_code)
|
||||
ctx_result = func_optimizer.get_code_optimization_context()
|
||||
if not is_successful(ctx_result):
|
||||
pytest.fail()
|
||||
code_context = ctx_result.unwrap()
|
||||
assert code_context.helper_functions[0].qualified_name == "AbstractCacheBackend.get_cache_or_call"
|
||||
|
||||
assert (
|
||||
code_context.code_to_optimize_with_helpers
|
||||
== '''_R = TypeVar("_R")
|
||||
code_context.code_to_optimize_with_helpers
|
||||
== '''_R = TypeVar("_R")
|
||||
|
||||
class AbstractCacheBackend(CacheBackend, Protocol[_KEY_T, _STORE_T]):
|
||||
def __init__(self) -> None: ...
|
||||
|
|
@ -338,29 +339,27 @@ class _PersistentCache(Generic[_P, _R, _CacheBackendT]):
|
|||
|
||||
def test_bubble_sort_deps() -> None:
|
||||
file_path = (Path(__file__) / ".." / ".." / "code_to_optimize" / "bubble_sort_deps.py").resolve()
|
||||
opt = Optimizer(
|
||||
Namespace(
|
||||
project_root=file_path.parent.parent.resolve(),
|
||||
disable_telemetry=True,
|
||||
tests_root=str(file_path.parent / "tests"),
|
||||
test_framework="pytest",
|
||||
pytest_cmd="pytest",
|
||||
experiment_id=None,
|
||||
test_project_root=file_path.parent.resolve(),
|
||||
)
|
||||
)
|
||||
|
||||
function_to_optimize = FunctionToOptimize(
|
||||
function_name="sorter_deps", file_path=file_path, parents=[], starting_line=None, ending_line=None
|
||||
)
|
||||
test_config = TestConfig(
|
||||
tests_root=str(file_path.parent / "tests"),
|
||||
tests_project_rootdir=file_path.parent.resolve(),
|
||||
project_root_path=file_path.parent.parent.resolve(),
|
||||
test_framework="pytest",
|
||||
pytest_cmd="pytest",
|
||||
)
|
||||
func_optimizer = FunctionOptimizer(function_to_optimize=function_to_optimize, test_cfg=test_config)
|
||||
with open(file_path) as f:
|
||||
original_code = f.read()
|
||||
ctx_result = opt.get_code_optimization_context(function_to_optimize, opt.args.project_root, original_code)
|
||||
ctx_result = func_optimizer.get_code_optimization_context()
|
||||
if not is_successful(ctx_result):
|
||||
pytest.fail()
|
||||
code_context = ctx_result.unwrap()
|
||||
assert (
|
||||
code_context.code_to_optimize_with_helpers
|
||||
== """def dep1_comparer(arr, j: int) -> bool:
|
||||
code_context.code_to_optimize_with_helpers
|
||||
== """def dep1_comparer(arr, j: int) -> bool:
|
||||
return arr[j] > arr[j + 1]
|
||||
|
||||
def dep2_swap(arr, j):
|
||||
|
|
@ -378,7 +377,7 @@ def sorter_deps(arr):
|
|||
)
|
||||
assert len(code_context.helper_functions) == 2
|
||||
assert (
|
||||
code_context.helper_functions[0].fully_qualified_name
|
||||
== "code_to_optimize.bubble_sort_dep1_helper.dep1_comparer"
|
||||
code_context.helper_functions[0].fully_qualified_name
|
||||
== "code_to_optimize.bubble_sort_dep1_helper.dep1_comparer"
|
||||
)
|
||||
assert code_context.helper_functions[1].fully_qualified_name == "code_to_optimize.bubble_sort_dep2_swap.dep2_swap"
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
from textwrap import dedent
|
||||
|
||||
import pytest
|
||||
|
||||
from codeflash.context.code_context_extractor import get_read_only_code
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ codeflash_wrap_string = """def codeflash_wrap(wrapped, test_module_name, test_cl
|
|||
"""
|
||||
|
||||
|
||||
def test_function_full_instrumentation() -> None:
|
||||
def test_bubble_sort_behavior_results() -> None:
|
||||
code = """from code_to_optimize.bubble_sort import sorter
|
||||
|
||||
|
||||
|
|
@ -147,7 +147,9 @@ def test_sort():
|
|||
test_env["CODEFLASH_TEST_ITERATION"] = "0"
|
||||
test_env["CODEFLASH_LOOP_INDEX"] = "1"
|
||||
test_type = TestType.EXISTING_UNIT_TEST
|
||||
test_files = TestFiles(
|
||||
|
||||
func_optimizer = opt.create_function_optimizer(func)
|
||||
func_optimizer.test_files = TestFiles(
|
||||
test_files=[
|
||||
TestFile(
|
||||
instrumented_behavior_file_path=test_path,
|
||||
|
|
@ -157,10 +159,10 @@ def test_sort():
|
|||
)
|
||||
]
|
||||
)
|
||||
test_results, coverage_data = opt.run_and_parse_tests(
|
||||
test_results, coverage_data = func_optimizer.run_and_parse_tests(
|
||||
testing_type=TestingMode.BEHAVIOR,
|
||||
test_env=test_env,
|
||||
test_files=test_files,
|
||||
test_files=func_optimizer.test_files,
|
||||
optimization_iteration=0,
|
||||
pytest_min_loops=1,
|
||||
pytest_max_loops=1,
|
||||
|
|
@ -318,7 +320,8 @@ def test_sort():
|
|||
test_env["CODEFLASH_TEST_ITERATION"] = "0"
|
||||
test_env["CODEFLASH_LOOP_INDEX"] = "1"
|
||||
test_type = TestType.EXISTING_UNIT_TEST
|
||||
test_files = TestFiles(
|
||||
func_optimizer = opt.create_function_optimizer(fto)
|
||||
func_optimizer.test_files = TestFiles(
|
||||
test_files=[
|
||||
TestFile(
|
||||
instrumented_behavior_file_path=test_path,
|
||||
|
|
@ -328,10 +331,10 @@ def test_sort():
|
|||
)
|
||||
]
|
||||
)
|
||||
test_results, coverage_data = opt.run_and_parse_tests(
|
||||
test_results, coverage_data = func_optimizer.run_and_parse_tests(
|
||||
testing_type=TestingMode.BEHAVIOR,
|
||||
test_env=test_env,
|
||||
test_files=test_files,
|
||||
test_files=func_optimizer.test_files,
|
||||
optimization_iteration=0,
|
||||
pytest_min_loops=1,
|
||||
pytest_max_loops=1,
|
||||
|
|
@ -412,11 +415,21 @@ class BubbleSorter:
|
|||
test_project_root=project_root_path,
|
||||
)
|
||||
)
|
||||
|
||||
new_test_results, coverage_data = opt.run_and_parse_tests(
|
||||
func_optimizer = opt.create_function_optimizer(fto)
|
||||
func_optimizer.test_files = TestFiles(
|
||||
test_files=[
|
||||
TestFile(
|
||||
instrumented_behavior_file_path=test_path,
|
||||
test_type=test_type,
|
||||
original_file_path=test_path,
|
||||
benchmarking_file_path=test_path_perf,
|
||||
)
|
||||
]
|
||||
)
|
||||
new_test_results, coverage_data = func_optimizer.run_and_parse_tests(
|
||||
testing_type=TestingMode.BEHAVIOR,
|
||||
test_env=test_env,
|
||||
test_files=test_files,
|
||||
test_files=func_optimizer.test_files,
|
||||
optimization_iteration=0,
|
||||
pytest_min_loops=1,
|
||||
pytest_max_loops=1,
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ import math
|
|||
import os
|
||||
import sys
|
||||
import tempfile
|
||||
from argparse import Namespace
|
||||
from pathlib import Path
|
||||
|
||||
from codeflash.code_utils.code_utils import get_run_tmp_file
|
||||
|
|
@ -15,8 +14,9 @@ from codeflash.code_utils.instrument_existing_tests import (
|
|||
)
|
||||
from codeflash.discovery.functions_to_optimize import FunctionToOptimize
|
||||
from codeflash.models.models import CodePosition, FunctionParent, TestFile, TestFiles, TestingMode, TestsInFile
|
||||
from codeflash.optimization.optimizer import Optimizer
|
||||
from codeflash.optimization.function_optimizer import FunctionOptimizer
|
||||
from codeflash.verification.test_results import TestType
|
||||
from codeflash.verification.verification_utils import TestConfig
|
||||
|
||||
codeflash_wrap_string = """def codeflash_wrap(wrapped, test_module_name, test_class_name, test_name, function_name, line_id, loop_index, codeflash_cur, codeflash_con, *args, **kwargs):
|
||||
test_id = f'{{test_module_name}}:{{test_class_name}}:{{test_name}}:{{line_id}}:{{loop_index}}'
|
||||
|
|
@ -160,7 +160,7 @@ class TestPigLatin(unittest.TestCase):
|
|||
with tempfile.NamedTemporaryFile(mode="w") as f:
|
||||
f.write(code)
|
||||
f.flush()
|
||||
func = FunctionToOptimize(function_name="sorter", parents=[], file_path=Path("module.py"))
|
||||
func = FunctionToOptimize(function_name="sorter", parents=[], file_path=Path(f.name))
|
||||
original_cwd = Path.cwd()
|
||||
run_cwd = Path(__file__).parent.parent.resolve()
|
||||
os.chdir(run_cwd)
|
||||
|
|
@ -351,12 +351,12 @@ def test_sort():
|
|||
try:
|
||||
with test_path.open("w") as f:
|
||||
f.write(code)
|
||||
|
||||
code_path = (Path(__file__).parent.resolve() / "../code_to_optimize/bubble_sort.py").resolve()
|
||||
tests_root = Path(__file__).parent.resolve() / "../code_to_optimize/tests/pytest/"
|
||||
project_root_path = (Path(__file__).parent / "..").resolve()
|
||||
original_cwd = Path.cwd()
|
||||
run_cwd = Path(__file__).parent.parent.resolve()
|
||||
func = FunctionToOptimize(function_name="sorter", parents=[], file_path=Path("module.py"))
|
||||
func = FunctionToOptimize(function_name="sorter", parents=[], file_path=code_path)
|
||||
os.chdir(run_cwd)
|
||||
success, new_test = inject_profiling_into_existing_test(
|
||||
test_path,
|
||||
|
|
@ -394,18 +394,14 @@ def test_sort():
|
|||
|
||||
# Overwrite old test with new instrumented test
|
||||
|
||||
opt = Optimizer(
|
||||
Namespace(
|
||||
project_root=project_root_path,
|
||||
disable_telemetry=True,
|
||||
tests_root=tests_root,
|
||||
test_framework="pytest",
|
||||
pytest_cmd="pytest",
|
||||
experiment_id=None,
|
||||
test_project_root=project_root_path,
|
||||
)
|
||||
test_config = TestConfig(
|
||||
tests_root=tests_root,
|
||||
tests_project_rootdir=project_root_path,
|
||||
project_root_path=project_root_path,
|
||||
test_framework="pytest",
|
||||
pytest_cmd="pytest",
|
||||
)
|
||||
|
||||
func_optimizer = FunctionOptimizer(function_to_optimize=func, test_cfg=test_config)
|
||||
test_env = os.environ.copy()
|
||||
test_env["CODEFLASH_TEST_ITERATION"] = "0"
|
||||
test_env["CODEFLASH_LOOP_INDEX"] = "1"
|
||||
|
|
@ -420,7 +416,7 @@ def test_sort():
|
|||
)
|
||||
]
|
||||
)
|
||||
test_results, coverage_data = opt.run_and_parse_tests(
|
||||
test_results, coverage_data = func_optimizer.run_and_parse_tests(
|
||||
testing_type=TestingMode.BEHAVIOR,
|
||||
test_env=test_env,
|
||||
test_files=test_files,
|
||||
|
|
@ -455,7 +451,7 @@ def test_sort():
|
|||
with test_path_perf.open("w") as f:
|
||||
f.write(new_perf_test)
|
||||
|
||||
test_results_perf, _ = opt.run_and_parse_tests(
|
||||
test_results_perf, _ = func_optimizer.run_and_parse_tests(
|
||||
testing_type=TestingMode.PERFORMANCE,
|
||||
test_env=test_env,
|
||||
test_files=test_files,
|
||||
|
|
@ -556,6 +552,7 @@ def test_sort_parametrized(input, expected_output):
|
|||
assert output == expected_output
|
||||
"""
|
||||
)
|
||||
code_path = (Path(__file__).parent.resolve() / "../code_to_optimize/bubble_sort.py").resolve()
|
||||
test_path = (
|
||||
Path(__file__).parent.resolve()
|
||||
/ "../code_to_optimize/tests/pytest/test_perfinjector_bubble_sort_parametrized_results_temp.py"
|
||||
|
|
@ -573,7 +570,7 @@ def test_sort_parametrized(input, expected_output):
|
|||
original_cwd = Path.cwd()
|
||||
run_cwd = Path(__file__).parent.parent.resolve()
|
||||
|
||||
func = FunctionToOptimize(function_name="sorter", parents=[], file_path=Path("module.py"))
|
||||
func = FunctionToOptimize(function_name="sorter", parents=[], file_path=code_path)
|
||||
os.chdir(run_cwd)
|
||||
success, new_test = inject_profiling_into_existing_test(
|
||||
test_path, [CodePosition(14, 13)], func, project_root_path, "pytest", mode=TestingMode.BEHAVIOR
|
||||
|
|
@ -614,19 +611,15 @@ def test_sort_parametrized(input, expected_output):
|
|||
)
|
||||
]
|
||||
)
|
||||
|
||||
opt = Optimizer(
|
||||
Namespace(
|
||||
project_root=project_root_path,
|
||||
disable_telemetry=True,
|
||||
tests_root=tests_root,
|
||||
test_framework="pytest",
|
||||
pytest_cmd="pytest",
|
||||
experiment_id=None,
|
||||
test_project_root=project_root_path,
|
||||
)
|
||||
test_config = TestConfig(
|
||||
tests_root=tests_root,
|
||||
tests_project_rootdir=project_root_path,
|
||||
project_root_path=project_root_path,
|
||||
test_framework="pytest",
|
||||
pytest_cmd="pytest",
|
||||
)
|
||||
test_results, coverage_data = opt.run_and_parse_tests(
|
||||
func_optimizer = FunctionOptimizer(function_to_optimize=func, test_cfg=test_config)
|
||||
test_results, coverage_data = func_optimizer.run_and_parse_tests(
|
||||
testing_type=TestingMode.BEHAVIOR,
|
||||
test_env=test_env,
|
||||
test_files=test_files,
|
||||
|
|
@ -668,7 +661,7 @@ def test_sort_parametrized(input, expected_output):
|
|||
assert test_results[2].runtime > 0
|
||||
assert test_results[2].did_pass
|
||||
|
||||
test_results_perf, coverage_data = opt.run_and_parse_tests(
|
||||
test_results_perf, coverage_data = func_optimizer.run_and_parse_tests(
|
||||
testing_type=TestingMode.PERFORMANCE,
|
||||
test_env=test_env,
|
||||
test_files=test_files,
|
||||
|
|
@ -783,7 +776,7 @@ def test_sort_parametrized_loop(input, expected_output):
|
|||
assert output == expected_output
|
||||
"""
|
||||
)
|
||||
|
||||
code_path = (Path(__file__).parent.resolve() / "../code_to_optimize/bubble_sort.py").resolve()
|
||||
test_path = (
|
||||
Path(__file__).parent.resolve()
|
||||
/ "../code_to_optimize/tests/pytest/test_perfinjector_bubble_sort_parametrized_loop_results_temp.py"
|
||||
|
|
@ -805,7 +798,7 @@ def test_sort_parametrized_loop(input, expected_output):
|
|||
original_cwd = Path.cwd()
|
||||
run_cwd = Path(__file__).parent.parent.resolve()
|
||||
|
||||
func = FunctionToOptimize(function_name="sorter", parents=[], file_path=Path("module.py"))
|
||||
func = FunctionToOptimize(function_name="sorter", parents=[], file_path=code_path)
|
||||
os.chdir(run_cwd)
|
||||
success, new_test = inject_profiling_into_existing_test(
|
||||
test_path, [CodePosition(15, 17)], func, project_root_path, "pytest", mode=TestingMode.BEHAVIOR
|
||||
|
|
@ -857,18 +850,16 @@ def test_sort_parametrized_loop(input, expected_output):
|
|||
)
|
||||
]
|
||||
)
|
||||
opt = Optimizer(
|
||||
Namespace(
|
||||
project_root=project_root_path,
|
||||
disable_telemetry=True,
|
||||
tests_root=tests_root,
|
||||
test_framework="pytest",
|
||||
pytest_cmd="pytest",
|
||||
experiment_id=None,
|
||||
test_project_root=project_root_path,
|
||||
)
|
||||
|
||||
test_config = TestConfig(
|
||||
tests_root=tests_root,
|
||||
tests_project_rootdir=project_root_path,
|
||||
project_root_path=project_root_path,
|
||||
test_framework="pytest",
|
||||
pytest_cmd="pytest",
|
||||
)
|
||||
test_results, coverage_data = opt.run_and_parse_tests(
|
||||
func_optimizer = FunctionOptimizer(function_to_optimize=func, test_cfg=test_config)
|
||||
test_results, coverage_data = func_optimizer.run_and_parse_tests(
|
||||
testing_type=TestingMode.BEHAVIOR,
|
||||
test_env=test_env,
|
||||
test_files=test_files,
|
||||
|
|
@ -944,7 +935,7 @@ def test_sort_parametrized_loop(input, expected_output):
|
|||
assert test_results[5].runtime > 0
|
||||
assert test_results[5].did_pass
|
||||
|
||||
test_results, _ = opt.run_and_parse_tests(
|
||||
test_results, _ = func_optimizer.run_and_parse_tests(
|
||||
testing_type=TestingMode.PERFORMANCE,
|
||||
test_env=test_env,
|
||||
test_files=test_files,
|
||||
|
|
@ -1097,7 +1088,7 @@ def test_sort():
|
|||
assert output == expected_output
|
||||
"""
|
||||
)
|
||||
|
||||
code_path = (Path(__file__).parent.resolve() / "../code_to_optimize/bubble_sort.py").resolve()
|
||||
test_path = (
|
||||
Path(__file__).parent.resolve()
|
||||
/ "../code_to_optimize/tests/pytest/test_perfinjector_bubble_sort_loop_results_temp.py"
|
||||
|
|
@ -1119,7 +1110,7 @@ def test_sort():
|
|||
run_cwd = Path(__file__).parent.parent.resolve()
|
||||
original_cwd = Path.cwd()
|
||||
|
||||
func = FunctionToOptimize(function_name="sorter", parents=[], file_path=Path("module.py"))
|
||||
func = FunctionToOptimize(function_name="sorter", parents=[], file_path=code_path)
|
||||
os.chdir(str(run_cwd))
|
||||
success, new_test_behavior = inject_profiling_into_existing_test(
|
||||
test_path, [CodePosition(11, 17)], func, project_root_path, "pytest", mode=TestingMode.BEHAVIOR
|
||||
|
|
@ -1169,18 +1160,15 @@ def test_sort():
|
|||
]
|
||||
)
|
||||
|
||||
opt = Optimizer(
|
||||
Namespace(
|
||||
project_root=project_root_path,
|
||||
disable_telemetry=True,
|
||||
tests_root=tests_root,
|
||||
test_framework="pytest",
|
||||
pytest_cmd="pytest",
|
||||
experiment_id=None,
|
||||
test_project_root=project_root_path,
|
||||
)
|
||||
test_config = TestConfig(
|
||||
tests_root=tests_root,
|
||||
tests_project_rootdir=project_root_path,
|
||||
project_root_path=project_root_path,
|
||||
test_framework="pytest",
|
||||
pytest_cmd="pytest",
|
||||
)
|
||||
test_results, coverage_data = opt.run_and_parse_tests(
|
||||
func_optimizer = FunctionOptimizer(function_to_optimize=func, test_cfg=test_config)
|
||||
test_results, coverage_data = func_optimizer.run_and_parse_tests(
|
||||
testing_type=TestingMode.BEHAVIOR,
|
||||
test_env=test_env,
|
||||
test_files=test_files,
|
||||
|
|
@ -1222,7 +1210,7 @@ def test_sort():
|
|||
)
|
||||
assert test_results[2].runtime > 0
|
||||
assert test_results[2].did_pass
|
||||
test_results, coverage_data = opt.run_and_parse_tests(
|
||||
test_results, coverage_data = func_optimizer.run_and_parse_tests(
|
||||
testing_type=TestingMode.PERFORMANCE,
|
||||
test_env=test_env,
|
||||
test_files=test_files,
|
||||
|
|
@ -1358,7 +1346,7 @@ class TestPigLatin(unittest.TestCase):
|
|||
self.assertEqual(output, list(range(50)))
|
||||
"""
|
||||
)
|
||||
|
||||
code_path = (Path(__file__).parent.resolve() / "../code_to_optimize/bubble_sort.py").resolve()
|
||||
test_path = (
|
||||
Path(__file__).parent.resolve()
|
||||
/ "../code_to_optimize/tests/unittest/test_perfinjector_bubble_sort_unittest_results_temp.py"
|
||||
|
|
@ -1380,7 +1368,7 @@ class TestPigLatin(unittest.TestCase):
|
|||
run_cwd = Path(__file__).parent.parent.resolve()
|
||||
original_cwd = Path.cwd()
|
||||
|
||||
func = FunctionToOptimize(function_name="sorter", parents=[], file_path=Path("module.py"))
|
||||
func = FunctionToOptimize(function_name="sorter", parents=[], file_path=code_path)
|
||||
os.chdir(run_cwd)
|
||||
success, new_test_behavior = inject_profiling_into_existing_test(
|
||||
test_path,
|
||||
|
|
@ -1440,18 +1428,15 @@ class TestPigLatin(unittest.TestCase):
|
|||
)
|
||||
]
|
||||
)
|
||||
opt = Optimizer(
|
||||
Namespace(
|
||||
project_root=project_root_path,
|
||||
disable_telemetry=True,
|
||||
tests_root=tests_root,
|
||||
test_framework="unittest",
|
||||
pytest_cmd="pytest",
|
||||
experiment_id=None,
|
||||
test_project_root=project_root_path,
|
||||
)
|
||||
test_config = TestConfig(
|
||||
tests_root=tests_root,
|
||||
tests_project_rootdir=project_root_path,
|
||||
project_root_path=project_root_path,
|
||||
test_framework="unittest",
|
||||
pytest_cmd="pytest",
|
||||
)
|
||||
test_results, coverage_data = opt.run_and_parse_tests(
|
||||
func_optimizer = FunctionOptimizer(function_to_optimize=func, test_cfg=test_config)
|
||||
test_results, coverage_data = func_optimizer.run_and_parse_tests(
|
||||
testing_type=TestingMode.BEHAVIOR,
|
||||
test_env=test_env,
|
||||
test_files=test_files,
|
||||
|
|
@ -1493,7 +1478,7 @@ class TestPigLatin(unittest.TestCase):
|
|||
)
|
||||
assert test_results[2].runtime > 0
|
||||
assert test_results[2].did_pass
|
||||
test_results, coverage_data = opt.run_and_parse_tests(
|
||||
test_results, coverage_data = func_optimizer.run_and_parse_tests(
|
||||
testing_type=TestingMode.PERFORMANCE,
|
||||
test_env=test_env,
|
||||
test_files=test_files,
|
||||
|
|
@ -1617,7 +1602,7 @@ class TestPigLatin(unittest.TestCase):
|
|||
self.assertEqual(output, expected_output)
|
||||
"""
|
||||
)
|
||||
|
||||
code_path = (Path(__file__).parent.resolve() / "../code_to_optimize/bubble_sort.py").resolve()
|
||||
test_path = (
|
||||
Path(__file__).parent.resolve()
|
||||
/ "../code_to_optimize/tests/unittest/test_perfinjector_bubble_sort_unittest_parametrized_results_temp.py"
|
||||
|
|
@ -1638,7 +1623,7 @@ class TestPigLatin(unittest.TestCase):
|
|||
run_cwd = Path(__file__).parent.parent.resolve()
|
||||
original_cwd = Path.cwd()
|
||||
|
||||
func = FunctionToOptimize(function_name="sorter", parents=[], file_path=Path("module.py"))
|
||||
func = FunctionToOptimize(function_name="sorter", parents=[], file_path=code_path)
|
||||
os.chdir(run_cwd)
|
||||
success, new_test_behavior = inject_profiling_into_existing_test(
|
||||
test_path, [CodePosition(16, 17)], func, project_root_path, "unittest", mode=TestingMode.BEHAVIOR
|
||||
|
|
@ -1690,18 +1675,15 @@ class TestPigLatin(unittest.TestCase):
|
|||
)
|
||||
]
|
||||
)
|
||||
opt = Optimizer(
|
||||
Namespace(
|
||||
project_root=project_root_path,
|
||||
disable_telemetry=True,
|
||||
tests_root=tests_root,
|
||||
test_framework="unittest",
|
||||
pytest_cmd="pytest",
|
||||
experiment_id=None,
|
||||
test_project_root=project_root_path,
|
||||
)
|
||||
test_config = TestConfig(
|
||||
tests_root=tests_root,
|
||||
tests_project_rootdir=project_root_path,
|
||||
project_root_path=project_root_path,
|
||||
test_framework="unittest",
|
||||
pytest_cmd="pytest",
|
||||
)
|
||||
test_results, coverage_data = opt.run_and_parse_tests(
|
||||
func_optimizer = FunctionOptimizer(function_to_optimize=func, test_cfg=test_config)
|
||||
test_results, coverage_data = func_optimizer.run_and_parse_tests(
|
||||
testing_type=TestingMode.BEHAVIOR,
|
||||
test_env=test_env,
|
||||
test_files=test_files,
|
||||
|
|
@ -1744,7 +1726,7 @@ class TestPigLatin(unittest.TestCase):
|
|||
assert test_results[2].runtime > 0
|
||||
assert test_results[2].did_pass
|
||||
|
||||
test_results, coverage_data = opt.run_and_parse_tests(
|
||||
test_results, coverage_data = func_optimizer.run_and_parse_tests(
|
||||
testing_type=TestingMode.PERFORMANCE,
|
||||
test_env=test_env,
|
||||
test_files=test_files,
|
||||
|
|
@ -1874,7 +1856,7 @@ class TestPigLatin(unittest.TestCase):
|
|||
self.assertEqual(output, expected_output)
|
||||
"""
|
||||
)
|
||||
|
||||
code_path = (Path(__file__).parent.resolve() / "../code_to_optimize/bubble_sort.py").resolve()
|
||||
test_path = (
|
||||
Path(__file__).parent.resolve()
|
||||
/ "../code_to_optimize/tests/unittest/test_perfinjector_bubble_sort_unittest_loop_results_temp.py"
|
||||
|
|
@ -1896,7 +1878,7 @@ class TestPigLatin(unittest.TestCase):
|
|||
run_cwd = Path(__file__).parent.parent.resolve()
|
||||
original_cwd = Path.cwd()
|
||||
|
||||
func = FunctionToOptimize(function_name="sorter", parents=[], file_path=Path("module.py"))
|
||||
func = FunctionToOptimize(function_name="sorter", parents=[], file_path=code_path)
|
||||
os.chdir(run_cwd)
|
||||
success, new_test_behavior = inject_profiling_into_existing_test(
|
||||
test_path, [CodePosition(14, 21)], func, project_root_path, "unittest", mode=TestingMode.BEHAVIOR
|
||||
|
|
@ -1944,19 +1926,15 @@ class TestPigLatin(unittest.TestCase):
|
|||
)
|
||||
]
|
||||
)
|
||||
|
||||
opt = Optimizer(
|
||||
Namespace(
|
||||
project_root=project_root_path,
|
||||
disable_telemetry=True,
|
||||
tests_root=tests_root,
|
||||
test_framework="unittest",
|
||||
pytest_cmd="pytest",
|
||||
experiment_id=None,
|
||||
test_project_root=project_root_path,
|
||||
)
|
||||
test_config = TestConfig(
|
||||
tests_root=tests_root,
|
||||
tests_project_rootdir=project_root_path,
|
||||
project_root_path=project_root_path,
|
||||
test_framework="unittest",
|
||||
pytest_cmd="pytest",
|
||||
)
|
||||
test_results, coverage_data = opt.run_and_parse_tests(
|
||||
func_optimizer = FunctionOptimizer(function_to_optimize=func, test_cfg=test_config)
|
||||
test_results, coverage_data = func_optimizer.run_and_parse_tests(
|
||||
test_env=test_env,
|
||||
testing_type=TestingMode.BEHAVIOR,
|
||||
test_files=test_files,
|
||||
|
|
@ -1999,7 +1977,7 @@ class TestPigLatin(unittest.TestCase):
|
|||
assert test_results[2].runtime > 0
|
||||
assert test_results[2].did_pass
|
||||
|
||||
test_results, coverage_data = opt.run_and_parse_tests(
|
||||
test_results, coverage_data = func_optimizer.run_and_parse_tests(
|
||||
test_env=test_env,
|
||||
testing_type=TestingMode.PERFORMANCE,
|
||||
test_files=test_files,
|
||||
|
|
@ -2127,7 +2105,7 @@ class TestPigLatin(unittest.TestCase):
|
|||
self.assertEqual(output, expected_output)
|
||||
"""
|
||||
)
|
||||
|
||||
code_path = (Path(__file__).parent.resolve() / "../code_to_optimize/bubble_sort.py").resolve()
|
||||
test_path = (
|
||||
Path(__file__).parent.resolve()
|
||||
/ "../code_to_optimize/tests/unittest/test_perfinjector_bubble_sort_unittest_parametrized_loop_results_temp.py"
|
||||
|
|
@ -2148,7 +2126,7 @@ class TestPigLatin(unittest.TestCase):
|
|||
run_cwd = Path(__file__).parent.parent.resolve()
|
||||
original_cwd = Path.cwd()
|
||||
|
||||
f = FunctionToOptimize(function_name="sorter", file_path=Path("module.py"), parents=[])
|
||||
f = FunctionToOptimize(function_name="sorter", file_path=code_path, parents=[])
|
||||
os.chdir(run_cwd)
|
||||
success, new_test_behavior = inject_profiling_into_existing_test(
|
||||
test_path, [CodePosition(17, 21)], f, project_root_path, "unittest", mode=TestingMode.BEHAVIOR
|
||||
|
|
@ -2197,18 +2175,15 @@ class TestPigLatin(unittest.TestCase):
|
|||
)
|
||||
]
|
||||
)
|
||||
opt = Optimizer(
|
||||
Namespace(
|
||||
project_root=project_root_path,
|
||||
disable_telemetry=True,
|
||||
tests_root=tests_root,
|
||||
test_framework="unittest",
|
||||
pytest_cmd="pytest",
|
||||
experiment_id=None,
|
||||
test_project_root=project_root_path,
|
||||
)
|
||||
test_config = TestConfig(
|
||||
tests_root=tests_root,
|
||||
tests_project_rootdir=project_root_path,
|
||||
project_root_path=project_root_path,
|
||||
test_framework="unittest",
|
||||
pytest_cmd="pytest",
|
||||
)
|
||||
test_results, coverage_data = opt.run_and_parse_tests(
|
||||
func_optimizer = FunctionOptimizer(function_to_optimize=f, test_cfg=test_config)
|
||||
test_results, coverage_data = func_optimizer.run_and_parse_tests(
|
||||
testing_type=TestingMode.BEHAVIOR,
|
||||
test_env=test_env,
|
||||
test_files=test_files,
|
||||
|
|
@ -2283,7 +2258,7 @@ class TestPigLatin(unittest.TestCase):
|
|||
)
|
||||
assert test_results[5].runtime > 0
|
||||
assert test_results[5].did_pass
|
||||
test_results, coverage_data = opt.run_and_parse_tests(
|
||||
test_results, coverage_data = func_optimizer.run_and_parse_tests(
|
||||
testing_type=TestingMode.PERFORMANCE,
|
||||
test_env=test_env,
|
||||
test_files=test_files,
|
||||
|
|
@ -2776,7 +2751,7 @@ def test_code_replacement10() -> None:
|
|||
func = FunctionToOptimize(
|
||||
function_name="get_code_optimization_context",
|
||||
parents=[FunctionParent("Optimizer", "ClassDef")],
|
||||
file_path=Path("module.py"),
|
||||
file_path=Path(f.name),
|
||||
)
|
||||
original_cwd = Path.cwd()
|
||||
run_cwd = Path(__file__).parent.parent.resolve()
|
||||
|
|
@ -2824,7 +2799,7 @@ def test_sleepfunc_sequence_short(n, expected_total_sleep_time):
|
|||
assert output == expected_total_sleep_time
|
||||
"""
|
||||
)
|
||||
|
||||
code_path = (Path(__file__).parent.resolve() / "../code_to_optimize/sleeptime.py").resolve()
|
||||
test_path = (
|
||||
Path(__file__).parent.resolve()
|
||||
/ "../code_to_optimize/tests/pytest/test_time_correction_instrumentation_temp.py"
|
||||
|
|
@ -2837,7 +2812,7 @@ def test_sleepfunc_sequence_short(n, expected_total_sleep_time):
|
|||
project_root_path = (Path(__file__).parent.resolve() / "../").resolve()
|
||||
original_cwd = Path.cwd()
|
||||
run_cwd = Path(__file__).parent.parent.resolve()
|
||||
func = FunctionToOptimize(function_name="accurate_sleepfunc", parents=[], file_path=Path("module.py"))
|
||||
func = FunctionToOptimize(function_name="accurate_sleepfunc", parents=[], file_path=code_path)
|
||||
os.chdir(run_cwd)
|
||||
success, new_test = inject_profiling_into_existing_test(
|
||||
test_path, [CodePosition(8, 13)], func, project_root_path, "pytest", mode=TestingMode.PERFORMANCE
|
||||
|
|
@ -2858,17 +2833,14 @@ def test_sleepfunc_sequence_short(n, expected_total_sleep_time):
|
|||
with test_path.open("w") as f:
|
||||
f.write(new_test)
|
||||
|
||||
opt = Optimizer(
|
||||
Namespace(
|
||||
project_root=project_root_path,
|
||||
disable_telemetry=True,
|
||||
tests_root=tests_root,
|
||||
test_framework="pytest",
|
||||
pytest_cmd="pytest",
|
||||
experiment_id=None,
|
||||
test_project_root=project_root_path,
|
||||
)
|
||||
test_config = TestConfig(
|
||||
tests_root=tests_root,
|
||||
tests_project_rootdir=project_root_path,
|
||||
project_root_path=project_root_path,
|
||||
test_framework="pytest",
|
||||
pytest_cmd="pytest",
|
||||
)
|
||||
func_optimizer = FunctionOptimizer(function_to_optimize=func, test_cfg=test_config)
|
||||
test_files = TestFiles(
|
||||
test_files=[
|
||||
TestFile(
|
||||
|
|
@ -2879,7 +2851,7 @@ def test_sleepfunc_sequence_short(n, expected_total_sleep_time):
|
|||
)
|
||||
]
|
||||
)
|
||||
test_results, coverage_data = opt.run_and_parse_tests(
|
||||
test_results, coverage_data = func_optimizer.run_and_parse_tests(
|
||||
testing_type=TestingMode.PERFORMANCE,
|
||||
test_env=test_env,
|
||||
test_files=test_files,
|
||||
|
|
@ -2946,7 +2918,7 @@ class TestPigLatin(unittest.TestCase):
|
|||
output = codeflash_wrap(accurate_sleepfunc, '{module_path}', 'TestPigLatin', 'test_sleepfunc_sequence_short', 'accurate_sleepfunc', '0', codeflash_loop_index, n)
|
||||
"""
|
||||
)
|
||||
|
||||
code_path = (Path(__file__).parent.resolve() / "../code_to_optimize/sleeptime.py").resolve()
|
||||
test_path = (
|
||||
Path(__file__).parent.resolve()
|
||||
/ "../code_to_optimize/tests/unittest/test_time_correction_instrumentation_unittest_temp.py"
|
||||
|
|
@ -2959,7 +2931,7 @@ class TestPigLatin(unittest.TestCase):
|
|||
project_root_path = (Path(__file__).parent.resolve() / "../").resolve()
|
||||
original_cwd = Path.cwd()
|
||||
run_cwd = Path(__file__).parent.parent.resolve()
|
||||
func = FunctionToOptimize(function_name="accurate_sleepfunc", parents=[], file_path=Path("module.py"))
|
||||
func = FunctionToOptimize(function_name="accurate_sleepfunc", parents=[], file_path=code_path)
|
||||
os.chdir(run_cwd)
|
||||
success, new_test = inject_profiling_into_existing_test(
|
||||
test_path, [CodePosition(12, 17)], func, project_root_path, "unittest", mode=TestingMode.PERFORMANCE
|
||||
|
|
@ -2980,17 +2952,6 @@ class TestPigLatin(unittest.TestCase):
|
|||
with test_path.open("w") as f:
|
||||
f.write(new_test)
|
||||
|
||||
opt = Optimizer(
|
||||
Namespace(
|
||||
project_root=project_root_path,
|
||||
disable_telemetry=True,
|
||||
tests_root=tests_root,
|
||||
test_framework="unittest",
|
||||
pytest_cmd="pytest",
|
||||
experiment_id=None,
|
||||
test_project_root=project_root_path,
|
||||
)
|
||||
)
|
||||
test_files = TestFiles(
|
||||
test_files=[
|
||||
TestFile(
|
||||
|
|
@ -3009,7 +2970,15 @@ class TestPigLatin(unittest.TestCase):
|
|||
)
|
||||
]
|
||||
)
|
||||
test_results, coverage_data = opt.run_and_parse_tests(
|
||||
test_config = TestConfig(
|
||||
tests_root=tests_root,
|
||||
tests_project_rootdir=project_root_path,
|
||||
project_root_path=project_root_path,
|
||||
test_framework="unittest",
|
||||
pytest_cmd="pytest",
|
||||
)
|
||||
func_optimizer = FunctionOptimizer(function_to_optimize=func, test_cfg=test_config)
|
||||
test_results, coverage_data = func_optimizer.run_and_parse_tests(
|
||||
testing_type=TestingMode.PERFORMANCE,
|
||||
test_env=test_env,
|
||||
test_files=test_files,
|
||||
|
|
|
|||
|
|
@ -118,9 +118,14 @@ def test_single_element_list():
|
|||
)
|
||||
|
||||
# Init paths
|
||||
tests_root = (Path(__file__).parent.resolve() / "../code_to_optimize/tests/pytest/").resolve()
|
||||
test_path = tests_root / "test_aiservice_behavior_results_temp.py"
|
||||
test_path_perf = tests_root / "test_aiservice_behavior_results_perf_temp.py"
|
||||
test_path = (
|
||||
Path(__file__).parent.resolve() / "../code_to_optimize/tests/pytest/test_aiservice_behavior_results_temp.py"
|
||||
).resolve()
|
||||
test_path_perf = (
|
||||
Path(__file__).parent.resolve()
|
||||
/ "../code_to_optimize/tests/pytest/test_aiservice_behavior_results_perf_temp.py"
|
||||
).resolve()
|
||||
tests_root = Path(__file__).parent.resolve() / "../code_to_optimize/tests/pytest/"
|
||||
project_root_path = (Path(__file__).parent / "..").resolve()
|
||||
run_cwd = Path(__file__).parent.parent.resolve()
|
||||
os.chdir(run_cwd)
|
||||
|
|
@ -161,7 +166,9 @@ def test_single_element_list():
|
|||
]
|
||||
)
|
||||
a = BubbleSorter()
|
||||
test_results, coverage_data = opt.run_and_parse_tests(
|
||||
function_to_optimize = FunctionToOptimize("sorter", fto_path, [FunctionParent("BubbleSorter", "ClassDef")])
|
||||
func_opt = opt.create_function_optimizer(function_to_optimize)
|
||||
test_results, coverage_data = func_opt.run_and_parse_tests(
|
||||
testing_type=TestingMode.BEHAVIOR,
|
||||
test_env=test_env,
|
||||
test_files=test_files,
|
||||
|
|
@ -194,7 +201,8 @@ class BubbleSorter:
|
|||
return arr
|
||||
"""
|
||||
fto_path.write_text(optimized_code_mutated_attr, "utf-8")
|
||||
test_results_mutated_attr, coverage_data = opt.run_and_parse_tests(
|
||||
func_opt = opt.create_function_optimizer(function_to_optimize)
|
||||
test_results_mutated_attr, coverage_data = func_opt.run_and_parse_tests(
|
||||
testing_type=TestingMode.BEHAVIOR,
|
||||
test_env=test_env,
|
||||
test_files=test_files,
|
||||
|
|
@ -293,7 +301,8 @@ def test_single_element_list():
|
|||
)
|
||||
]
|
||||
)
|
||||
test_results, coverage_data = opt.run_and_parse_tests(
|
||||
func_opt = opt.create_function_optimizer(function_to_optimize)
|
||||
test_results, coverage_data = func_opt.run_and_parse_tests(
|
||||
testing_type=TestingMode.BEHAVIOR,
|
||||
test_env=test_env,
|
||||
test_files=test_files,
|
||||
|
|
@ -357,7 +366,8 @@ class BubbleSorter:
|
|||
test_project_root=project_root_path,
|
||||
)
|
||||
)
|
||||
test_results_mutated_attr, coverage_data = opt.run_and_parse_tests(
|
||||
func_opt = opt.create_function_optimizer(function_to_optimize)
|
||||
test_results_mutated_attr, coverage_data = func_opt.run_and_parse_tests(
|
||||
testing_type=TestingMode.BEHAVIOR,
|
||||
test_env=test_env,
|
||||
test_files=test_files,
|
||||
|
|
@ -403,7 +413,8 @@ class BubbleSorter:
|
|||
test_project_root=project_root_path,
|
||||
)
|
||||
)
|
||||
test_results_new_attr, coverage_data = opt.run_and_parse_tests(
|
||||
func_opt = opt.create_function_optimizer(function_to_optimize)
|
||||
test_results_new_attr, coverage_data = func_opt.run_and_parse_tests(
|
||||
testing_type=TestingMode.BEHAVIOR,
|
||||
test_env=test_env,
|
||||
test_files=test_files,
|
||||
|
|
|
|||
Loading…
Reference in a new issue