12 private static readonly IReadOnlyDictionary<
14 string> FeatureToToken =
15 new Dictionary<UniversalNotationFeature, string>
86 private static readonly IReadOnlyDictionary<
89 FeatureToToken.ToDictionary(
92 StringComparer.OrdinalIgnoreCase);
97 if (!FeatureToToken.TryGetValue(feature, out
string? token))
99 throw new ArgumentOutOfRangeException(
102 "No canonical beta token is registered.");
112 return TokenToFeature.TryGetValue(
128 _ =>
throw new ArgumentOutOfRangeException(
131 "Unknown product-structure type.")
138 return code.ToUpperInvariant()
switch
146 _ =>
throw new FormatException(
147 $
"Unknown product-structure token '{code}'.")
154 return topology
switch
163 _ =>
throw new ArgumentOutOfRangeException(
166 "Unknown supply-network topology.")
173 return code.ToUpperInvariant()
switch
182 _ =>
throw new FormatException(
183 $
"Unknown supply-network topology token '{code}'.")
190 return parameter
switch
201 _ =>
throw new ArgumentOutOfRangeException(
204 "Unknown temporal-parameter family.")
211 return code.ToUpperInvariant()
switch
222 _ =>
throw new FormatException(
223 $
"Unknown temporal-parameter token '{code}'.")
230 return pattern
switch
237 _ =>
throw new ArgumentOutOfRangeException(
240 "Unknown temporal pattern.")
247 return code.ToUpperInvariant()
switch
254 _ =>
throw new FormatException(
255 $
"Unknown temporal-pattern token '{code}'.")
262 ArgumentNullException.ThrowIfNull(qualifier);
267 qualifier.Parameter) +
279 if (!token.StartsWith(
281 StringComparison.OrdinalIgnoreCase))
286 string body = token[3..];
288 int separatorIndex = body.IndexOf(
'=');
290 if (separatorIndex <= 0 ||
291 separatorIndex >= body.Length - 1)
293 throw new FormatException(
294 $
"Invalid temporal qualifier '{token}'.");
297 string parameterCode =
298 body[..separatorIndex];
301 body[(separatorIndex + 1)..];
317 return condition
switch
320 .NonSpeculativeProductionHoldingCosts =>
324 .ZeroOrFullCapacityProduction =>
327 _ =>
throw new ArgumentOutOfRangeException(
330 "Unknown universal semantic condition.")
338 switch (token.ToUpperInvariant())
343 .NonSpeculativeProductionHoldingCosts;
349 .ZeroOrFullCapacityProduction;
Stable canonical token mapping for notation scheme version 1.
static string GetSemanticConditionToken(UniversalSemanticCondition condition)
static string GetNetworkTopologyCode(SupplyNetworkTopologyType topology)
static string GetProductStructureCode(ProductStructureType type)
static bool TryParseTemporalQualifier(string token, out UniversalTemporalQualifier? qualifier)
static SupplyNetworkTopologyType ParseNetworkTopologyCode(string code)
static UniversalTemporalParameter ParseTemporalParameterCode(string code)
static ProductStructureType ParseProductStructureCode(string code)
static string GetTemporalQualifierToken(UniversalTemporalQualifier qualifier)
static string GetFeatureToken(UniversalNotationFeature feature)
static string GetTemporalPatternCode(TemporalPatternType pattern)
static TemporalPatternType ParseTemporalPatternCode(string code)
static bool TryParseFeature(string token, out UniversalNotationFeature feature)
static bool TryParseSemanticCondition(string token, out UniversalSemanticCondition condition)
static string GetTemporalParameterCode(UniversalTemporalParameter parameter)
ProductStructureType
Identifies the structural category of a product bill-of-materials graph.
@ General
The acyclic bill-of-materials graph does not satisfy the serial, assembly or arborescent restrictions...
@ IndependentItems
The instance contains no component-to-parent bill-of-materials relationship.
@ Arborescent
The bill-of-materials graph has an arborescent structure.
@ Serial
Every connected component of the bill-of-materials graph is a directed chain.
@ Unknown
The product-structure type is unknown or has not yet been analyzed.
@ Assembly
The bill-of-materials graph has an assembly structure.
SupplyNetworkTopologyType
Classifies the directed physical topology of a supply-flow network.
TemporalPatternType
Canonical temporal-pattern categories used by historical lot-sizing classifications such as Bitran-Ya...
UniversalSemanticCondition
Generic derived semantic conditions that may be required by a universal problem specification.
UniversalTemporalParameter
Identifies a time-varying model parameter that may be qualified by a generic temporal pattern in univ...
UniversalNotationFeature
Feature vocabulary represented in the beta field of notation v1. Enum order is the canonical renderin...
record UniversalTemporalQualifier
Qualifies one universal model-parameter family with a generic temporal pattern.