Regex tooling: formula gene grouping, content patches, def validation
CI / build-test (push) Successful in 1m12s
CI / build-test (push) Successful in 1m12s
Three regex-powered content tools (phase G5):
- Formula group functions gsum/gcount/gavg/gmin/gmax('regex') aggregate
over every context variable whose name matches the pattern, e.g.
gsum('leaf_.*'). Adds string literals to the formula grammar and an
IFormulaContext.ResolveMatching hook; GenomeContext enumerates matching
genes, so a trait can sum/average a gene group.
- DefDatabase content patches: a { "type": "Patch", patches:[{ defType,
match (regex on defName), set:{fields} }] } file sets fields on every
matching raw def before resolution — mods patch Core in bulk.
- DefDatabase.RegisterValidator(typeKey, field, regex): load-time check
that a string field matches a pattern, throwing otherwise (naming/format
conventions).
Covered by FormulaTests (group aggregation, composition, bad calls) and
DefDatabaseTests (patch set/match/unknown-type, validator pass/reject).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
ead22517ee
commit
d044cafad9
@@ -71,5 +71,17 @@ public static class Phenotype
|
||||
|
||||
throw new FormulaException($"Unknown variable '{name}' while computing traits.");
|
||||
}
|
||||
|
||||
// Группировка генов в формулах: значения всех генов, чьи id подходят под шаблон (gsum/gavg/…).
|
||||
public IEnumerable<float> ResolveMatching(Func<string, bool> matches)
|
||||
{
|
||||
foreach (var geneId in genome.Alleles.Keys)
|
||||
{
|
||||
if (matches(geneId) && registry.TryGetValue(geneId, out var gene))
|
||||
{
|
||||
yield return genome.Express(gene);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user