> ## Documentation Index
> Fetch the complete documentation index at: https://proto.evodesign.org/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Protein Diversity

> Evaluate amino acid diversity in a protein sequence

<div class="page-hero">
  <img class="page-hero-banner" src="https://proto-bio.github.io/proto-assets/images/constraint/protein-diversity/hero.png" alt="Protein Diversity" />
</div>

<p class="entity-disclaimer">This constraint is open source. Any third-party models, product names, or trademarks referenced are the property of their respective owners, and Proto is not affiliated with them.</p>

<hr class="entity-rule" />

<div class="tool-tab-bar entity-source-bar"><span class="tool-tab-wrap"><span class="tool-tab badge-source entity-source-tab"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6" /><polyline points="8 6 2 12 8 18" /></svg> Source</span></span></div>

<a href="https://github.com/evo-design/proto-language/blob/d3b7822f74ea64747cc751a3b2ab1aa6b799ac47/proto_language/constraint/protein_quality/protein_diversity_constraint.py#L54" target="_blank" class="tab-panel source-panel entity-source-panel">
  <div class="source-info">
    <img noZoom src="https://github.com/evo-design.png?size=40" class="source-avatar" width="36" height="36" />

    <span class="source-path">evo-design/proto-language<span class="source-subpath">/proto\_language/constraint/protein\_quality/protein\_diversity\_constraint.py</span></span>
  </div>

  <span class="panel-goto-btn source-goto-btn"><span><svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z" /></svg> View source</span></span>
</a>

<div class="entity-contributors"><span class="entity-contributors-label">Constraint contributors</span><span class="entity-contributors-people"><a class="entity-contributor" href="https://github.com/dguo8412" target="_blank" rel="noopener" title="dguo8412: 4 commits"><img noZoom class="entity-contributor-avatar" src="https://avatars.githubusercontent.com/u/46211285?v=4&s=64" alt="" loading="lazy" /><span class="entity-contributor-login">dguo8412</span></a></span></div>
Evaluate amino acid diversity in protein sequences.

This constraint function measures the diversity of amino acid types present
in protein sequences. It calculates diversity as the fraction of the 20
standard amino acids that appear in the sequence, and penalizes sequences
that fall below a minimum diversity threshold. The penalty scales linearly
with the deficit below the minimum diversity threshold.

## API Reference

<div class="api-model-section api-model-static api-config-section">
  <div class="api-model-header"><span class="api-model-badge api-config-badge">Config</span><span class="api-model-name">ProteinDiversityConfig</span><a href="https://github.com/evo-design/proto-language/blob/d3b7822f74ea64747cc751a3b2ab1aa6b799ac47/proto_language/constraint/protein_quality/protein_diversity_constraint.py#L11" target="_blank" class="func-table-btn func-source-btn api-model-source"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6" /><polyline points="8 6 2 12 8 18" /></svg> Source</a></div>

  Configuration for protein diversity constraint.

  This class defines configuration parameters for evaluating amino acid diversity
  in protein sequences. The constraint measures how many different amino acid
  types are present in the sequence and penalizes sequences with insufficient
  diversity, which may indicate poor protein quality, repetitive sequences, or
  non-functional proteins.

  <Note>
    A diversity score of 1.0 means all 20 standard amino acids are present.
    The minimum for a non-empty sequence is 0.05 (1/20), reached by a
    homopolymer (only one amino acid type); a score of 0.0 is unreachable
    since empty sequences are rejected.
  </Note>

  <ParamField path="min_diversity" type="number" default="0.7">
    Minimum acceptable amino acid diversity. Calculated as (unique amino acids) / 20.
  </ParamField>
</div>

<div class="api-model-section api-model-static api-output-section">
  <div class="api-model-header"><span class="api-model-badge api-output-badge">Returns</span><span class="api-model-name">ConstraintOutput</span></div>

  One result per sequence. A score of 0.0 indicates
  sufficient diversity (diversity at or above threshold) and higher
  values indicate insufficient amino acid diversity. Scores scale
  linearly with the deficit below the threshold (e.g., if min\_diversity
  is 0.5 and actual diversity is 0.25, the score is 0.5), capped at 1.0.
  `metadata` carries:

  * `aa_diversity_score`: Float diversity score (0.0-1.0) calculated as
    (unique amino acids) / 20
  * `unique_amino_acid_count`: Integer count of unique amino acid types
    present in the sequence (0-20)
  * `unique_amino_acids`: Sorted list of amino acid characters present
    in the sequence
</div>

## Usage

Evaluating protein diversity:

```python python icon="python" theme={null}
>>> from proto_language.core import Sequence, SequenceType
>>> config = ProteinDiversityConfig(min_diversity=0.5)
>>> seq = Sequence("MVLSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSF", "protein")
>>> results = protein_diversity_constraint([(seq,)], config)
>>> print(results[0].score)  # 0.0 (diversity 0.85 >= 0.5)
>>> print(results[0].metadata["aa_diversity_score"])  # 0.85
>>> print(results[0].metadata["unique_amino_acid_count"])  # 17
>>> print(results[0].metadata["unique_amino_acids"])  # ['A', 'D', 'E', 'F', ...]
```

## Metadata

| Property        | Value                          |
| --------------- | ------------------------------ |
| Key             | `protein-diversity`            |
| Function        | `protein_diversity_constraint` |
| Category        | `protein_quality`              |
| Mode            | `discrete`                     |
| Uses GPU        | `False`                        |
| Supported Types | `protein`                      |
