Skip to content

Commit 3443404

Browse files
committed
Merge branch 'main' into dont-optimize-repeatedly-gh-actions
2 parents c1fb089 + 2d7db72 commit 3443404

40 files changed

+3650
-323
lines changed

codeflash/LICENSE

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ Business Source License 1.1
33
Parameters
44

55
Licensor: CodeFlash Inc.
6-
Licensed Work: Codeflash Client version 0.12.x
6+
Licensed Work: Codeflash Client version 0.13.x
77
The Licensed Work is (c) 2024 CodeFlash Inc.
88

99
Additional Use Grant: None. Production use of the Licensed Work is only permitted
@@ -13,7 +13,7 @@ Additional Use Grant: None. Production use of the Licensed Work is only permitte
1313
Platform. Please visit codeflash.ai for further
1414
information.
1515

16-
Change Date: 2029-04-23
16+
Change Date: 2029-06-03
1717

1818
Change License: MIT
1919

codeflash/benchmarking/codeflash_trace.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ def setup(self, trace_path: str) -> None:
2525
"""Set up the database connection for direct writing.
2626
2727
Args:
28+
----
2829
trace_path: Path to the trace database file
2930
3031
"""
@@ -52,6 +53,7 @@ def write_function_timings(self) -> None:
5253
"""Write function call data directly to the database.
5354
5455
Args:
56+
----
5557
data: List of function call data tuples to write
5658
5759
"""
@@ -94,9 +96,11 @@ def __call__(self, func: Callable) -> Callable:
9496
"""Use as a decorator to trace function execution.
9597
9698
Args:
99+
----
97100
func: The function to be decorated
98101
99102
Returns:
103+
-------
100104
The wrapped function
101105
102106
"""

codeflash/benchmarking/instrument_codeflash_trace.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,12 @@ def add_codeflash_decorator_to_code(code: str, functions_to_optimize: list[Funct
7676
"""Add codeflash_trace to a function.
7777
7878
Args:
79+
----
7980
code: The source code as a string
8081
functions_to_optimize: List of FunctionToOptimize instances containing function details
8182
8283
Returns:
84+
-------
8385
The modified source code as a string
8486
8587
"""

codeflash/benchmarking/plugin/plugin.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,11 @@ def get_function_benchmark_timings(trace_path: Path) -> dict[str, dict[Benchmark
7474
"""Process the trace file and extract timing data for all functions.
7575
7676
Args:
77+
----
7778
trace_path: Path to the trace file
7879
7980
Returns:
81+
-------
8082
A nested dictionary where:
8183
- Outer keys are module_name.qualified_name (module.class.function)
8284
- Inner keys are of type BenchmarkKey
@@ -132,9 +134,11 @@ def get_benchmark_timings(trace_path: Path) -> dict[BenchmarkKey, int]:
132134
"""Extract total benchmark timings from trace files.
133135
134136
Args:
137+
----
135138
trace_path: Path to the trace file
136139
137140
Returns:
141+
-------
138142
A dictionary mapping where:
139143
- Keys are of type BenchmarkKey
140144
- Values are total benchmark timing in milliseconds (with overhead subtracted)

codeflash/benchmarking/replay_test.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,14 @@ def create_trace_replay_test_code(
5555
"""Create a replay test for functions based on trace data.
5656
5757
Args:
58+
----
5859
trace_file: Path to the SQLite database file
5960
functions_data: List of dictionaries with function info extracted from DB
6061
test_framework: 'pytest' or 'unittest'
6162
max_run_count: Maximum number of runs to include in the test
6263
6364
Returns:
65+
-------
6466
A string containing the test code
6567
6668
"""
@@ -218,12 +220,14 @@ def generate_replay_test(
218220
"""Generate multiple replay tests from the traced function calls, grouped by benchmark.
219221
220222
Args:
223+
----
221224
trace_file_path: Path to the SQLite database file
222225
output_dir: Directory to write the generated tests (if None, only returns the code)
223226
test_framework: 'pytest' or 'unittest'
224227
max_run_count: Maximum number of runs to include per function
225228
226229
Returns:
230+
-------
227231
Dictionary mapping benchmark names to generated test code
228232
229233
"""

codeflash/benchmarking/utils.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,11 +83,13 @@ def process_benchmark_data(
8383
"""Process benchmark data and generate detailed benchmark information.
8484
8585
Args:
86+
----
8687
replay_performance_gain: The performance gain from replay
8788
fto_benchmark_timings: Function to optimize benchmark timings
8889
total_benchmark_timings: Total benchmark timings
8990
9091
Returns:
92+
-------
9193
ProcessedBenchmarkInfo containing processed benchmark details
9294
9395
"""

codeflash/cli_cmds/cli.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ def process_pyproject_config(args: Namespace) -> Namespace:
123123
"disable_telemetry",
124124
"disable_imports_sorting",
125125
"git_remote",
126+
"override_fixtures",
126127
]
127128
for key in supported_keys:
128129
if key in pyproject_config and (

codeflash/cli_cmds/cmd_init.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ def collect_setup_info() -> SetupInfo:
211211
# Discover test directory
212212
default_tests_subdir = "tests"
213213
create_for_me_option = f"okay, create a tests{os.pathsep} directory for me!"
214-
test_subdir_options = valid_subdirs
214+
test_subdir_options = [sub_dir for sub_dir in valid_subdirs if sub_dir != module_root]
215215
if "tests" not in valid_subdirs:
216216
test_subdir_options.append(create_for_me_option)
217217
custom_dir_option = "enter a custom directory…"
@@ -240,7 +240,16 @@ def collect_setup_info() -> SetupInfo:
240240
apologize_and_exit()
241241
else:
242242
tests_root = Path(curdir) / Path(cast("str", tests_root_answer))
243+
243244
tests_root = tests_root.relative_to(curdir)
245+
246+
resolved_module_root = (Path(curdir) / Path(module_root)).resolve()
247+
resolved_tests_root = (Path(curdir) / Path(tests_root)).resolve()
248+
if resolved_module_root == resolved_tests_root:
249+
logger.warning(
250+
"It looks like your tests root is the same as your module root. This is not recommended and can lead to unexpected behavior."
251+
)
252+
244253
ph("cli-tests-root-provided")
245254

246255
# Autodiscover test framework

codeflash/cli_cmds/logging_config.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def set_level(level: int, *, echo_setting: bool = True) -> None:
2727
],
2828
force=True,
2929
)
30-
logging.info("Verbose DEBUG logging enabled") # noqa: LOG015
30+
logging.info("Verbose DEBUG logging enabled")
3131
else:
32-
logging.info("Logging level set to INFO") # noqa: LOG015
32+
logging.info("Logging level set to INFO")
3333
console.rule()

codeflash/code_utils/checkpoint.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ def add_function_to_checkpoint(
4747
"""Add a function to the checkpoint after it has been processed.
4848
4949
Args:
50+
----
5051
function_fully_qualified_name: The fully qualified name of the function
5152
status: Status of optimization (e.g., "optimized", "failed", "skipped")
5253
additional_info: Any additional information to store about the function
@@ -104,7 +105,8 @@ def cleanup(self) -> None:
104105
def get_all_historical_functions(module_root: Path, checkpoint_dir: Path) -> dict[str, dict[str, str]]:
105106
"""Get information about all processed functions, regardless of status.
106107
107-
Returns:
108+
Returns
109+
-------
108110
Dictionary mapping function names to their processing information
109111
110112
"""

0 commit comments

Comments
 (0)