Skip to content

committee_stats

src.models.committees.committee_stats

Committee statistics schema.

Generated by generate_committee_stats.pycommittee_stats.json. Variants: systems_committee_stats.json, security_committee_stats.json.

NameCount

Bases: BaseModel

A simple name/count pair used for country, continent, and institution tallies.

Source code in src/models/committees/committee_stats.py
12
13
14
15
16
17
18
19
20
21
class NameCount(BaseModel):
    """A simple name/count pair used for country, continent, and institution tallies."""

    name: str = Field(
        description="Country, continent, or institution name, e.g. 'United States', 'Europe', 'MIT'.",
        examples=["Mathias Payer"],
    )
    count: int = Field(ge=0, description="Number of AE committee members from this entity.", examples=[127])

    model_config = {"extra": "forbid"}

CommitteeSummary

Bases: BaseModel

Aggregate committee summary statistics.

Source code in src/models/committees/committee_stats.py
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
class CommitteeSummary(BaseModel):
    """Aggregate committee summary statistics."""

    total_members: int = Field(
        ge=0,
        description="Total AE committee members across all conferences and years (includes duplicates for multi-year service).",
        examples=[1250],
    )
    total_systems: int = Field(
        ge=0,
        description="Committee members from systems conferences (ATC, EUROSYS, FAST, OSDI, SC, SOSP).",
        examples=[600],
    )
    total_security: int = Field(
        ge=0,
        description="Committee members from security conferences (ACSAC, CHES, NDSS, PETS, SYSTEX, USENIXSEC, WOOT).",
        examples=[650],
    )
    total_countries: int = Field(
        ge=0,
        description="Number of unique countries represented across all committees, e.g. 59.",
        examples=[35],
    )
    total_continents: int = Field(ge=0, description="Number of unique continents represented, e.g. 7.", examples=[6])
    total_institutions: int = Field(
        ge=0, description="Number of unique institutions represented, e.g. 470.", examples=[280]
    )

    model_config = {"extra": "forbid"}

CommitteeSize

Bases: BaseModel

Committee size for a single conference-year.

Source code in src/models/committees/committee_stats.py
55
56
57
58
59
60
61
62
63
64
65
66
class CommitteeSize(BaseModel):
    """Committee size for a single conference-year."""

    conference: str = Field(description="Conference abbreviation, e.g. 'ACSAC', 'OSDI'.", examples=["osdi2023"])
    year: int = Field(description="Calendar year, e.g. 2023.", examples=[2023])
    conf_year: str = Field(
        description="Combined lowercase conference-year key, e.g. 'acsac2017', 'osdi2023'.", examples=["osdi2023"]
    )
    area: str = Field(description="Research area of this conference: 'systems' or 'security'.", examples=["systems"])
    size: int = Field(ge=0, description="Number of AE committee members for this conference-year.", examples=[25])

    model_config = {"extra": "forbid"}

FailedClassification

Bases: BaseModel

A committee member whose institution could not be geolocated.

Source code in src/models/committees/committee_stats.py
69
70
71
72
73
74
75
76
77
78
79
80
81
82
class FailedClassification(BaseModel):
    """A committee member whose institution could not be geolocated."""

    conference: str = Field(description="Conference abbreviation, e.g. 'ATC', 'USENIXSEC'.", examples=["osdi2023"])
    name: str = Field(
        description="Full name of the committee member whose affiliation could not be resolved.",
        examples=["Mathias Payer"],
    )
    affiliation: str = Field(
        description="Raw affiliation string that could not be geolocated or matched to an institution.",
        examples=["ETH Zurich"],
    )

    model_config = {"extra": "forbid"}

SplitCounts

Bases: BaseModel

Country/institution counts split by overall/systems/security.

Source code in src/models/committees/committee_stats.py
85
86
87
88
89
90
91
92
class SplitCounts(BaseModel):
    """Country/institution counts split by overall/systems/security."""

    overall: list[NameCount] = Field(description="Counts combining all areas (systems + security).")
    systems: list[NameCount] = Field(description="Counts from systems conferences only.", examples=[75])
    security: list[NameCount] = Field(description="Counts from security conferences only.", examples=[52])

    model_config = {"extra": "forbid"}

CommitteeStats

Bases: BaseModel

AE committee geographic and institutional diversity: country, continent, and institution breakdowns.

Source code in src/models/committees/committee_stats.py
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
class CommitteeStats(BaseModel):
    """AE committee geographic and institutional diversity: country, continent, and institution breakdowns."""

    summary: CommitteeSummary = Field(
        description="Aggregate summary with totals for members, countries, continents, and institutions."
    )
    by_country: SplitCounts = Field(
        description="Member counts by country, split into overall/systems/security. e.g. 'United States': 2103."
    )
    by_continent: SplitCounts = Field(description="Member counts by continent, split into overall/systems/security.")
    by_institution: SplitCounts = Field(
        description="Member counts by institution, split into overall/systems/security."
    )
    by_year: dict[str, dict[str, dict[str, int]]] = Field(
        description="Year-level geographic/institutional breakdowns keyed by category (e.g. 'country', 'continent'),"
        " then year, then name → count."
    )
    committee_sizes: list[CommitteeSize] = Field(
        description="Committee sizes for each conference-year. One entry per conference-year combination."
    )
    failed_classifications: list[FailedClassification] = Field(
        description="Members whose affiliation string could not be resolved to a country/institution."
    )

    model_config = {"extra": "forbid"}