Team Ai
Apppublic

OSS-forge/CodeQualityEval

sourceHugging Facecc-by-sa-4.0updated 11mo agoView on Hugging Face
12likes
complexity_stats_java.py66 linesDownload Raw Back to 5_Code_Complexity_Analysis
1import json2import tiktoken3import lizard4import statistics5from collections import defaultdict6from tqdm import tqdm7 8ENC = tiktoken.encoding_for_model("gpt-4")9 10def analyze_code(code: str):11    lines = code.splitlines()12    analysis = lizard.analyze_file.analyze_source_code("temp.java", code)13    function_metrics = []14    token_set = set()15 16    for func in analysis.function_list:17        try:18            snippet = "\n".join(lines[func.start_line - 1 : func.end_line])19            tokens = ENC.encode(snippet)20            token_set.update(tokens)21            function_metrics.append({22                "nloc": func.nloc,23                "ccn": func.cyclomatic_complexity,24                "token_count": len(tokens),25                "function_name_length": len(func.name)26            })27        except Exception as e:28            print(f"Skipping a function due to error: {e}")29    return function_metrics, token_set30 31def print_stats(metrics_by_field, tokens_by_field):32    for field, metrics in metrics_by_field.items():33        print(f"\nStats for {field}:")34        for key in ["nloc", "ccn", "token_count", "function_name_length"]:35            values = [m[key] for m in metrics]36            print(f"  {key.upper():20} | Avg: {statistics.mean(values):6.2f} | Min: {min(values):3} | Max: {max(values):3} | Std: {statistics.stdev(values):6.2f}" if len(values) > 1 else f"  {key.upper():20} | Only one value: {values[0]}")37        print(f"  {'UNIQUE_TOKENS':20} | Total: {len(tokens_by_field[field])}")38 39    all_metrics = [m for metrics in metrics_by_field.values() for m in metrics]40    all_tokens = set().union(*tokens_by_field.values())41    print(f"\nAggregated Stats across ALL models:")42    for key in ["nloc", "ccn", "token_count", "function_name_length"]:43        values = [m[key] for m in all_metrics]44        print(f"  {key.upper():20} | Avg: {statistics.mean(values):6.2f} | Min: {min(values):3} | Max: {max(values):3} | Std: {statistics.stdev(values):6.2f}")45    print(f"  {'UNIQUE_TOKENS':20} | Total: {len(all_tokens)}")46 47def main():48    metrics_by_field = defaultdict(list)49    tokens_by_field = defaultdict(set)50 51    with open("1_dataset_sample_100/java_dataset.jsonl", "r") as f:52        lines = f.readlines()53        for line in tqdm(lines, desc="Processing Java code"):54            item = json.loads(line)55            for field in ["human_code", "chatgpt_code", "dsc_code", "qwen_code"]:56                code = item.get(field)57                if code:58                    metrics, tokens = analyze_code(code)59                    metrics_by_field[field].extend(metrics)60                    tokens_by_field[field].update(tokens)61 62    print_stats(metrics_by_field, tokens_by_field)63 64if __name__ == "__main__":65    main()66