in playground/process_analysis/utils/status_transition_data_generator.py [0:0]
def _create_next_status_change(current: StatusChange) -> StatusChange | None:
next_status = None
changed_date = current.changed_date
match current.to_status:
case Status.BACKLOG:
next_status = rand.choice(
[None, Status.TODO, Status.READY, Status.IN_PROGRESS, Status.WONT_FIX],
p=[0.1, 0.6, 0.15, 0.05, 0.1],
)
changed_date = current.changed_date + timedelta(hours=rand.gumbel(24 * 50, 24 * 20))
case Status.TODO:
next_status = rand.choice(
[
None,
Status.BACKLOG,
Status.READY,
Status.IN_PROGRESS,
Status.WONT_FIX,
],
p=[0.1, 0.1, 0.45, 0.25, 0.1],
)
changed_date = current.changed_date + timedelta(hours=rand.gumbel(24 * 28, 24 * 7))
case Status.READY:
next_status = rand.choice(
[
None,
Status.BACKLOG,
Status.TODO,
Status.IN_PROGRESS,
Status.WONT_FIX,
],
p=[0.1, 0.05, 0.05, 0.75, 0.05],
)
changed_date = current.changed_date + timedelta(hours=rand.gumbel(24 * 14, 24 * 3))
case Status.IN_PROGRESS:
next_status = rand.choice(
[None, Status.TODO, Status.READY, Status.REVIEW, Status.TEST],
p=[0.05, 0.05, 0.1, 0.6, 0.2],
)
changed_date = current.changed_date + timedelta(hours=rand.gumbel(24 * 7, 24 * 3))
case Status.REVIEW:
next_status = rand.choice(
[None, Status.TODO, Status.IN_PROGRESS, Status.TEST],
p=[0.02, 0.03, 0.15, 0.8],
)
changed_date = current.changed_date + timedelta(hours=rand.gumbel(24 * 1, 24 * 0.5))
case Status.TEST:
next_status = rand.choice(
[None, Status.TODO, Status.IN_PROGRESS, Status.RELEASE],
p=[0.02, 0.06, 0.17, 0.75],
)
changed_date = current.changed_date + timedelta(hours=rand.gumbel(24 * 2, 24 * 1))
case Status.RELEASE:
next_status = rand.choice([None, Status.TODO, Status.TEST, Status.DONE], p=[0.02, 0.01, 0.1, 0.87])
changed_date = current.changed_date + timedelta(hours=rand.gumbel(24 * 3, 24 * 1))
case Status.DONE:
next_status = rand.choice([None, Status.TODO, Status.IN_PROGRESS], p=[0.85, 0.02, 0.13])
changed_date = current.changed_date + timedelta(hours=rand.gumbel(24 * 7, 24 * 3))
case Status.WONT_FIX:
next_status = rand.choice(
[None, Status.BACKLOG, Status.TODO, Status.IN_PROGRESS, Status.DONE],
p=[0.85, 0.05, 0.05, 0.02, 0.03],
)
changed_date = current.changed_date + timedelta(hours=rand.gumbel(24 * 60, 24 * 10))
case _:
pass
if next_status is None:
return None
return StatusChange(
current.issue_key,
current.issue_type,
current.created_date,
current.to_status,
next_status,
changed_date,
)