ktsu.Semantics.Quantities 2.0.1

Prefix Reserved
There is a newer version of this package available.
See the version list below for details.
dotnet add package ktsu.Semantics.Quantities --version 2.0.1
                    
NuGet\Install-Package ktsu.Semantics.Quantities -Version 2.0.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="ktsu.Semantics.Quantities" Version="2.0.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="ktsu.Semantics.Quantities" Version="2.0.1" />
                    
Directory.Packages.props
<PackageReference Include="ktsu.Semantics.Quantities" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add ktsu.Semantics.Quantities --version 2.0.1
                    
#r "nuget: ktsu.Semantics.Quantities, 2.0.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package ktsu.Semantics.Quantities@2.0.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=ktsu.Semantics.Quantities&version=2.0.1
                    
Install as a Cake Addin
#tool nuget:?package=ktsu.Semantics.Quantities&version=2.0.1
                    
Install as a Cake Tool

ktsu.Semantics

License NuGet Version NuGet Version NuGet Downloads GitHub commit activity GitHub contributors GitHub Actions Workflow Status

A .NET library for replacing primitive obsession with strongly-typed, self-validating domain models. Three pillars:

  • Semantic Strings — type-safe wrappers like EmailAddress, UserId, BlogSlug with attribute-driven validation.
  • Semantic Paths — polymorphic IPath hierarchy for files, directories, absolute, relative, and combinations.
  • Semantic Quantities — a metadata-generated, type-safe quantity system with a unified IVector0..IVector4 model covering 60+ physical dimensions and 200+ generated types. Optional per-storage-type alias packages let you write Mass instead of Mass<double>.

Targets net8.0net10.0. Semantic Strings and Paths additionally target netstandard2.0/netstandard2.1; Semantic Quantities is net8.0+ (it requires INumber<T>).

Install

dotnet add package ktsu.Semantics

Semantic strings

using ktsu.Semantics.Strings;

[IsEmailAddress]
public sealed record EmailAddress : SemanticString<EmailAddress> { }

[StartsWith("USER_"), HasNonWhitespaceContent]
public sealed record UserId : SemanticString<UserId> { }

// Direct construction — no generic params needed
var email  = EmailAddress.Create("user@example.com");
var userId = UserId.Create("USER_12345");

// Span-based and char[] overloads exist too
var email2 = EmailAddress.Create("user@example.com".AsSpan());

// Safe creation
if (EmailAddress.TryCreate("maybe@invalid", out EmailAddress? safe)) { /* … */ }

// Compile-time safety
public void SendWelcomeEmail(EmailAddress to, UserId userId) { /* … */ }
// SendWelcomeEmail(userId, email);   // ❌ compiler error

Combining attributes

// All must pass (default)
[IsEmailAddress, EndsWith(".com")]
public sealed record DotComEmail : SemanticString<DotComEmail> { }

// Any can pass
[ValidateAny]
[IsEmailAddress, IsUri]
public sealed record ContactMethod : SemanticString<ContactMethod> { }

The full attribute catalogue (text, format, casing, first-class .NET types, paths) lives in docs/validation-reference.md.

Semantic paths

using ktsu.Semantics.Paths;

var configFile = AbsoluteFilePath.Create(@"C:\app\config.json");

configFile.FileName;       // config.json
configFile.FileExtension;  // .json
configFile.DirectoryPath;  // C:\app
configFile.Exists;         // bool

// Polymorphic collections
List<IPath> all = [
    AbsoluteFilePath.Create(@"C:\data.txt"),
    RelativeDirectoryPath.Create(@"logs\app"),
    FilePath.Create(@"document.pdf"),
];

var files     = all.OfType<IFilePath>().ToList();
var absolutes = all.OfType<IAbsolutePath>().ToList();

Conversions: AsAbsolute(), AsAbsolute(baseDirectory), AsRelative(baseDirectory).

Semantic quantities

Every quantity is a vector. Direction-space dimensionality is part of the type:

Form Sign Examples
IVector0 (magnitude) >= 0 Speed, Mass, Energy, Distance, Area
IVector1 (signed 1D) signed Velocity1D, Force1D, Temperature
IVector2 (2D) per-component Velocity2D, Force2D, Acceleration2D
IVector3 (3D) per-component Velocity3D, Force3D, Position3D
IVector4 (4D) per-component reserved (relativistic / spacetime)
using ktsu.Semantics.Quantities;

// V0 magnitudes — From{Unit} factories use the singular lemma (#49)
var speed    = Speed<double>.FromMeterPerSecond(15.0);
var mass     = Mass<double>.FromKilogram(10.0);
var distance = Distance<double>.FromMeter(5.0);

// V3 directional — object-initializer syntax (X/Y/Z components)
var force3d  = new Force3D<double> { X = 0.0, Y = 0.0, Z = -9.8 };
var disp3d   = new Displacement3D<double> { X = 3.0, Y = 4.0, Z = 0.0 };

// Operators flow from dimensions.json
var work     = ForceMagnitude<double>.FromNewton(10.0) * distance;    // F·d = Energy
var power    = work / Duration<double>.FromSecond(2.0);               // W/t = Power

// Vector ops
var workDot  = force3d.Dot(disp3d);                                    // Energy
var torque   = force3d.Cross(disp3d);                                  // Torque3D
var mag      = disp3d.Magnitude();                                     // Length (always >= 0)

// Construction-time invariants (#50, #51)
// Speed.FromMeterPerSecond(-1.0)        // ArgumentException — V0 must be non-negative
// Wavelength<double>.FromMeter(0.0)     // ArgumentException — strict-positive overload

// Type safety
// var nope = force3d + speed;            // ❌ compiler error

Semantic overloads (e.g. Weight over ForceMagnitude, DiameterRadius):

var raw    = ForceMagnitude<double>.FromNewton(686.0);
var weight = Weight<double>.From(raw);   // explicit narrow
ForceMagnitude<double> back = weight;    // implicit widen

var radius   = Radius<double>.FromMeter(2.0);
var diameter = radius.ToDiameter();       // 4 m via metadata-defined relationship

Physical constants are exposed in two shapes:

// Domain-grouped, exact PreciseNumber values:
PhysicalConstants.Fundamental.SpeedOfLight;    // 299_792_458 m/s as PreciseNumber
PhysicalConstants.Chemistry.GasConstant;       // 8.31446... J/(mol·K)

// Generic accessors — materialise into any T : INumber<T>:
var c = PhysicalConstants.Generic.SpeedOfLight<double>();
var R = PhysicalConstants.Generic.GasConstant<decimal>();

Storage-type alias packages

Every quantity is generic over its storage type (Mass<double>, Speed<float>, …). If a project uses one storage type throughout, reference a satellite package and drop the generic argument entirely:

<PackageReference Include="ktsu.Semantics.Quantities.Double" Version="x.y.z" />
using ktsu.Semantics.Quantities;

// No <double> anywhere — the package injects global-using aliases for every quantity.
Mass mass = Mass.FromKilogram(10.0);
Speed speed = Speed.FromMeterPerSecond(15.0);
Mass total = mass + Mass.FromKilogram(2.0);   // still a Mass<double>, full identity

The aliases are real Mass<double> (etc.), so they interoperate with the whole API with no conversion. Packages exist for Double, Float, and Decimal — reference exactly one per project to pick the storage type. The alias lists are generated from the quantity catalogue (scripts/Generate-AliasProps.ps1) and validated in CI.

The unified vector model and its rationale: docs/strategy-unified-vector-quantities.md. A per-domain tour: docs/physics-domains-guide.md. How the source generator turns dimensions.json into types: docs/physics-generator.md.

Dependency injection

services.AddTransient<ISemanticStringFactory<EmailAddress>, SemanticStringFactory<EmailAddress>>();

public class UserService(ISemanticStringFactory<EmailAddress> emails)
{
    public Task<User> CreateUserAsync(string raw) =>
        emails.TryCreate(raw, out var email)
            ? Task.FromResult(new User(email))
            : throw new ArgumentException("invalid email");
}

Architecture

The physics system is metadata-driven. The single source of truth is Semantics.SourceGenerators/Metadata/dimensions.json (with units.json, magnitudes.json, conversions.json, and domains.json alongside it), and a Roslyn incremental generator emits:

  • One record per quantity (Vector0/1/2/3/4 base + semantic overloads).
  • A From{Unit} factory per declared unit, with built-in unit conversion to the SI base unit and a Vector0Guards enforce-non-negative (or strict-positive) check on V0 types.
  • Cross-dimensional *, /, Dot, Cross operators driven by integrals / derivatives / dotProducts / crossProducts declarations.
  • PhysicalConstants with both domain-grouped PreciseNumber fields and generic T.CreateChecked-backed accessors.

Generator diagnostics catch metadata problems at build time:

  • SEM001 — relationship references an unknown dimension name.
  • SEM002 — schema-level metadata issue (missing fields, duplicate type names, etc).
  • SEM003 — relationship's forms list references a vector form not declared on a participating dimension.
  • SEM004availableUnits references a unit not declared in units.json.

Generated output is committed to Semantics.Quantities/Generated/ so the project compiles without first running the generator.

The string and path systems use the same building blocks: an attribute → strategy → rule → factory pipeline. See docs/architecture.md.

Documentation

Contributing

Contributions are welcome — please open an issue first for major changes so we can discuss the direction. The branch's open work items are tracked as GitHub issues.

License

MIT — see LICENSE.md.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (4)

Showing the top 4 NuGet packages that depend on ktsu.Semantics.Quantities:

Package Downloads
ktsu.ImGuiNodeEditor

A comprehensive .NET library suite for building desktop applications with Dear ImGui. Provides application scaffolding with PID-controlled frame limiting, custom widgets (TabPanel, SearchBox, Knob, RadialProgressBar, DividerContainer, Grid), modal dialogs (file browser, input prompts, searchable lists), a theming system with 50+ built-in themes and scoped styling, and an attribute-based node graph editor with physics-based layout. Built on Hexa.NET.ImGui bindings and Silk.NET for cross-platform windowing.

ktsu.Semantics.Quantities.Double

A comprehensive .NET library for replacing primitive obsession with strongly-typed, self-validating domain models across three pillars: semantic strings with 50+ validation attributes, polymorphic path handling, and metadata-generated semantic quantities. The quantity system covers 60+ physical dimensions and 200+ generated types under a unified vector model, with compile-time dimensional safety, generated unit conversions and physics relationships, centralized physical constants, and optional per-storage-type alias packages. Features factory-pattern and dependency-injection support for building robust, maintainable scientific and domain-specific applications.

ktsu.Semantics.Quantities.Decimal

A comprehensive .NET library for replacing primitive obsession with strongly-typed, self-validating domain models across three pillars: semantic strings with 50+ validation attributes, polymorphic path handling, and metadata-generated semantic quantities. The quantity system covers 60+ physical dimensions and 200+ generated types under a unified vector model, with compile-time dimensional safety, generated unit conversions and physics relationships, centralized physical constants, and optional per-storage-type alias packages. Features factory-pattern and dependency-injection support for building robust, maintainable scientific and domain-specific applications.

ktsu.Semantics.Quantities.Float

A comprehensive .NET library for replacing primitive obsession with strongly-typed, self-validating domain models across three pillars: semantic strings with 50+ validation attributes, polymorphic path handling, and metadata-generated semantic quantities. The quantity system covers 60+ physical dimensions and 200+ generated types under a unified vector model, with compile-time dimensional safety, generated unit conversions and physics relationships, centralized physical constants, and optional per-storage-type alias packages. Features factory-pattern and dependency-injection support for building robust, maintainable scientific and domain-specific applications.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
2.0.2 0 6/28/2026
2.0.1 47 6/27/2026
1.1.3 65 6/25/2026
1.1.2 129 6/21/2026
1.1.1 214 6/12/2026
1.1.0 109 6/12/2026
1.0.35 521 3/2/2026
1.0.34 132 2/27/2026
1.0.33 128 2/25/2026
1.0.32 124 2/23/2026
1.0.31 140 2/17/2026
1.0.30-pre.6 80 2/2/2026
1.0.30-pre.5 89 2/1/2026
1.0.30-pre.4 86 1/31/2026
1.0.30-pre.3 74 1/31/2026
1.0.30-pre.2 76 1/31/2026
1.0.30-pre.1 81 1/30/2026
1.0.29 210 1/30/2026
1.0.29-pre.6 78 1/28/2026
1.0.29-pre.5 83 1/26/2026
Loading failed

## v2.0.1 (patch)

Changes since v2.0.0:

- fix(packaging): unblock the 2.0 release pipeline [patch] ([@matt-edmondson](https://github.com/matt-edmondson))

## v2.0.0 (major)

Changes since v1.0.0:

- Revert "Update pack supressions" ([@matt-edmondson](https://github.com/matt-edmondson))
- Update pack supressions ([@matt-edmondson](https://github.com/matt-edmondson))
- release: ktsu.Semantics 2.0.0 — unified vector quantities [major] ([@matt-edmondson](https://github.com/matt-edmondson))
- fix: drop unreferenced SourceLink package versions (KTSU0005 under ktsu.Sdk 2.11.0) ([@matt-edmondson](https://github.com/matt-edmondson))
- fix: restore icon.png as LFS pointer after main merge ([@matt-edmondson](https://github.com/matt-edmondson))
- Merge remote-tracking branch 'origin/main' into vectors ([@matt-edmondson](https://github.com/matt-edmondson))
- fix(generator): annotate nullable referenceExpr to clear CS8600 ([@matt-edmondson](https://github.com/matt-edmondson))
- docs: reflect 2.0 state, rebrand to 'semantic quantities', document alias packages ([@matt-edmondson](https://github.com/matt-edmondson))
- feat: storage-type alias packages for ktsu.Semantics.Quantities ([@matt-edmondson](https://github.com/matt-edmondson))
- chore: sync stale Units.g.cs and add generated-files CI guard ([@matt-edmondson](https://github.com/matt-edmondson))
- fix: close V0 release blockers and drop out-of-support TFMs ([@matt-edmondson](https://github.com/matt-edmondson))
- fix(build): make vectors build under .NET 10 SDK ([@matt-edmondson](https://github.com/matt-edmondson))
- Merge remote-tracking branch 'origin/main' into vectors-merge-trial ([@matt-edmondson](https://github.com/matt-edmondson))
- Add System.Text.Json package reference to project files ([@matt-edmondson](https://github.com/matt-edmondson))
- Update ktsu.Sdk versions to 2.10.2 ([@matt-edmondson](https://github.com/matt-edmondson))
- Update ktsu.Sdk versions to 2.10.1 ([@matt-edmondson](https://github.com/matt-edmondson))
- refactor(generator): use singular-lemma factory names, drop factoryName ([@Claude](https://github.com/Claude))
- docs: log scales are metadata-generated; Percent/Gain convergence ([@Claude](https://github.com/Claude))
- refactor(quantities): converge log scales and audio types on metadata ([@Claude](https://github.com/Claude))
- feat(generator): LogarithmicScalesGenerator — log scales from logarithmic.json ([@Claude](https://github.com/Claude))
- refactor(quantities): align audio-engineering types with the vectors branch ([@Claude](https://github.com/Claude))
- docs: add 1.x → 2.0 migration guide ([@Claude](https://github.com/Claude))
- test(quantities): cover backfilled dimensions and log-scale companions ([@Claude](https://github.com/Claude))
- feat(quantities): hand-written logarithmic-scale companions ([@Claude](https://github.com/Claude))
- feat(quantities): backfill missing dimensions and acoustic overloads from main ([@Claude](https://github.com/Claude))
- Update NuGet package versions in Directory.Packages.props ([@matt-edmondson](https://github.com/matt-edmondson))
- Fix IDE0370 build errors from .NET 10 SDK analyzer ([@Claude](https://github.com/Claude))
- feat(quantities): backfill unit catalog and constants domains from main ([@Claude](https://github.com/Claude))
- fix(generator): materialise Generic constants via PreciseNumber.To<T>() ([@Claude](https://github.com/Claude))
- chore: refresh generated snapshots ([@Claude](https://github.com/Claude))
- feat(generator): declare Frequency x Length = Velocity wave relationship ([@Claude](https://github.com/Claude))
- fix(quantities): add comparison operators to PhysicalQuantity (CA1036) ([@Claude](https://github.com/Claude))
- Merge remote-tracking branch 'origin/main' into claude/vectors-sync-progress-ofoith ([@Claude](https://github.com/Claude))
- Add audio-engineering quantities and normalized parameter tapers ([@Claude](https://github.com/Claude))
- chore: drop unnecessary null-forgiving operators + silence coverage warning ([@Claude](https://github.com/Claude))
- feat(quantities): canonical IPhysicalQuantity surface + typed In() (closes #59) ([@Claude](https://github.com/Claude))
- docs(architecture): document physics generator pipeline (closes #61) ([@Claude](https://github.com/Claude))
- feat(generator): SEM004 — flag dimensions.json units missing from units.json ([@Claude](https://github.com/Claude))
- docs: fix stale README + guides — plural factories, V3 object-init, real PhysicalConstants surface ([@Claude](https://github.com/Claude))
- feat(quantities): per-overload physicalConstraints + EnsurePositive guard (closes #51) ([@Claude](https://github.com/Claude))
- test(quantities): generator-output invariants — no duplicate signatures, commutative * (closes #57) ([@Claude](https://github.com/Claude))
- feat(generator): SEM003 diagnostic + form-specific relationships (closes #58) ([@Claude](https://github.com/Claude))
- feat(generator): plural From{Unit} factory naming + form matrix docs (closes #49) ([@Claude](https://github.com/Claude))
- Merge vectors (post #70) into rebase-issue-48: combine multi-unit factories with SEM002 + AnalyzerReleases ([@Claude](https://github.com/Claude))
- Merge vectors into work/issue-48: combine multi-unit factories with V0 non-negativity ([@Claude](https://github.com/Claude))
- feat(generator): add SEM002 metadata validation; refresh stale generator output ([@Claude](https://github.com/Claude))
- Merge remote-tracking branch 'origin/vectors' into work/issue-48 ([@Claude](https://github.com/Claude))
- feat(quantities): enforce V0 non-negativity and absolute V0-V0 subtraction ([@Claude](https://github.com/Claude))
- feat(generator): emit From{Unit} factory for every availableUnit ([@Claude](https://github.com/Claude))
- test: cover IVector*/Magnitude/Dot/Cross and overload conversions ([@Claude](https://github.com/Claude))
- feat(generator): emit SEM001 when relationship references unknown dimension ([@Claude](https://github.com/Claude))
- Pass 2: drop main-imported tests that reference removed hand-written types ([@Claude](https://github.com/Claude))
- Merge main into vectors (structural reconciliation) ([@Claude](https://github.com/Claude))
- docs: align docs with unified vector model and current API ([@Claude](https://github.com/Claude))
- feat: Add new skill for creating physics quantity types with metadata-driven process ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance project configuration: enable compiler-generated files and set output path; remove specific generated files from compilation ([@matt-edmondson](https://github.com/matt-edmondson))
- feat: Add new unit categories and conversion factors for fluid mechanics and chemistry ([@matt-edmondson](https://github.com/matt-edmondson))
- feat: Enhance dimensions and units metadata with additional overloads and derived units ([@matt-edmondson](https://github.com/matt-edmondson))
- feat: Update CodeBlocker package version and refactor scope usage in generators and templates ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor dimensions metadata structure and enhance vector form definitions ([@matt-edmondson](https://github.com/matt-edmondson))
- feat: Update dimensions.json schema to unify vector representation and enhance dimensional relationships ([@matt-edmondson](https://github.com/matt-edmondson))
- feat: Enhance cross-dimensional operations and relationships in unified vector representation ([@matt-edmondson](https://github.com/matt-edmondson))
- feat: Define proposed base types and naming patterns for unified vector representation of quantities ([@matt-edmondson](https://github.com/matt-edmondson))
- feat: Add strategy document for unified vector representation of quantities ([@matt-edmondson](https://github.com/matt-edmondson))
- refactor: Simplify vector method implementations by removing unnecessary scope blocks ([@matt-edmondson](https://github.com/matt-edmondson))
- feat: Implement QuantitiesGenerator for generating scalar and vector quantity types from dimensions.json ([@matt-edmondson](https://github.com/matt-edmondson))
- refactor: Remove unused using directives for ktsu.Semantics.Strings in test files ([@matt-edmondson](https://github.com/matt-edmondson))
- feat: Add Microsoft.Bcl.AsyncInterfaces package and refactor path handling ([@matt-edmondson](https://github.com/matt-edmondson))
- Remove obsolete validation attributes and related files for path and text validation ([@matt-edmondson](https://github.com/matt-edmondson))
- Remove .cursorindexingignore to eliminate unnecessary indexing rules ([@matt-edmondson](https://github.com/matt-edmondson))
- Update project file to target .NET 10.0 and remove obsolete configurations ([@matt-edmondson](https://github.com/matt-edmondson))
- Remove legacy build scripts ([@matt-edmondson](https://github.com/matt-edmondson))
- Add ktsu.RoundTripStringJsonConverter package reference and update SemanticString to use its JsonConverter ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor validation strategy null checks to use Ensure.NotNull for consistency ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance test assertions with descriptive messages for clarity ([@matt-edmondson](https://github.com/matt-edmondson))
- Update suppression targets in CompatibilitySuppressions.xml for attribute consistency ([@matt-edmondson](https://github.com/matt-edmondson))
- Remove unnecessary blank line in PerformanceRegressionTests class ([@matt-edmondson](https://github.com/matt-edmondson))
- Remove performance variance checks from quantity creation test for consistency ([@matt-edmondson](https://github.com/matt-edmondson))
- Update .NET version to 10.0 and adjust coverage reporting for SonarQube integration ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor validation attributes and update path-related records for consistency ([@matt-edmondson](https://github.com/matt-edmondson))
- Update System.Memory package version to 4.6.3 ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor null checks to use Ensure instead of Guard; update target frameworks and package references ([@matt-edmondson](https://github.com/matt-edmondson))
- Increase performance variance threshold in regression tests to 70% for CI environment consistency ([@matt-edmondson](https://github.com/matt-edmondson))
- Remove Polyfill package references and update test assertions for clarity ([@matt-edmondson](https://github.com/matt-edmondson))
- Add DirectoryName type and improve path validation semantics ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance project detection logic to support multi-project solutions ([@matt-edmondson](https://github.com/matt-edmondson))
- Add compatibility supression files ([@matt-edmondson](https://github.com/matt-edmondson))
- Modernize codebase and simplify multi-framework support ([@matt-edmondson](https://github.com/matt-edmondson))
- Update project configurations and SDK versions ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor testing and coverage configuration ([@matt-edmondson](https://github.com/matt-edmondson))
- Add unit tests for AcousticOperator and PhysicalDimension extensions ([@matt-edmondson](https://github.com/matt-edmondson))
- Update Invoke-DotNetTest function to remove unnecessary `--no-build` flag from dotnet test command for improved test execution. ([@matt-edmondson](https://github.com/matt-edmondson))
- Add unit tests for AcousticImpedance, ReflectionCoefficient, and SoundSpeed classes ([@matt-edmondson](https://github.com/matt-edmondson))
- Add unit tests for AcousticDirectionalityIndex functionality ([@matt-edmondson](https://github.com/matt-edmondson))
- Remove obsolete cursor ignore files to streamline project structure ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor Exposure calculations to use CoulombPerKilogram unit ([@matt-edmondson](https://github.com/matt-edmondson))
- Add unit tests for various SemanticString validators ([@matt-edmondson](https://github.com/matt-edmondson))
- Add unit tests for casing and line count validators in SemanticString ([@matt-edmondson](https://github.com/matt-edmondson))
- Add unit tests for Casing and Contracts validation in SemanticString ([@matt-edmondson](https://github.com/matt-edmondson))
- Update RegexMatchAttribute to include a timeout in Regex matching for improved performance and reliability. This change ensures that the regex operation does not hang indefinitely by setting a one-second timeout, enhancing the overall validation process. ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor SemanticDirectoryPath class to improve content retrieval method naming and enhance error handling. The `Contents` property has been renamed to `GetContents` for clarity, and synchronous handling has been implemented to ensure compatibility with older .NET versions. ([@matt-edmondson](https://github.com/matt-edmondson))
- Fix argument exception message assertion in SemanticStringAdditionalTests for improved clarity ([@matt-edmondson](https://github.com/matt-edmondson))
- Remove obsolete files and clean up project structure ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance validation error messages in ContainsAttribute, EndsWithAttribute, and StartsWithAttribute classes ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor PhysicalDimensions class to use IReadOnlySet for standard physical dimensions and update test classes to static for consistency. This improves clarity and aligns with coding standards across the project. ([@matt-edmondson](https://github.com/matt-edmondson))
- Remove unnecessary using directives from test files for improved clarity ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor directory path content retrieval methods for consistency and clarity ([@matt-edmondson](https://github.com/matt-edmondson))
- Fix missing usings ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor path handling code for improved readability and consistency ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor directory path implementations to support synchronous enumeration for older .NET versions ([@matt-edmondson](https://github.com/matt-edmondson))
- Add System.Memory package and implement path polyfills for .NET compatibility ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance null argument validation in RelativeFilePath for .NET compatibility ([@matt-edmondson](https://github.com/matt-edmondson))
- Implement polyfill for ArgumentNullException in path classes for compatibility ([@matt-edmondson](https://github.com/matt-edmondson))
- Add path-related polyfills and refactor namespaces for clarity ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor SemanticString methods to utilize WeakString for span-based operations ([@matt-edmondson](https://github.com/matt-edmondson))
- Update project configuration and refine string handling methods ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance semantic string handling with read-only span support ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor validation framework and introduce new path semantics ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor validation attributes to enhance initialization and validation logic ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor validation attributes to remove FluentValidation dependency ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor project structure and update SDK versions ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor project configuration and enhance SDK management ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance project configuration and code generation capabilities ([@matt-edmondson](https://github.com/matt-edmondson))
- Code generation ([@matt-edmondson](https://github.com/matt-edmondson))
- Add new static factory methods for length and position quantities in micrometers, nanometers, and various vector dimensions ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance quantity classes with additional static factory methods for creating instances from nanometers and molar concentrations ([@matt-edmondson](https://github.com/matt-edmondson))
- Implement static factory methods for float quantity classes across various domains ([@matt-edmondson](https://github.com/matt-edmondson))
- Add extension methods for double and float physical quantities ([@matt-edmondson](https://github.com/matt-edmondson))
- Implement static factory methods for quantity classes in acoustic, chemical, electrical, fluid dynamics, mechanics, nuclear, optical, and thermal domains ([@matt-edmondson](https://github.com/matt-edmondson))
- Add new quantity classes and methods for acoustic, chemical, electrical, fluid dynamics, mechanics, nuclear, optical, and thermal domains ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor and enhance quantity classes and tests ([@matt-edmondson](https://github.com/matt-edmondson))
- Update package versions and enhance build scripts ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor exception assertions in unit tests for consistency ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor performance regression tests to set CI-friendly targets ([@matt-edmondson](https://github.com/matt-edmondson))
- Update package versions and refine project metadata ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance path handling and testing for directory and file combinations ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance semantic string type conversions and path handling ([@matt-edmondson](https://github.com/matt-edmondson))
- Update copyright notice, package versions, and enhance winget manifest generation script ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance performance regression tests with updated targets and optimizations ([@matt-edmondson](https://github.com/matt-edmondson))
- Remove BenchmarkMemoryAllocation Test Due to Incompatibility ([@matt-edmondson](https://github.com/matt-edmondson))
- Optimize Performance Benchmarks to Reduce Memory Allocation ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance Performance Benchmarks and Derived Cursor Rules ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance Derived Cursor Rules with Additional Validation Guidelines ([@matt-edmondson](https://github.com/matt-edmondson))
- Update project files and dependencies for improved functionality and consistency ([@matt-edmondson](https://github.com/matt-edmondson))
- Update TAGS.md to Use Spaces for Multi-Word Tags ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance DESCRIPTION and README for Improved Clarity and Detail ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor Bootstrap Units into Separate Class for Improved Organization ([@matt-edmondson](https://github.com/matt-edmondson))
- Remove outdated TODO comments for various scientific domains in Units.cs to streamline the codebase and improve maintainability. ([@matt-edmondson](https://github.com/matt-edmondson))
- Add derived constants validation tests for PhysicalConstants ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor Units and PhysicalConstants for Consistency and Maintainability ([@matt-edmondson](https://github.com/matt-edmondson))
- Standardize documentation styles and enhance performance benchmarks in the Semantics library. This update includes the migration of hardcoded constants to the PhysicalConstants class, ensuring all constants are accessed through generic getters. Additionally, it refines the performance benchmarks to utilize these constants, improving code clarity and maintainability. The integration tests have also been updated to reflect these changes, ensuring accurate calculations across various domains. ([@matt-edmondson](https://github.com/matt-edmondson))
- Standardize documentation styles for physics quantities and enhance integration tests. This update introduces explicit XML documentation formats for dimension properties and constructors, improving clarity and consistency. Additionally, it refines advanced integration tests to ensure accurate cross-domain calculations, further solidifying the library's robustness for scientific applications. ([@matt-edmondson](https://github.com/matt-edmondson))
- Implement comprehensive enhancements to the ktsu.Semantics library, including standardized documentation for all physics quantities, improved testing strategies with advanced integration and performance regression tests, and the addition of real-world physics examples. This update significantly enhances code consistency, documentation clarity, and testing robustness, establishing a solid foundation for future development and ensuring a professional-grade solution for type-safe physics calculations in .NET applications. ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance the Semantics library by completing the implementation of the Physics Quantities System, which now includes 80+ quantities across 8 scientific domains. Update the README.md and documentation to reflect the comprehensive capabilities, including type-safe arithmetic, automatic unit conversions, and centralized physical constants. Introduce integration and performance benchmarks to validate cross-domain calculations and ensure efficient operations. This update significantly improves the library's usability and functionality for scientific computing and engineering applications. ([@matt-edmondson](https://github.com/matt-edmondson))
- Add validation tests for derived physical constants in PhysicalConstantsTests.cs ([@matt-edmondson](https://github.com/matt-edmondson))
- Add comprehensive tests for physical constants validation in PhysicalConstantsTests.cs ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor operator overloads in the Semantics library to resolve ambiguities between work/energy and torque calculations. Update the Force and Length operators, replacing the removed method with an explicit CalculateTorque method. Enhance documentation and ensure compliance with coding standards. This update improves clarity and usability for physical quantity calculations in .NET applications. ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor physics relationship calculations in the Semantics library to resolve operator ambiguities and enhance clarity. Update the Force and Length operators to distinguish between work/energy and torque calculations, introducing explicit methods for torque. Clean up unused variables and improve documentation for better usability. This update strengthens the library's framework for accurate physical quantity calculations in .NET applications. ([@matt-edmondson](https://github.com/matt-edmondson))
- Implement additional physical relationships in the Semantics library, focusing on the Acoustic, Chemical, and Fluid Dynamics domains. Introduce operator overloads for calculating acoustic impedance from density and sound speed, photon energy from frequency, and apply the ideal gas law for amount of substance calculations. Update existing quantities to enhance usability and ensure adherence to coding standards with comprehensive XML documentation. This update further strengthens the library's framework for physical quantity calculations in .NET applications. ([@matt-edmondson](https://github.com/matt-edmondson))
- Implement additional physical relationships in the Semantics library, enhancing the Acoustic, Electrical, and Mechanical domains. Introduce operator overloads for calculating sound power from intensity and area, charge from capacitance and voltage, and torque from force and distance. Update existing quantities to support intuitive calculations, ensuring adherence to coding standards and comprehensive XML documentation. This update further solidifies the library's framework for physical quantity calculations in .NET applications. ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance the Semantics library by implementing key physical relationships across various domains, including Mechanics, Electrical, Thermal, and Optical. Introduce operator overloads for quantities such as Force, Mass, Energy, ElectricCharge, and LuminousFlux, enabling intuitive calculations. Ensure all new implementations adhere to coding standards and include comprehensive XML documentation. This update significantly improves the usability and functionality of the library, providing a robust framework for physical quantity calculations in .NET applications. ([@matt-edmondson](https://github.com/matt-edmondson))
- Complete the Fluid Dynamics domain in the Semantics library by implementing key quantities including KinematicViscosity, BulkModulus, VolumetricFlowRate, MassFlowRate, and ReynoldsNumber. Update the tracker to reflect the successful implementation of all 8 domains, achieving a total of 85 quantities. Ensure all new quantities adhere to coding standards and include comprehensive XML documentation. This marks a significant milestone in the library's development, providing a robust and professional-grade physical quantities system for .NET applications. ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance the Semantics library by implementing the Optical, Nuclear, and Fluid Dynamics domains. Introduce new quantities such as Illuminance, Luminance, RefractiveIndex, AbsorbedDose, EquivalentDose, and various fluid dynamics properties including BulkModulus and KinematicViscosity. Centralize physical constants in PhysicalConstants.cs for type-safe access. Update PhysicalDimensions and Units to reflect new dimensions and units. Achieve comprehensive testing with all new quantities passing, marking significant progress in the implementation plan. ([@matt-edmondson](https://github.com/matt-edmondson))
- Implement the Mechanical Domain in the Semantics library, introducing quantities such as Force, Energy, Pressure, and their associated calculations. Centralize physical constants management in PhysicalConstants.cs, ensuring type-safe access to constants like standard gravity and atmospheric pressure. Update PhysicalDimensions and Units to incorporate new mechanical dimensions and units. Achieve comprehensive testing with 100% passing tests, marking the Mechanical domain as fully implemented in the updated implementation plan and progress tracker. ([@matt-edmondson](https://github.com/matt-edmondson))
- Implement the Chemical Domain in the Semantics library, completing 10 quantities: ActivationEnergy, AmountOfSubstance, Concentration, DynamicViscosity, EnzymeActivity, MolarMass, PH, RateConstant, ReactionRate, and SurfaceTension. Introduce PhysicalConstants.cs for centralized management of physical constants, ensuring accuracy and maintainability. Update PhysicalDimensions and Units to incorporate new chemical dimensions and units. Achieve 376 passing tests, marking the Chemical domain as fully implemented in TODO_DOMAINS.md. ([@matt-edmondson](https://github.com/matt-edmondson))
- Implement chemical quantities including ActivationEnergy, AmountOfSubstance, Concentration, DynamicViscosity, EnzymeActivity, MolarMass, PH, RateConstant, ReactionRate, and SurfaceTension. Update PhysicalDimensions and Units to include new chemical dimensions and units. Mark the Chemical domain as fully implemented in TODO_DOMAINS.md, enhancing the completeness of the quantities implementation. ([@matt-edmondson](https://github.com/matt-edmondson))
- Implement comprehensive chemical quantities including ActivationEnergy, AmountOfSubstance, Concentration, DynamicViscosity, EnzymeActivity, MolarMass, pH, RateConstant, ReactionRate, and SurfaceTension. Update PhysicalDimensions and Units to include new chemical dimensions and units, enhancing the completeness of the quantities implementation. ([@matt-edmondson](https://github.com/matt-edmondson))
- Implement comprehensive acoustic quantities including SoundPressureLevel, SoundIntensityLevel, SoundPowerLevel, ReflectionCoefficient, NoiseReductionCoefficient, SoundTransmissionClass, Loudness, Pitch, Sharpness, Sensitivity, and DirectionalityIndex. Update PhysicalDimensions to include new acoustic dimensions and mark the Acoustic domain as fully implemented in TODO_DOMAINS.md, enhancing the completeness of the quantities implementation. ([@matt-edmondson](https://github.com/matt-edmondson))
- Implement thermal quantities including Heat, HeatCapacity, SpecificHeat, ThermalConductivity, ThermalExpansion, ThermalDiffusivity, HeatTransferCoefficient, and Entropy. Update TODO_DOMAINS.md to mark the Thermal domain as fully implemented, enhancing the completeness of the quantities implementation. ([@matt-edmondson](https://github.com/matt-edmondson))
- Implement core acoustic quantities including Frequency, Wavelength, SoundPressure, SoundIntensity, SoundPower, AcousticImpedance, SoundSpeed, SoundAbsorption, and ReverberationTime. Update PhysicalDimensions to include new acoustic dimensions and mark the Acoustic domain as significantly progressed in TODO_DOMAINS.md, enhancing the completeness of the quantities implementation. ([@matt-edmondson](https://github.com/matt-edmondson))
- Implement comprehensive quantities for Mechanics and Electrical domains, including new classes for AngularAcceleration, AngularVelocity, Density, ElectricConductivity, ElectricField, and others. Update PhysicalDimensions to include new dimensions and mark all quantities as implemented in TODO_DOMAINS.md, enhancing the overall structure and completeness of the quantities implementation. ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance PhysicalDimension constructor to require IUnit parameter, ensuring proper initialization in operator overloads. Update PhysicalDimensions to reflect new constructor signature, improving clarity and preventing type conversion errors. ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor PhysicalDimension to accept BaseUnit in constructor, removing runtime lookup. Update PhysicalDimensions to initialize dimensions with their respective base units, enhancing performance and clarity in dimensional properties. ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor PhysicalQuantity and PhysicalDimension relationship by moving BaseUnit property to PhysicalDimension. Update related classes to access BaseUnit through Dimension, enhancing clarity and encapsulation of dimensional properties. ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor quantities ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor quantities ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor quantities ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor conversions ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor conversions ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor conversions ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor conversions ([@matt-edmondson](https://github.com/matt-edmondson))
- Organize quantities ([@matt-edmondson](https://github.com/matt-edmondson))
- Add tests ([@matt-edmondson](https://github.com/matt-edmondson))
- Add tests ([@matt-edmondson](https://github.com/matt-edmondson))
- Add more physical quantities ([@matt-edmondson](https://github.com/matt-edmondson))
- Update README and documentation to provide a comprehensive overview of the ktsu.Semantics library ([@matt-edmondson](https://github.com/matt-edmondson))
- Update README and architecture documentation for examples directory structure ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance documentation and suppress CA1812 warning ([@matt-edmondson](https://github.com/matt-edmondson))
- Add more teats ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor casing validation attributes to utilize FluentValidation ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor validation attributes to utilize FluentValidation ([@matt-edmondson](https://github.com/matt-edmondson))
- Integrate FluentValidation into semantic validation attributes ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor validation attributes and enhance documentation ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor semantic validation attributes and introduce new path validation strategies ([@matt-edmondson](https://github.com/matt-edmondson))
-  Add new semantic path types and validation strategies ([@matt-edmondson](https://github.com/matt-edmondson))
- Implement semantic path operators and enhance path interfaces ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance semantic path documentation and interface functionality ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance documentation for path interface hierarchy and examples ([@matt-edmondson](https://github.com/matt-edmondson))
- Add comprehensive interface tests for semantic path types ([@matt-edmondson](https://github.com/matt-edmondson))
- Add interfaces for path type hierarchy to enable polymorphism ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.1.2 (patch)

Changes since v1.1.1:

- Add System.Text.Json package reference to project files ([@matt-edmondson](https://github.com/matt-edmondson))
- Update ktsu.Sdk versions to 2.10.2 ([@matt-edmondson](https://github.com/matt-edmondson))
- Update ktsu.Sdk versions to 2.10.1 ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.1.1 (patch)

Changes since v1.1.0:

- Sync .github\workflows\update-sdks.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\dependabot.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .gitignore ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .gitattributes ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync global.json ([@ktsu[bot]](https://github.com/ktsu[bot]))

## v1.1.0 (minor)

Changes since v1.0.0:

- Fix IDE0370 build errors from .NET 10 SDK analyzer ([@Claude](https://github.com/Claude))
- Add audio-engineering quantities and normalized parameter tapers ([@Claude](https://github.com/Claude))
- Add ktsu.RoundTripStringJsonConverter package reference and update SemanticString to use its JsonConverter ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor validation strategy null checks to use Ensure.NotNull for consistency ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance test assertions with descriptive messages for clarity ([@matt-edmondson](https://github.com/matt-edmondson))
- Update suppression targets in CompatibilitySuppressions.xml for attribute consistency ... (truncated due to NuGet length limits)