// Sets up variables for a call to Analyzer.ComputeMaximalNonzeroEquivalenceClassRepresentativesStartingAt (and possibly other methods)
        private static void DoSetup(
            QuiverWithPotential <int> qp,
            out QPAnalyzer analyzer,
            out TransformationRuleTreeNode <int> ruleTree,
            out QPAnalysisSettings settings)
        {
            analyzer = new QPAnalyzer();
            var ruleCreator = new TransformationRuleTreeCreator();

            ruleTree = ruleCreator.CreateTransformationRuleTree(qp);
            settings = CreateSettings(detectNonCancellativity: false);
        }
        /// <inheritdoc/>
        public void Do()
        {
            if (!TryGetQP(out var qp, out var periods, out var fixedPoint))
            {
                return;
            }

            var analyzer = new QPAnalyzer();
            var settings = new QPAnalysisSettings(
                CancellativityTypes.WeakCancellativity,
                maxPathLength: -1,
                EarlyTerminationConditions.None);

            Console.WriteLine("Analyzing QP ...");
            var results = analyzer.AnalyzeUtilizingPeriodicityConcurrently(qp, periods, settings);

            PrintResults(results);
        }