Annotated[int, Gt(gt=0)]
Annotated[int, Gt(gt=0), Le(le=1)]
Annotated[int, Gt(gt=0), Lt(lt=1)] <- skip: invalid constraints for int
Annotated[int, Gt(gt=0), Le(le=2)]
Annotated[int, Gt(gt=0), Lt(lt=2)]
Annotated[int, Ge(ge=0)]
Annotated[int, Ge(ge=0), Le(le=1)]
Annotated[int, Ge(ge=0), Lt(lt=1)]
Annotated[int, Ge(ge=0), Le(le=2)]
Annotated[int, Ge(ge=0), Lt(lt=2)]
Annotated[int, Lt(lt=0)] <- fail: empty range for randrange() (0, 0, 0)
Annotated[int, Lt(lt=0), Ge(ge=-1)]
Annotated[int, Lt(lt=0), Gt(gt=-1)] <- skip: invalid constraints for int
Annotated[int, Lt(lt=0), Ge(ge=-2)]
Annotated[int, Lt(lt=0), Gt(gt=-2)]
Annotated[int, Le(le=0)]
Annotated[int, Le(le=0), Ge(ge=-1)]
Annotated[int, Le(le=0), Gt(gt=-1)]
Annotated[int, Le(le=0), Ge(ge=-2)]
Annotated[int, Le(le=0), Gt(gt=-2)]
Annotated[float, Gt(gt=0)]
Annotated[float, Gt(gt=0), Le(le=1)]
Annotated[float, Gt(gt=0), Lt(lt=1)] <- fail: empty range for randrange() (1, 1, 0)
Annotated[float, Gt(gt=0), Le(le=2)]
Annotated[float, Gt(gt=0), Lt(lt=2)]
Annotated[float, Ge(ge=0)]
Annotated[float, Ge(ge=0.0), Le(le=1.0)]
Annotated[float, Ge(ge=0), Lt(lt=1)]
Annotated[float, Ge(ge=0), Le(le=2)]
Annotated[float, Ge(ge=0), Lt(lt=2)]
Annotated[float, Lt(lt=0)] <- fail: empty range for randrange() (0, 0, 0)
Annotated[float, Lt(lt=0), Ge(ge=-1)]
Annotated[float, Lt(lt=0), Gt(gt=-1)] <- fail: empty range for randrange() (0, 0, 0)
Annotated[float, Lt(lt=0), Ge(ge=-2)]
Annotated[float, Lt(lt=0), Gt(gt=-2)]
Annotated[float, Le(le=0)]
Annotated[float, Le(le=0), Ge(ge=-1)]
Annotated[float, Le(le=0), Gt(gt=-1)]
Annotated[float, Le(le=0), Ge(ge=-2)]
Annotated[float, Le(le=0), Gt(gt=-2)]
Annotated[float, Gt(gt=0.1)]
Annotated[float, Gt(gt=0.1), Le(le=0.9)] <- fail: empty range for randrange() (2, 1, -1)
Annotated[float, Gt(gt=0.1), Lt(lt=0.9)] <- fail: empty range for randrange() (2, 0, -2)
Annotated[float, Gt(gt=0.1), Le(le=2.1)]
Annotated[float, Gt(gt=0.1), Lt(lt=2.1)] <- fail: empty range for randrange() (2, 2, 0)
Annotated[float, Ge(ge=0.1)]
Annotated[float, Ge(ge=0.1), Le(le=0.9)] <- fail: empty range for randrange() (1, 1, 0)
Annotated[float, Ge(ge=0.1), Lt(lt=0.9)] <- fail: empty range for randrange() (1, 0, -1)
Annotated[float, Ge(ge=0.1), Le(le=2.1)]
Annotated[float, Ge(ge=0.1), Lt(lt=2.1)]
Annotated[float, Lt(lt=-0.1)] <- fail: empty range for randrange() (0, -1, -1)
Annotated[float, Lt(lt=-0.1), Ge(ge=-0.9)] <- fail: empty range for randrange() (0, -1, -1)
Annotated[float, Lt(lt=-0.1), Gt(gt=-0.9)] <- fail: empty range for randrange() (1, -1, -2)
Annotated[float, Lt(lt=-0.1), Ge(ge=-2.1)]
Annotated[float, Lt(lt=-0.1), Gt(gt=-2.1)] <- fail: empty range for randrange() (-1, -1, 0)
Annotated[float, Le(le=-0.1)] <- fail: empty range for randrange() (0, 0, 0)
Annotated[float, Le(le=-0.1), Ge(ge=-0.9)] <- fail: empty range for randrange() (0, 0, 0)
Annotated[float, Le(le=-0.1), Gt(gt=-0.9)] <- fail: empty range for randrange() (1, 0, -1)
Annotated[float, Le(le=-0.1), Ge(ge=-2.1)]
Annotated[float, Le(le=-0.1), Gt(gt=-2.1)]
Somewhat related to #101 - perhaps this helps someone in pinpointing the issue.
Results of running the code below
Some json schemata for which generation fails
integer, x < 0:{ "exclusiveMaximum": 0, "type": "integer", "title": "Annotated[int, Lt(lt=0)]: empty range for randrange() (0, 0, 0)" }number, x < 0:{ "exclusiveMaximum": 0.0, "type": "number", "title": "Annotated[float, Lt(lt=0)]: empty range for randrange() (0, 0, 0)" }number, 0 < x < 1:{ "exclusiveMaximum": 1.0, "exclusiveMinimum": 0.0, "type": "number", "title": "Annotated[float, Gt(gt=0), Lt(lt=1)]: empty range for randrange() (1, 1, 0)" }number, 0.1 < x < 0.9:{ "exclusiveMaximum": 0.9, "exclusiveMinimum": 0.1, "type": "number", "title": "Annotated[float, Gt(gt=0.1), Lt(lt=0.9)]: empty range for randrange() (2, 0, -2)" }number, 0.1 < x <= 0.9:{ "exclusiveMinimum": 0.1, "maximum": 0.9, "type": "number", "title": "Annotated[float, Gt(gt=0.1), Le(le=0.9)]: empty range for randrange() (2, 1, -1)" }Schema generation code (3.11+, pydantic):