> ## 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.

# Balanced Amino Acid Representation

> Evaluate the presence of underrepresented amino acids in a protein sequence

<div class="page-hero">
  <img class="page-hero-banner" src="https://proto-bio.github.io/proto-assets/images/constraint/balanced-aa/hero.png" alt="Balanced Amino Acid Representation" />
</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/balanced_aa_constraint.py#L67" 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/balanced\_aa\_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: 2 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 the presence of underrepresented amino acids in protein sequences.

This constraint function assesses whether protein sequences have balanced
representation of all amino acid types by identifying amino acids that appear
below a minimum frequency threshold and penalizing sequences that have too many
such underrepresented amino acids. The penalty is scaled based on both the
number of excess underrepresented amino acids and the severity of their
under-representation.

For each input sequence, it calculates amino acid frequencies, identifies
underrepresented amino acids, and computes a penalty score if the number
of underrepresented amino acids exceeds the configured 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">BalancedAaConfig</span><a href="https://github.com/evo-design/proto-language/blob/d3b7822f74ea64747cc751a3b2ab1aa6b799ac47/proto_language/constraint/protein_quality/balanced_aa_constraint.py#L12" 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 balanced amino acid constraint.

  This class defines configuration parameters for evaluating whether a protein
  sequence has balanced representation of all amino acid types. The constraint
  penalizes sequences that have too many underrepresented amino acids (those
  appearing below a minimum frequency threshold). The penalty score increases
  both with the number of underrepresented amino acids beyond the threshold and
  with the severity of under-representation (how far below min\_aa\_frequency each
  amino acid falls).

  <ParamField path="min_aa_frequency" type="number" default="0.02">
    Minimum acceptable relative frequency for any amino acid type.
  </ParamField>

  <ParamField path="max_underrepresented_count" type="integer" default="3">
    Maximum acceptable number of underrepresented amino acid types. Sequences with more are penalized.
  </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. `score` ranges from 0.0 (best,
  acceptable number of underrepresented amino acids) to 1.0 (worst, many severely
  underrepresented amino acids), scaled by excess count and severity below the
  minimum frequency. `metadata` carries:

  * `underrepresented_aa_score`: Float score indicating overall
    underrepresentation severity
  * `amino_acid_counts`: Dictionary mapping amino acids to their counts
  * `underrepresented_amino_acids`: List of amino acids that are underrepresented
  * `underrepresented_aa_count`: Integer count of underrepresented amino acid types
  * `min_aa_frequency_threshold`: The minimum frequency threshold used
</div>

## Usage

Evaluating amino acid balance in protein:

```python python icon="python" theme={null}
>>> from proto_language.core import Sequence, SequenceType
>>> config = BalancedAaConfig(min_aa_frequency=0.05, max_underrepresented_count=2)
>>> seq = Sequence("AAAAAACCCCCCDDDDDD", sequence_type="protein")
>>> results = balanced_aa_constraint([(seq,)], config)
>>> # This sequence has only 3 amino acid types, so 17 are underrepresented
>>> # This exceeds max_underrepresented_count=2, resulting in a penalty
>>> print(results[0].score)  # Will be > 0.0
>>> print(results[0].metadata["underrepresented_aa_count"])  # 17
```

## Metadata

| Property        | Value                    |
| --------------- | ------------------------ |
| Key             | `balanced-aa`            |
| Function        | `balanced_aa_constraint` |
| Category        | `protein_quality`        |
| Mode            | `discrete`               |
| Uses GPU        | `False`                  |
| Supported Types | `protein`                |
