User Models
The following three graphs explain the architecture of our UserModels. A
UserModel is composed of UserAbilitys. A UserAbility can implement
functions for perceiving an element, navigating to an element, and acting on an
element. The ACT function specifically refers to a subset of Actions to
describe what the UserAbility can do (mouse actions, keyboard actions, etc.).
These abilities combine to produce an ability_score, which is used to
determine the difficulty of performing an action on an element for a particular
UserModel.

One user might have vision, mouse, and keyboard abilities:

Another user might not have the mouse ability:

The UserModel looks through all its abilities when perceiving, navigating to,
or acting on an element to determine whether it can do so (and if so, how hard
it would be). If the UserModel is not building the graph (usually reserved for
the OmniUser to do), then it filters data from the already-build graph to make
these determinations.