private void PrintResults(IQPAnalysisResults <int> results) { Console.WriteLine($"Main result: {results.MainResults}."); if (results.MainResults.IndicatesSelfInjectivity()) { Console.WriteLine("The Nakayama permutation is as follows:"); foreach (var(sourceVertex, targetVertex) in results.NakayamaPermutation) { Console.WriteLine($"{sourceVertex} -> {targetVertex}"); } Console.WriteLine($"The order of the Nakayama permutation is {results.NakayamaPermutation.Order}."); } }
/// <summary> /// Creates an object of a class implementing the /// <see cref="IQuiverInPlaneAnalysisResults{TVertex}"/> interface for the case that the QP /// extraction was successful and the extracted QP was analyzed. /// </summary> /// <typeparam name="TVertex">The type of the vertices in the quiver.</typeparam> /// <param name="qpAnalysisResults">The results of the analysis of the QP.</param> public static IQuiverInPlaneAnalysisResults <TVertex> CreateQuiverInPlaneAnalysisResults <TVertex>(IQPAnalysisResults <TVertex> qpAnalysisResults) where TVertex : IEquatable <TVertex>, IComparable <TVertex> { if (qpAnalysisResults is null) { throw new ArgumentNullException(nameof(qpAnalysisResults)); } var qpMainResults = qpAnalysisResults.MainResults; // Shift up the non-first bits (corresponding to everything except Success) by 4 (which is // the number of non-success members in the QPExtractionResult enum) qpMainResults = (QPAnalysisMainResults)((int)(qpAnalysisResults.MainResults & ~QPAnalysisMainResults.Success) << 4) | (qpMainResults & QPAnalysisMainResults.Success); var mainResults = (QuiverInPlaneAnalysisMainResults)qpMainResults; return(new QuiverInPlaneAnalysisResults <TVertex>( mainResults, qpAnalysisResults.MaximalPathRepresentatives, qpAnalysisResults.NakayamaPermutation, qpAnalysisResults.LongestPathEncountered)); }