# TODO: missing from stub
wtforms.form.__all__

# Error: is not present at runtime
# =============================
# This is hack to get around Field.__new__ not being able to return
# UnboundField
wtforms.Field.__get__
wtforms.fields.Field.__get__
wtforms.fields.core.Field.__get__
# Since DefaultMeta can contain arbitrary values we added __getattr__
# to let mypy know that arbitrary attribute access is possible
wtforms.meta.DefaultMeta.__getattr__

# Error: variable differs from runtime
# ======================
# _unbound_fields has some weird semantics: due to the metaclass it
# will be None until the form class has been instantiated at least
# once and then will stick around until someone adds a new field
# to the class, which clears it back to None. Which means on instances
# it will always be there and on the class it depends, so maybe this
# should use a dummy descriptor? For now we just pretend it's set.
# The behavior is documented in FormMeta, so I think it's fine.
wtforms.Form._unbound_fields
wtforms.form.Form._unbound_fields

# widget is both used as a ClassVar and instance variable and does
# not necessarily reflect an upper bound on Widget, so we always use
# our Widget Protocol definition that's contravariant on Self
wtforms.Field.widget
wtforms.FormField.widget
wtforms.SelectField.widget
wtforms.SelectMultipleField.widget
wtforms.TextAreaField.widget
wtforms.fields.Field.widget
wtforms.fields.FormField.widget
wtforms.fields.SelectField.widget
wtforms.fields.SelectMultipleField.widget
wtforms.fields.TextAreaField.widget
wtforms.fields.choices.SelectField.widget
wtforms.fields.choices.SelectMultipleField.widget
wtforms.fields.core.Field.widget
wtforms.fields.form.FormField.widget
wtforms.fields.simple.TextAreaField.widget
