Llanguor.AlgebraOfSignatures 1.0.0

dotnet add package Llanguor.AlgebraOfSignatures --version 1.0.0
                    
NuGet\Install-Package Llanguor.AlgebraOfSignatures -Version 1.0.0
                    
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="Llanguor.AlgebraOfSignatures" Version="1.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Llanguor.AlgebraOfSignatures" Version="1.0.0" />
                    
Directory.Packages.props
<PackageReference Include="Llanguor.AlgebraOfSignatures" />
                    
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 Llanguor.AlgebraOfSignatures --version 1.0.0
                    
#r "nuget: Llanguor.AlgebraOfSignatures, 1.0.0"
                    
#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 Llanguor.AlgebraOfSignatures@1.0.0
                    
#: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=Llanguor.AlgebraOfSignatures&version=1.0.0
                    
Install as a Cake Addin
#tool nuget:?package=Llanguor.AlgebraOfSignatures&version=1.0.0
                    
Install as a Cake Tool

AlgebraOfSignatures

Библиотека для работы с алгебраическими операциями над сигнатурами однородных гиперграфов произвольной степени однородности. Позволяет представлять гиперграфы через компактную сигнатурную форму и выполнять над ними теоретико-множественные и арифметические операции.


Установка

dotnet add package AlgebraOfSignatures.Core

Или через Package Manager Console в Visual Studio:

Install-Package AlgebraOfSignatures.Core

Возможности

  • Вычисление сигнатуры по матрице смежности гиперграфа. Сигнатура хранится в массиве произвольного ранга, соответствующего степени однородности.
  • Создание объекта гиперграфа на основе вычисленной сигнатуры.
  • Обратное преобразование: восстановление матрицы смежности или вектора степеней вершин из сигнатуры. Результаты кешируются и обновляются автоматически при изменении значений сигнатуры.
  • Алгебраические операции над сигнатурами:
    • Пересечение (&)
    • Объединение (|)
    • Сложение с константой — вертикальное и горизонтальное (+)
    • Сложение двух сигнатур — вертикальное и горизонтальное (+)

Использование

Создание гиперграфа из матрицы смежности

using AlgebraOfSignatures.Core;
using AlgebraOfSignatures.Core.Base;

// Матрица смежности в виде булева массива ранга uniformityDegree и размера vertexCount
var adjacencyArray = new bool[4, 4, 4]; // 3-однородный граф на 4 вершинах
// ... заполнение матрицы ...

var adjacencyMatrix = new Matrix<bool>(adjacencyArray);
var graph = UniformHyperGraph.FromAdjacencyMatrix(adjacencyMatrix);

Создание гиперграфа из вектора степеней вершин

var degreeArray = new int[4, 4]; // 2-однородный граф (обычный граф) на 4 вершинах
// ... заполнение вектора ...

var degreeVector = new Matrix<int>(degreeArray);
var graph = UniformHyperGraph.FromVertexDegreeVector(degreeVector);

Создание гиперграфа напрямую из значения сигнатуры

// Из объекта Signature
var signature = Signature.Empty(vertexCount: 5, uniformityDegree: 3);
var graph = UniformHyperGraph.FromSignature(signature, vertexCount: 5, uniformityDegree: 3);

// Из матрицы long-значений
var signatureMatrix = new Matrix<long>(new long[3, 2] { { 7, 3 }, { 5, 1 }, { 3, 0 } });
var graph2 = UniformHyperGraph.FromSignature(signatureMatrix, vertexCount: 5, uniformityDegree: 3);

Пустой гиперграф

var empty = UniformHyperGraph.Empty(vertexCount: 4, uniformityDegree: 2);

Сохранение и загрузка из файла

graph.SaveToFile("graph.txt");

var loaded = UniformHyperGraph.FromFile("graph.txt");

Получение матрицы смежности и вектора степеней вершин

Matrix<bool> adjacency = graph.AdjacencyMatrix;     // кешируется до изменения сигнатуры
Matrix<int>  degrees   = graph.VertexDegreeVector;  // кешируется до изменения сигнатуры

Операции над гиперграфами

Операции применяются к объектам UniformHyperGraph или напрямую к Signature. Все операции с двумя операндами требуют совпадения VertexCount и UniformityDegree.

Пересечение

var result = graph1 & graph2;

// Или явным вызовом:
var result = UniformHyperGraph.Intersect(graph1, graph2);

Объединение

var result = graph1 | graph2;

// Или явным вызовом:
var result = UniformHyperGraph.Union(graph1, graph2);

Сложение двух гиперграфов

// Вертикальное сложение (по умолчанию для оператора +)
var result = graph1 + graph2;

// Горизонтальное сложение
var result = UniformHyperGraph.Add(graph1, graph2, Signature.AddType.Horizontal);

Сложение с константой

// Вертикальное (оператор +)
var result = graph + 3L;

// Горизонтальное
var result = UniformHyperGraph.Add(graph, 3L, Signature.AddType.Horizontal);

Операции напрямую над сигнатурами

Все операции доступны и на уровне класса Signature:

var sig1 = Signature.Empty(vertexCount: 4, uniformityDegree: 2);
var sig2 = Signature.Empty(vertexCount: 4, uniformityDegree: 2);

// Установка значения
sig1.SetValue(5L, 0);

// Пересечение и объединение
var intersection = sig1 & sig2;
var union        = sig1 | sig2;

// Сложение
var sum = sig1 + sig2;
var shifted = sig1 + 2L;

// Получение значения
long val = sig1.GetValue(0);

Матрица Matrix<T>

Вспомогательный класс для хранения многомерных массивов произвольного ранга. Используется как внутреннее представление матриц смежности, векторов степеней и сигнатур.

// Из существующего массива
var matrix = new Matrix<long>(new long[3, 3]);

// Нулевой массив заданного размера и ранга
var matrix = new Matrix<long>(size: 4, rank: 2);

// Чтение и запись
long value = matrix.GetValue(1, 2);
matrix.SetValue(42L, 1, 2);

// Событие при изменении значения
matrix.OnSetValue += (indices, value) =>
{
    Console.WriteLine($"Изменено значение по [{string.Join(", ", indices)}] = {value}");
};

Сравнение и равенство

Signature и UniformHyperGraph реализуют IEquatable<T> и IComparable<T>, а также поддерживают операторы сравнения:

bool eq  = graph1 == graph2;
bool neq = graph1 != graph2;
bool lt  = graph1 < graph2;
bool gt  = graph1 > graph2;
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 was computed.  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 was computed.  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.
  • net8.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.0 118 5/21/2026