Skip to content

chair_stats

src.models.committees.chair_stats

AE Chair statistics schema.

Generated by generate_committee_stats.pychair_stats.json. Aggregate chair-level analytics: pipeline, retention, cross-conference, teams.

ChairTeam

Bases: BaseModel

Co-chair team for a single conference-year.

Source code in src/models/committees/chair_stats.py
12
13
14
15
16
17
18
19
20
class ChairTeam(BaseModel):
    """Co-chair team for a single conference-year."""

    conference: str = Field(description="Conference abbreviation, e.g. 'OSDI'.", examples=["OSDI"])
    year: int = Field(description="Calendar year.", examples=[2023])
    chair_count: int = Field(ge=1, description="Number of co-chairs for this edition.", examples=[3])
    chairs: list[str] = Field(description="Names of the co-chairs.", examples=[["Alice", "Bob", "Carol"]])

    model_config = {"extra": "forbid"}

PipelinePromotion

Bases: BaseModel

A single member-to-chair promotion record.

Source code in src/models/committees/chair_stats.py
23
24
25
26
27
28
29
30
31
class PipelinePromotion(BaseModel):
    """A single member-to-chair promotion record."""

    name: str = Field(description="Chair's display name.", examples=["Alice Smith"])
    first_member_year: int | None = Field(default=None, description="Year of first AE member role.", examples=[2020])
    first_chair_year: int | None = Field(default=None, description="Year of first AE chair role.", examples=[2022])
    gap: int = Field(ge=0, description="Years between first member and first chair role.", examples=[2])

    model_config = {"extra": "forbid"}

PipelineStats

Bases: BaseModel

Member-to-chair promotion pipeline statistics.

Source code in src/models/committees/chair_stats.py
34
35
36
37
38
39
40
41
42
43
44
45
46
class PipelineStats(BaseModel):
    """Member-to-chair promotion pipeline statistics."""

    promoted_count: int = Field(ge=0, description="Number of chairs who served as members first.", examples=[31])
    promoted_pct: float = Field(ge=0, description="Percentage of chairs promoted from member.", examples=[37.8])
    avg_years_to_chair: float = Field(
        ge=0, description="Average years from first member to first chair.", examples=[2.7]
    )
    min_years: int = Field(ge=0, description="Minimum years to promotion.", examples=[1])
    max_years: int = Field(ge=0, description="Maximum years to promotion.", examples=[9])
    promotions: list[PipelinePromotion] = Field(description="Individual promotion records.")

    model_config = {"extra": "forbid"}

RetentionStats

Bases: BaseModel

Chair retention and repeat-chairing statistics.

Source code in src/models/committees/chair_stats.py
49
50
51
52
53
54
55
56
57
58
59
class RetentionStats(BaseModel):
    """Chair retention and repeat-chairing statistics."""

    repeat_count: int = Field(ge=0, description="Chairs who chaired 2+ times.", examples=[23])
    distribution: dict[str, int] = Field(
        description="Chair count → number of people. E.g. {'1': 59, '2': 18, '3': 2}.",
        examples=[{"1": 59, "2": 18}],
    )
    tenure_spans: list[dict] = Field(description="Per-chair tenure span data.")

    model_config = {"extra": "forbid"}

CrossConferenceChair

Bases: BaseModel

A chair who served at multiple different conference series.

Source code in src/models/committees/chair_stats.py
62
63
64
65
66
67
68
69
70
class CrossConferenceChair(BaseModel):
    """A chair who served at multiple different conference series."""

    name: str = Field(description="Chair's display name.", examples=["Alice Smith"])
    affiliation: str = Field(description="Current affiliation.", examples=["MIT"])
    series: list[str] = Field(description="Conference series chaired.", examples=[["OSDI", "ATC"]])
    chair_count: int = Field(ge=1, description="Total chairing roles.", examples=[4])

    model_config = {"extra": "forbid"}

YearTrend

Bases: BaseModel

Chair activity for a single year.

Source code in src/models/committees/chair_stats.py
73
74
75
76
77
78
79
80
class YearTrend(BaseModel):
    """Chair activity for a single year."""

    year: int = Field(description="Calendar year.", examples=[2023])
    new_chairs: int = Field(ge=0, description="Chairs entering for the first time.", examples=[14])
    active_chairs: int = Field(ge=0, description="Total chairing slots filled this year.", examples=[19])

    model_config = {"extra": "forbid"}

ChairStatsSummary

Bases: BaseModel

Top-level summary of chair statistics.

Source code in src/models/committees/chair_stats.py
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
class ChairStatsSummary(BaseModel):
    """Top-level summary of chair statistics."""

    total_chairs: int = Field(ge=0, description="Total unique AE chairs.", examples=[82])
    total_chairs_systems: int = Field(ge=0, description="Unique chairs at systems conferences.", examples=[54])
    total_chairs_security: int = Field(ge=0, description="Unique chairs at security conferences.", examples=[30])
    repeat_chairs: int = Field(ge=0, description="Chairs who chaired 2+ times.", examples=[23])
    repeat_chairs_pct: float = Field(ge=0, description="Percentage of repeat chairs.", examples=[28.0])
    repeat_chairs_systems: int = Field(ge=0, description="Repeat chairs at systems conferences.", examples=[16])
    repeat_chairs_security: int = Field(ge=0, description="Repeat chairs at security conferences.", examples=[8])
    cross_conference_chairs: int = Field(ge=0, description="Chairs spanning multiple series.", examples=[13])
    pipeline_promoted: int = Field(ge=0, description="Chairs promoted from member role.", examples=[31])
    pipeline_promoted_pct: float = Field(ge=0, description="Percentage promoted from member.", examples=[37.8])
    pipeline_avg_years: float = Field(ge=0, description="Avg years from member to chair.", examples=[2.7])
    avg_chairs_per_edition: float = Field(ge=0, description="Average co-chairs per conference edition.", examples=[2.2])
    avg_chairs_per_edition_systems: float = Field(
        ge=0, description="Average co-chairs per edition at systems conferences.", examples=[2.3]
    )
    avg_chairs_per_edition_security: float = Field(
        ge=0, description="Average co-chairs per edition at security conferences.", examples=[2.0]
    )
    total_countries: int = Field(ge=0, description="Number of distinct countries represented by chairs.", examples=[15])
    total_continents: int = Field(
        ge=0, description="Number of distinct continents represented by chairs.", examples=[4]
    )
    year_trends: list[YearTrend] = Field(description="Year-over-year chair entry and activity.")

    model_config = {"extra": "forbid"}

GeographicStats

Bases: BaseModel

Geographic diversity statistics for chairs.

Source code in src/models/committees/chair_stats.py
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
class GeographicStats(BaseModel):
    """Geographic diversity statistics for chairs."""

    total_countries: int = Field(ge=0, description="Number of distinct countries.", examples=[15])
    total_continents: int = Field(ge=0, description="Number of distinct continents.", examples=[4])
    by_country: dict[str, int] = Field(
        description="Country → number of chairs from that country.",
        examples=[{"United States": 30, "Germany": 8}],
    )
    by_continent: dict[str, int] = Field(
        description="Continent → number of chairs from that continent.",
        examples=[{"North America": 35, "Europe": 25}],
    )
    unclassified_count: int = Field(ge=0, description="Chairs without a resolved country.", examples=[3])

    model_config = {"extra": "forbid"}

ChairStats

Bases: BaseModel

Complete chair statistics output file.

Source code in src/models/committees/chair_stats.py
131
132
133
134
135
136
137
138
139
140
141
class ChairStats(BaseModel):
    """Complete chair statistics output file."""

    summary: ChairStatsSummary = Field(description="Aggregate chair metrics.")
    chair_teams: list[ChairTeam] = Field(description="Per-conference-year chair teams.")
    pipeline: PipelineStats = Field(description="Member-to-chair promotion analytics.")
    retention: RetentionStats = Field(description="Retention and repeat-chair data.")
    cross_conference: list[CrossConferenceChair] = Field(description="Chairs serving multiple series.")
    geographic: GeographicStats = Field(description="Geographic diversity of chairs.")

    model_config = {"extra": "forbid"}