Dataset Preview
Duplicate
The full dataset viewer is not available (click to read why). Only showing a preview of the rows.
The dataset generation failed
Error code:   DatasetGenerationError
Exception:    CastError
Message:      Couldn't cast
project: string
bug_id: int64
snapshot_commit: string
fix_commit: string
version: string
file_path: string
code: string
functions: list<item: struct<function_name: string, code: string, ast_nodes: list<item: string>, ast_edges: lis (... 47 chars omitted)
  child 0, item: struct<function_name: string, code: string, ast_nodes: list<item: string>, ast_edges: list<item: lis (... 35 chars omitted)
      child 0, function_name: string
      child 1, code: string
      child 2, ast_nodes: list<item: string>
          child 0, item: string
      child 3, ast_edges: list<item: list<item: int64>>
          child 0, item: list<item: int64>
              child 0, item: int64
      child 4, func_label: int64
label: int64
sample_id: string
language: string
to
{'project': Value('string'), 'file_path': Value('string'), 'bug_id': Value('string'), 'snapshot_commit': Value('string'), 'fix_commit': Value('string'), 'code': Value('string'), 'functions': List({'function_name': Value('string'), 'code': Value('string'), 'ast_nodes': List(Value('string')), 'ast_edges': List(List(Value('int64'))), 'func_label': Value('int64')}), 'label': Value('int64'), 'language': Value('string'), 'sample_id': Value('string')}
because column names don't match
Traceback:    Traceback (most recent call last):
                File "/usr/local/lib/python3.14/site-packages/datasets/builder.py", line 1816, in _prepare_split_single
                  for key, table in generator:
                                    ^^^^^^^^^
                File "/src/services/worker/src/worker/job_runners/config/parquet_and_info.py", line 613, in wrapped
                  for item in generator(*args, **kwargs):
                              ~~~~~~~~~^^^^^^^^^^^^^^^^^
                File "/usr/local/lib/python3.14/site-packages/datasets/packaged_modules/json/json.py", line 343, in _generate_tables
                  self._cast_table(pa_table, json_field_paths=json_field_paths),
                  ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                File "/usr/local/lib/python3.14/site-packages/datasets/packaged_modules/json/json.py", line 132, in _cast_table
                  pa_table = table_cast(pa_table, self.info.features.arrow_schema)
                File "/usr/local/lib/python3.14/site-packages/datasets/table.py", line 2369, in table_cast
                  return cast_table_to_schema(table, schema)
                File "/usr/local/lib/python3.14/site-packages/datasets/table.py", line 2297, in cast_table_to_schema
                  raise CastError(
                  ...<3 lines>...
                  )
              datasets.table.CastError: Couldn't cast
              project: string
              bug_id: int64
              snapshot_commit: string
              fix_commit: string
              version: string
              file_path: string
              code: string
              functions: list<item: struct<function_name: string, code: string, ast_nodes: list<item: string>, ast_edges: lis (... 47 chars omitted)
                child 0, item: struct<function_name: string, code: string, ast_nodes: list<item: string>, ast_edges: list<item: lis (... 35 chars omitted)
                    child 0, function_name: string
                    child 1, code: string
                    child 2, ast_nodes: list<item: string>
                        child 0, item: string
                    child 3, ast_edges: list<item: list<item: int64>>
                        child 0, item: list<item: int64>
                            child 0, item: int64
                    child 4, func_label: int64
              label: int64
              sample_id: string
              language: string
              to
              {'project': Value('string'), 'file_path': Value('string'), 'bug_id': Value('string'), 'snapshot_commit': Value('string'), 'fix_commit': Value('string'), 'code': Value('string'), 'functions': List({'function_name': Value('string'), 'code': Value('string'), 'ast_nodes': List(Value('string')), 'ast_edges': List(List(Value('int64'))), 'func_label': Value('int64')}), 'label': Value('int64'), 'language': Value('string'), 'sample_id': Value('string')}
              because column names don't match
              
              The above exception was the direct cause of the following exception:
              
              Traceback (most recent call last):
                File "/src/services/worker/src/worker/job_runners/config/parquet_and_info.py", line 1369, in compute_config_parquet_and_info_response
                  parquet_operations, partial, estimated_dataset_info = stream_convert_to_parquet(
                                                                        ~~~~~~~~~~~~~~~~~~~~~~~~~^
                      builder, max_dataset_size_bytes=max_dataset_size_bytes
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                  )
                  ^
                File "/src/services/worker/src/worker/job_runners/config/parquet_and_info.py", line 948, in stream_convert_to_parquet
                  builder._prepare_split(split_generator=splits_generators[split], file_format="parquet")
                  ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                File "/usr/local/lib/python3.14/site-packages/datasets/builder.py", line 1683, in _prepare_split
                  for job_id, done, content in self._prepare_split_single(
                                               ~~~~~~~~~~~~~~~~~~~~~~~~~~^
                      gen_kwargs=gen_kwargs, job_id=job_id, **_prepare_split_args
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                  ):
                  ^
                File "/usr/local/lib/python3.14/site-packages/datasets/builder.py", line 1869, in _prepare_split_single
                  raise DatasetGenerationError("An error occurred while generating the dataset") from e
              datasets.exceptions.DatasetGenerationError: An error occurred while generating the dataset

Need help to make the dataset viewer work? Make sure to review how to configure the dataset viewer, and open a discussion for direct support.

project
string
file_path
string
bug_id
string
snapshot_commit
string
fix_commit
string
code
string
functions
list
label
int64
language
string
sample_id
string
FFmpeg
libavformat/ape.c
CVE-2011-2161
8312e3fc9041027a33c8bc667bb99740fdf41dd5
8312e3fc9041027a33c8bc667bb99740fdf41dd5
/* * Monkey's Audio APE demuxer * Copyright (c) 2007 Benjamin Zores <[email protected]> * based upon libdemac from Dave Chapman. * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the...
[ { "function_name": "ape_probe", "code": "static int ape_probe(AVProbeData * p)\n{\n if (p->buf[0] == 'M' && p->buf[1] == 'A' && p->buf[2] == 'C' && p->buf[3] == ' ')\n return AVPROBE_SCORE_MAX;\n\n return 0;\n}", "ast_nodes": [ "FUNC_DECL", "IF", "RETURN", "PARAM", ...
0
c
FFmpeg-0
FFmpeg
libavcodec/dxva2_h264.c
CVE-2011-2161
8312e3fc9041027a33c8bc667bb99740fdf41dd5
8312e3fc9041027a33c8bc667bb99740fdf41dd5
/* * DXVA2 H264 HW acceleration. * * copyright (c) 2009 Laurent Aimar * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the Li...
[ { "function_name": "fill_picture_entry", "code": "static void fill_picture_entry(DXVA_PicEntry_H264 *pic,\n unsigned index, unsigned flag)\n{\n assert((index&0x7f) == index && (flag&0x01) == flag);\n pic->bPicEntry = index | (flag << 7);\n}", "ast_nodes": [ "FUN...
0
c
FFmpeg-1
linux
tools/hv/hv_kvp_daemon.c
CVE-2012-5532
95a69adab9acfc3981c504737a2b6578e4d846ef
95a69adab9acfc3981c504737a2b6578e4d846ef
"/*\n * An implementation of key value pair (KVP) functionality for Linux.\n *\n *\n * Copyright (C)(...TRUNCATED)
[{"function_name":"kvp_acquire_lock","code":"static void kvp_acquire_lock(int pool)\n{\n\tstruct flo(...TRUNCATED)
1
c
linux-2
linux
mm/memory_hotplug.c
CVE-2012-5517
08dff7b7d629807dbb1f398c68dd9cd58dd657a1
08dff7b7d629807dbb1f398c68dd9cd58dd657a1
"/*\n * linux/mm/memory_hotplug.c\n *\n * Copyright (C)\n */\n\n#include <linux/stddef.h>\n#includ(...TRUNCATED)
[{"function_name":"lock_memory_hotplug","code":"void lock_memory_hotplug(void)\n{\n\tmutex_lock(&mem(...TRUNCATED)
1
c
linux-3
linux
fs/exofs/sys.c
CVE-2012-5517
08dff7b7d629807dbb1f398c68dd9cd58dd657a1
08dff7b7d629807dbb1f398c68dd9cd58dd657a1
"/*\n * Copyright (C) 2012\n * Sachin Bhamare <[email protected]>\n * Boaz Harrosh <bharrosh@pana(...TRUNCATED)
[{"function_name":"odev_attr_show","code":"static ssize_t odev_attr_show(struct kobject *kobj, struc(...TRUNCATED)
0
c
linux-4
linux
net/ipv4/tcp_illinois.c
CVE-2012-4565
8f363b77ee4fbf7c3bbcf5ec2c5ca482d396d664
8f363b77ee4fbf7c3bbcf5ec2c5ca482d396d664
"/*\n * TCP Illinois congestion control.\n * Home page:\n *\thttp://www.ews.uiuc.edu/~shaoliu/tcpill(...TRUNCATED)
[{"function_name":"rtt_reset","code":"static void rtt_reset(struct sock *sk)\n{\n\tstruct tcp_sock *(...TRUNCATED)
1
c
linux-5
linux
fs/ext4/extents.c
CVE-2012-4508
dee1f973ca341c266229faa5a1a5bb268bed3531
dee1f973ca341c266229faa5a1a5bb268bed3531
"/*\n * Copyright (c) 2003-2006, Cluster File Systems, Inc, [email protected]\n * Written by Alex T(...TRUNCATED)
[{"function_name":"ext4_extent_block_csum","code":"static __le32 ext4_extent_block_csum(struct inode(...TRUNCATED)
1
c
linux-6
linux
net/socket.c
CVE-2012-4467
ed6fe9d614fc1bca95eb8c0ccd0e92db00ef9d5d
ed6fe9d614fc1bca95eb8c0ccd0e92db00ef9d5d
"/*\n * NET\t\tAn implementation of the SOCKET network access protocol.\n *\n * Version:\t@(#)socket(...TRUNCATED)
[{"function_name":"move_addr_to_kernel","code":"int move_addr_to_kernel(void __user *uaddr, int ulen(...TRUNCATED)
1
c
linux-7
linux
net/ipv6/reassembly.c
CVE-2012-4444
70789d7052239992824628db8133de08dc78e593
70789d7052239992824628db8133de08dc78e593
"/*\n *\tIPv6 fragment reassembly\n *\tLinux INET6 implementation\n *\n *\tAuthors:\n *\tPedro Roque(...TRUNCATED)
[{"function_name":"ip6_frag_nqueues","code":"int ip6_frag_nqueues(struct net *net)\n{\n\treturn net-(...TRUNCATED)
1
c
linux-8
linux
include/net/inet_sock.h
CVE-2012-3552
f6d8bd051c391c1c0458a30b2a7abcd939329259
f6d8bd051c391c1c0458a30b2a7abcd939329259
"/*\n * INET\t\tAn implementation of the TCP/IP protocol suite for the LINUX\n *\t\toperating system(...TRUNCATED)
[{"function_name":"inet_rsk","code":"static inline struct inet_request_sock *inet_rsk(const struct r(...TRUNCATED)
0
c
linux-9
End of preview.

HAM-Net datasets

This repository provides the processed code datasets used in the HAM-Net experiments for cross-project software defect prediction.

Each JSONL record represents one source-code file or Java class containing multiple functions.

For datasets organized by file or class, HAM-Net treats the file/class as a bag and its functions as instances, following the multiple-instance learning (MIL) setting. Each record includes a binary defect label, a project identifier, and the extracted function-level code and AST information.

Record format

A simplified MIL record looks like:

{
  "id": "stable-sample-id",
  "project": "pandas",
  "file_path": "pandas/core/example.py",
  "label": 1,
  "functions": [
    {
      "name": "example_function",
      "code": "def example_function(...): ...",
      "func_label": 1,
      "ast_nodes": ["DECLARATION", "PARAMETER", "CONTROL", "RETURN"],
      "ast_edges": [[0, 1], [0, 2], [2, 3]]
    }
  ]
}

func_label is present only when it can be derived from patch or line-level annotations. It is not available for PROMISE.

Reproducibility release

The repository contains the dataset revision used by the HAM-Net paper's fixed CPDP experiments. The main branch and the immutable v1.0.0 tag contain the same four JSONL files and matching split files. To pin the paper revision:

hf download Scream9371/hamnet-datasets promise_java.jsonl --revision v1.0.0

Reproducibility contract

v1.0.0 is pinned to the four JSONL files at repository root and the fixed CPDP files under splits/cpdp/. The JSONL files preserve the bag identity and order used by the original local HAM-Net experiments, while each bag contains the complete parseable function list. Source text retains comments and AST graphs are not truncated at 800 nodes.

The paper experiments use the complete function bags. No deterministic training-time caps are provided or used by this release.

The BugsInPy CPDP split intentionally contains the 2,416 bags used by the original HAM-Net experiment repository.

Original data sources

The published JSONL files are derived from the following public datasets. Some original datasets provide labels for functions, classes, files, or code lines. During preprocessing, HAM-Net converts several of them into a common file/class-level MIL format. The table distinguishes the original annotation level from the released HAM-Net representation.

Dataset Original source Original annotations / content HAM-Net representation
promise_java PROMISE repository Classic Java class-level defect metric datasets with a bug count/label Each Java class forms one MIL bag. The bag is positive when bug > 0.
bigvul_c MSR 2020 Big-Vul dataset Large-scale C/C++ vulnerability records containing code changes and CVE-related metadata Each C/C++ file forms one MIL bag. Functions overlapping buggy-side changed lines are marked as positive.
defactors_python Defactors Line-level defect annotations from multiple Python projects Each Python file forms one MIL bag. Functions overlapping annotated defect lines receive func_label=1.
bugsinpy_python BugsInPy Reproducible defects, buggy/fixed commits, and patch information from Python projects Each Python file forms one MIL bag. Bags are constructed from buggy files and same-project negative files.

PROMISE, Big-Vul, Defactors, and BugsInPy are converted into class-level or file-level bags for multiple-instance learning. The dataset sources provide the original labels or patch/line annotations; the exact sampling, parsing, AST normalization, and bag construction rules are described below.

Dataset summary

Percentages are computed from the final JSONL files. P50/P90/P99 are the numbers of functions per bag. mixed positive bags means positive bags containing both at least one func_label=1 function and at least one func_label=0 function. positive functions is computed only for datasets that retain function-level labels.

Dataset Language / granularity Bags or samples Positive / negative Functions per bag P50 / P90 / P99 Mixed positive bags Positive functions
promise_java Java class-level MIL bag 1,695 bags 647 / 1,048 (38.17% / 61.83%) 8 / 26 / 94.12 N/A: no function-level labels N/A
defactors_python Python file-level MIL bag 1,700 bags 873 / 827 (51.35% / 48.65%) 18 / 86 / 227.06 808 / 873 (92.55%) 3,190 / 58,028 (5.50%)
bugsinpy_python Python file-level MIL bag 2,416 bags 525 / 1,891 (21.73% / 78.27%) 9 / 79 / 205 507 / 525 (96.57%) 1,080 / 63,937 (1.69%)
bigvul_c C/C++ file-level MIL bag 1,700 bags 733 / 967 (43.12% / 56.88%) 16 / 64 / 279.01 733 / 733 (100.00%) 1,270 / 51,668 (2.46%)

promise_java uses bug > 0 as its class/bag label and therefore does not claim function-level defect localization ground truth.

How the MIL bags are constructed

The following rules define the published MIL samples.

PROMISE

  • Unit of sampling: one target Java class is one bag; methods and constructors in that class are the bag instances.
  • Source candidates: scan the available project/version CSV records and resolve each class name to its corresponding Java source file. Records without a source file, unparsable source, or fewer than three parseable methods/constructors are removed.
  • Projects: ant, camel, ivy, jedit, log4j, lucene, poi, velocity, and xalan.
  • Label: label=1 when the source bug value is greater than zero; otherwise label=0.
  • Function sampling: retain all parseable methods and constructors in the selected class. No positive/negative function sampling is performed.

Defactors

  • Unit of sampling: one Python source file is one bag and every parseable function in that file is an instance.
  • Projects: pandas, scikit-learn, localstack, django, poetry, core, airflow, lightning, spaCy, ansible, ray, celery, sentry, cpython, and transformers.
  • Function and bag labels: a function is positive when its span overlaps an annotated defect line; a bag is positive when it contains at least one positive function.
  • Negative bags: sample files from the same project whose functions do not overlap the annotated defect lines; prefer the same commit and same module when available, then use other commits from the same project, with duplicate project/commit/file records removed.
  • Function sampling: discard bags with fewer than three parseable functions during the original candidate construction.

BugsInPy

  • Unit of sampling: one Python file at a buggy commit is one bag; each parseable function in the file is an instance.
  • Projects: pandas, keras, youtube-dl, scrapy, luigi, thefuck, matplotlib, black, ansible, fastapi, tornado, tqdm, spacy, sanic, httpie, cookiecutter, and PySnooper.
  • Positive candidates: use the buggy-side files touched by each BugsInPy patch. A function is positive when its span overlaps a buggy-side patch line, and the bag is positive when at least one such function exists.
  • Negative candidates: for each bug, sample one same-project Python file from the same buggy snapshot that is not among the patched files. Half of the negative sampling quota targets files in the same directory or top-level module when such candidates exist; remaining candidates are sampled from the other files.
  • Function sampling: use seed 42, discard files with no parseable function, and retain the complete parseable function list. This release also excludes bags that contain no function definition: older construction artifacts represented them as a single <file> placeholder, which is not a valid MIL instance.

Big-Vul

  • Unit of sampling: one C/C++ file at the buggy snapshot is one bag; each parseable function is an instance.
  • Projects: linux, ImageMagick, Android, tcpdump, FFmpeg, php-src, and radare2.
  • Positive candidates: use the buggy-side files associated with the vulnerability patch. A function is positive when it overlaps a removed/changed buggy-side patch line; the file is a positive bag when at least one function is positive.
  • Negative candidates: for each positive file, sample two unmodified same-project files from the same snapshot. Half of the negative quota targets the same directory or top-level module when possible; the remainder is sampled from other files. Sampling uses seed 42, with project and global sample limits applied before writing the final set.
  • Function sampling: discard files with fewer than three parseable functions and retain all remaining functions in the full-function version.

AST normalization rules

  • To make ASTs from Java, Python, C, and C++ comparable, language-specific node types are mapped to a shared set of structural roles, such as declarations, control-flow statements, calls, assignments, returns, and literals.
  • This normalization preserves coarse syntactic structure while removing language-specific lexical details. Identifiers, punctuation, comments, and documentation text are not retained as structural AST nodes. The normalized graph contains parent-child structure, reverse edges, and self-loops.

Files

  • promise_java.jsonl
  • defactors_python.jsonl
  • bugsinpy_python.jsonl
  • bigvul_c.jsonl
  • splits/cpdp/: fixed project-disjoint splits used by the paper
Downloads last month
290