model-card-regulatory-check / compliance_checks /computational_requirements.py
NimaBoscarino's picture
Add initial instructional copy
f62b8c4
from compliance_checks.base import ComplianceResult, ComplianceCheck, walk_to_next_heading
from bs4 import BeautifulSoup
class ComputationalRequirementsResult(ComplianceResult):
name = "Computational Requirements"
def __init__(
self,
requirements: str = None,
*args,
**kwargs,
):
super().__init__(*args, **kwargs)
self.requirements = requirements
def __eq__(self, other):
if isinstance(other, ComputationalRequirementsResult):
if super().__eq__(other):
try:
# TODO: Do I want to do a deep equal?
# assert self.requirements == other.requirements
return True
except AssertionError:
return False
else:
return False
def to_string(self):
if self.status:
return """\
In order for users to know what kind of hardware and software they need to run a model, a model card \
should have information about the model's computational requirements. We found some documentation \
for this in this model card. We look for this by searching for a heading called "Technical Specifications".
"""
else:
return """\
We weren't able to find a section in this model card for the model's computational requirements, but it's \
easy to add one! You can add the following section to the model card and, once you fill in the \
`[More Information Needed]` sections, the "Computational Requirements" check should pass πŸ€—
```md
## Technical Specifications [optional]
### Compute Infrastructure
[More Information Needed]
#### Hardware
[More Information Needed]
#### Software
[More Information Needed]
```
"""
class ComputationalRequirementsCheck(ComplianceCheck):
name = "Computational Requirements"
def run_check(self, card: BeautifulSoup):
combos = [
("h2", "Technical Specifications"),
("h2", "Technical Specifications [optional]"),
]
for hX, heading in combos:
purpose_check = walk_to_next_heading(card, hX, heading)
if purpose_check:
return ComputationalRequirementsResult(
status=True,
)
return ComputationalRequirementsResult()