This is an automated email from the ASF dual-hosted git repository.

asf-gitbox-commits pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-statistics.git


The following commit(s) were added to refs/heads/master by this push:
     new 837717bd Add info command to distribution example application
837717bd is described below

commit 837717bddadc77b33d75033075ea41b32da75614
Author: Alex Herbert <[email protected]>
AuthorDate: Thu Sep 17 21:05:05 2026 +0100

    Add info command to distribution example application
    
    Info command contains the domain lower and upper bound; and the mean and
    variance.
---
 .../examples-distribution/HOWTO.md                 |  1 +
 .../AbstractContinuousDistributionCommand.java     | 40 ++++++++++--
 .../AbstractDiscreteDistributionCommand.java       | 40 +++++++++---
 .../examples/distribution/BetaCommand.java         | 45 +++++++-------
 .../examples/distribution/BinomialCommand.java     | 45 +++++++-------
 .../examples/distribution/CauchyCommand.java       | 45 +++++++-------
 .../examples/distribution/ChiSquaredCommand.java   | 45 +++++++-------
 .../ContinuousDistributionOptions.java             | 13 +++-
 .../distribution/DiscreteDistributionOptions.java  | 13 +++-
 .../examples/distribution/DistributionOptions.java | 13 +---
 .../examples/distribution/DistributionUtils.java   | 71 +++++++++++++++++++++-
 .../examples/distribution/ExpCommand.java          | 45 +++++++-------
 .../statistics/examples/distribution/FCommand.java | 45 +++++++-------
 .../examples/distribution/FoldedNormalCommand.java | 45 +++++++-------
 .../examples/distribution/GammaCommand.java        | 45 +++++++-------
 .../examples/distribution/GeometricCommand.java    | 45 +++++++-------
 .../examples/distribution/GumbelCommand.java       | 45 +++++++-------
 .../distribution/HypergeometricCommand.java        | 45 +++++++-------
 .../examples/distribution/LaplaceCommand.java      | 45 +++++++-------
 .../examples/distribution/LevyCommand.java         | 45 +++++++-------
 .../examples/distribution/LogNormalCommand.java    | 45 +++++++-------
 .../examples/distribution/LogUniformCommand.java   | 45 +++++++-------
 .../examples/distribution/LogisticCommand.java     | 45 +++++++-------
 .../examples/distribution/NakagamiCommand.java     | 45 +++++++-------
 .../examples/distribution/NormalCommand.java       | 45 +++++++-------
 ...DistributionOptions.java => OutputOptions.java} | 21 +------
 .../examples/distribution/ParetoCommand.java       | 45 +++++++-------
 .../examples/distribution/PascalCommand.java       | 45 +++++++-------
 .../examples/distribution/PoissonCommand.java      | 45 +++++++-------
 .../statistics/examples/distribution/TCommand.java | 45 +++++++-------
 .../examples/distribution/TrapezoidalCommand.java  | 45 +++++++-------
 .../examples/distribution/TriangularCommand.java   | 45 +++++++-------
 .../distribution/TruncatedNormalCommand.java       | 45 +++++++-------
 .../distribution/UniformContinuousCommand.java     | 45 +++++++-------
 .../distribution/UniformDiscreteCommand.java       | 45 +++++++-------
 .../examples/distribution/WeibullCommand.java      | 45 +++++++-------
 .../examples/distribution/ZetaCommand.java         | 47 +++++++-------
 .../examples/distribution/ZipfCommand.java         | 46 +++++++-------
 38 files changed, 886 insertions(+), 679 deletions(-)

diff --git a/commons-statistics-examples/examples-distribution/HOWTO.md 
b/commons-statistics-examples/examples-distribution/HOWTO.md
index 049bb7b6..5f26e546 100644
--- a/commons-statistics-examples/examples-distribution/HOWTO.md
+++ b/commons-statistics-examples/examples-distribution/HOWTO.md
@@ -36,6 +36,7 @@ named by the command. Each distribution command has the 
following functions:
 
 | Function | Description |
 | -------- | ----------- |
+| info | Information on the domain, mean and variance |
 | pdf | Probability Density Function (continuous distributions) |
 | pmf | Probability Mass Function (discrete distributions) |
 | cdf | Cumulative Probability Density Function |
diff --git 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/AbstractContinuousDistributionCommand.java
 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/AbstractContinuousDistributionCommand.java
index bb358ac3..3d9fbb89 100644
--- 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/AbstractContinuousDistributionCommand.java
+++ 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/AbstractContinuousDistributionCommand.java
@@ -19,6 +19,7 @@ package org.apache.commons.statistics.examples.distribution;
 import java.util.List;
 import java.util.concurrent.Callable;
 import org.apache.commons.statistics.distribution.ContinuousDistribution;
+import picocli.CommandLine.ArgGroup;
 import picocli.CommandLine.Mixin;
 
 /**
@@ -35,17 +36,44 @@ import picocli.CommandLine.Mixin;
  * evaluation.
  */
 abstract class AbstractContinuousDistributionCommand implements Callable<Void> 
{
+    /** Heading for distribution parameters. */
+    static final String HEADING_DISTRIBUTION_PARAMETERS = "Distribution 
parameters:%n";
+    /** Heading for evaluation options. */
+    static final String HEADING_EVALUATION_OPTIONS = "Evaluation options:%n";
+
     /** The standard options. */
     @Mixin
     private StandardOptions standardOptions;
 
+    /** The distribution options. */
+    @ArgGroup(validate = false, heading = HEADING_EVALUATION_OPTIONS, order = 
2)
+    private OutputOptions outputOptions;
+
+    /**
+     * Create an instance.
+     *
+     * @param outputOptions the output options
+     */
+    AbstractContinuousDistributionCommand(OutputOptions outputOptions) {
+        this.outputOptions = outputOptions;
+    }
+
     @Override
     public Void call() {
         final List<Distribution<ContinuousDistribution>> distributions = 
getDistributions();
-        final DistributionOptions distributionOptions = 
getDistributionOptions();
         // Set the function based on the class name
         final String name = getClass().getSimpleName();
 
+        // Special handling of sub-classes which do not evaluate a function of 
the distribution.
+        // This is done here to avoid duplicating an overridden 'call()' 
method for each instance.
+        if ("Info".equals(name)) {
+            DistributionUtils.infoContinuous(distributions, outputOptions);
+            return null;
+        }
+
+        // Assume this is an evaluation of the distribution
+        final DistributionOptions distributionOptions = (DistributionOptions) 
outputOptions;
+
         // Special handling of sub-classes which do not evaluate a function of 
the distribution.
         // This is done here to avoid duplicating an overridden 'call()' 
method for each instance.
         // Currently this applies to a 'check' command that performs 
verification checks
@@ -80,10 +108,12 @@ abstract class AbstractContinuousDistributionCommand 
implements Callable<Void> {
     protected abstract List<Distribution<ContinuousDistribution>> 
getDistributions();
 
     /**
-     * Gets the distribution options.
-     * This will define the points to evaluate, and the output options.
+     * Gets the output options.
+     * Sub-classes can define the points to evaluate.
      *
-     * @return the distribution options
+     * @return the output options
      */
-    protected abstract DistributionOptions getDistributionOptions();
+    protected OutputOptions getOutputOptions() {
+        return outputOptions;
+    }
 }
diff --git 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/AbstractDiscreteDistributionCommand.java
 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/AbstractDiscreteDistributionCommand.java
index 1010b07a..9c1422b6 100644
--- 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/AbstractDiscreteDistributionCommand.java
+++ 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/AbstractDiscreteDistributionCommand.java
@@ -19,6 +19,7 @@ package org.apache.commons.statistics.examples.distribution;
 import java.util.List;
 import java.util.concurrent.Callable;
 import org.apache.commons.statistics.distribution.DiscreteDistribution;
+import picocli.CommandLine.ArgGroup;
 import picocli.CommandLine.Mixin;
 
 /**
@@ -35,21 +36,44 @@ import picocli.CommandLine.Mixin;
  * evaluation.
  */
 abstract class AbstractDiscreteDistributionCommand implements Callable<Void> {
+    /** Heading for distribution parameters. */
+    static final String HEADING_DISTRIBUTION_PARAMETERS = "Distribution 
parameters:%n";
+    /** Heading for evaluation options. */
+    static final String HEADING_EVALUATION_OPTIONS = "Evaluation options:%n";
+
     /** The standard options. */
     @Mixin
     private StandardOptions standardOptions;
 
+    /** The distribution options. */
+    @ArgGroup(validate = false, heading = HEADING_EVALUATION_OPTIONS, order = 
2)
+    private OutputOptions outputOptions;
+
+    /**
+     * Create an instance.
+     *
+     * @param outputOptions the output options
+     */
+    AbstractDiscreteDistributionCommand(OutputOptions outputOptions) {
+        this.outputOptions = outputOptions;
+    }
+
     @Override
     public Void call() {
         final List<Distribution<DiscreteDistribution>> distributions = 
getDistributions();
-        final DistributionOptions distributionOptions = 
getDistributionOptions();
         // Set the function based on the class name
         final String name = getClass().getSimpleName();
 
         // Special handling of sub-classes which do not evaluate a function of 
the distribution.
         // This is done here to avoid duplicating an overridden 'call()' 
method for each instance.
-        // Currently this applies to a hidden 'check' command that performs 
verification checks
-        // on the distribution.
+        if ("Info".equals(name)) {
+            DistributionUtils.infoDiscrete(distributions, outputOptions);
+            return null;
+        }
+
+        // Assume this is an evaluation of the distribution
+        final DistributionOptions distributionOptions = (DistributionOptions) 
outputOptions;
+
         if ("Check".equals(name)) {
             // This is not an evaluation of a single function.
             DistributionUtils.check(distributions,
@@ -80,10 +104,12 @@ abstract class AbstractDiscreteDistributionCommand 
implements Callable<Void> {
     protected abstract List<Distribution<DiscreteDistribution>> 
getDistributions();
 
     /**
-     * Gets the distribution options.
-     * This will define the points to evaluate, and the output options.
+     * Gets the output options.
+     * Sub-classes can define the points to evaluate.
      *
-     * @return the distribution options
+     * @return the output options
      */
-    protected abstract DistributionOptions getDistributionOptions();
+    protected OutputOptions getOutputOptions() {
+        return outputOptions;
+    }
 }
diff --git 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/BetaCommand.java
 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/BetaCommand.java
index 8df2261f..5a31735a 100644
--- 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/BetaCommand.java
+++ 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/BetaCommand.java
@@ -30,6 +30,7 @@ import picocli.CommandLine.Option;
 @Command(name = "beta",
          description = "Beta distribution.",
          subcommands = {
+             BetaCommand.Info.class,
              BetaCommand.Check.class,
              BetaCommand.PDF.class,
              BetaCommand.LPDF.class,
@@ -63,13 +64,13 @@ class BetaCommand extends AbstractDistributionCommand {
             private double[] beta = {0.5, 1, 3, 2, 5};
         }
 
-        /** Extend the options to set the default values for this 
distribution. */
-        static final class Options extends ContinuousDistributionOptions {
-            /** Set defaults. */
-            private Options() {
-                min = 0;
-                max = 1;
-            }
+        /**
+         * Create an instance.
+         *
+         * @param outputOptions the output options
+         */
+        BaseCommand(OutputOptions outputOptions) {
+            super(outputOptions);
         }
 
         @Override
@@ -91,27 +92,29 @@ class BetaCommand extends AbstractDistributionCommand {
         }
     }
 
-    /** Base command for the distribution that defines the parameters. */
+    /** Base command for the distribution that defines the parameters for 
probability functions. */
     private abstract static class ProbabilityCommand extends BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private Options distributionOptions = new Options();
-
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+        /** Default constructor. */
+        ProbabilityCommand() {
+            super(new ContinuousDistributionOptions(0, 1));
         }
     }
 
     /** Base command for the distribution that defines the parameters for 
inverse probability functions. */
     private abstract static class InverseProbabilityCommand extends 
BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private InverseContinuousDistributionOptions distributionOptions = new 
InverseContinuousDistributionOptions();
+        /** Default constructor. */
+        InverseProbabilityCommand() {
+            super(new InverseContinuousDistributionOptions());
+        }
+    }
 
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+    /** Information command. */
+    @Command(name = "info",
+             description = "Beta distribution information.")
+    static class Info extends BaseCommand {
+        /** Default constructor. */
+        Info() {
+            super(new OutputOptions());
         }
     }
 
diff --git 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/BinomialCommand.java
 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/BinomialCommand.java
index caf1a152..0c905083 100644
--- 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/BinomialCommand.java
+++ 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/BinomialCommand.java
@@ -31,6 +31,7 @@ import picocli.CommandLine.Option;
          aliases = {"bino"},
          description = "Binomial distribution.",
          subcommands = {
+             BinomialCommand.Info.class,
              BinomialCommand.Check.class,
              BinomialCommand.PMF.class,
              BinomialCommand.LPMF.class,
@@ -64,13 +65,13 @@ class BinomialCommand extends AbstractDistributionCommand {
             private double[] p = {0.5, 0.7, 0.5};
         }
 
-        /** Extend the options to set the default values for this 
distribution. */
-        static final class Options extends DiscreteDistributionOptions {
-            /** Set defaults. */
-            private Options() {
-                min = 0;
-                max = 40;
-            }
+        /**
+         * Create an instance.
+         *
+         * @param outputOptions the output options
+         */
+        BaseCommand(OutputOptions outputOptions) {
+            super(outputOptions);
         }
 
         @Override
@@ -92,27 +93,29 @@ class BinomialCommand extends AbstractDistributionCommand {
         }
     }
 
-    /** Base command for the distribution that defines the parameters. */
+    /** Base command for the distribution that defines the parameters for 
probability functions. */
     private abstract static class ProbabilityCommand extends BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private Options distributionOptions = new Options();
-
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+        /** Default constructor. */
+        ProbabilityCommand() {
+            super(new DiscreteDistributionOptions(0, 40));
         }
     }
 
     /** Base command for the distribution that defines the parameters for 
inverse probability functions. */
     private abstract static class InverseProbabilityCommand extends 
BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private InverseDiscreteDistributionOptions distributionOptions = new 
InverseDiscreteDistributionOptions();
+        /** Default constructor. */
+        InverseProbabilityCommand() {
+            super(new InverseDiscreteDistributionOptions());
+        }
+    }
 
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+    /** Information command. */
+    @Command(name = "info",
+             description = "Binomial distribution information.")
+    static class Info extends BaseCommand {
+        /** Default constructor. */
+        Info() {
+            super(new OutputOptions());
         }
     }
 
diff --git 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/CauchyCommand.java
 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/CauchyCommand.java
index 3d03c201..91e586d4 100644
--- 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/CauchyCommand.java
+++ 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/CauchyCommand.java
@@ -30,6 +30,7 @@ import picocli.CommandLine.Option;
 @Command(name = "cauchy",
          description = "Cauchy distribution.",
          subcommands = {
+             CauchyCommand.Info.class,
              CauchyCommand.Check.class,
              CauchyCommand.PDF.class,
              CauchyCommand.LPDF.class,
@@ -63,13 +64,13 @@ class CauchyCommand extends AbstractDistributionCommand {
             private double[] scale = {0.5, 1, 2, 1};
         }
 
-        /** Extend the options to set the default values for this 
distribution. */
-        static final class Options extends ContinuousDistributionOptions {
-            /** Set defaults. */
-            private Options() {
-                min = -5;
-                max = 5;
-            }
+        /**
+         * Create an instance.
+         *
+         * @param outputOptions the output options
+         */
+        BaseCommand(OutputOptions outputOptions) {
+            super(outputOptions);
         }
 
         @Override
@@ -91,27 +92,29 @@ class CauchyCommand extends AbstractDistributionCommand {
         }
     }
 
-    /** Base command for the distribution that defines the parameters. */
+    /** Base command for the distribution that defines the parameters for 
probability functions. */
     private abstract static class ProbabilityCommand extends BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private Options distributionOptions = new Options();
-
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+        /** Default constructor. */
+        ProbabilityCommand() {
+            super(new ContinuousDistributionOptions(-5, 5));
         }
     }
 
     /** Base command for the distribution that defines the parameters for 
inverse probability functions. */
     private abstract static class InverseProbabilityCommand extends 
BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private InverseContinuousDistributionOptions distributionOptions = new 
InverseContinuousDistributionOptions();
+        /** Default constructor. */
+        InverseProbabilityCommand() {
+            super(new InverseContinuousDistributionOptions());
+        }
+    }
 
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+    /** Information command. */
+    @Command(name = "info",
+             description = "Cauchy distribution information.")
+    static class Info extends BaseCommand {
+        /** Default constructor. */
+        Info() {
+            super(new OutputOptions());
         }
     }
 
diff --git 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/ChiSquaredCommand.java
 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/ChiSquaredCommand.java
index 6ebdad49..965ca43f 100644
--- 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/ChiSquaredCommand.java
+++ 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/ChiSquaredCommand.java
@@ -31,6 +31,7 @@ import picocli.CommandLine.Option;
          aliases = {"chi2"},
          description = "Chi-squared distribution.",
          subcommands = {
+             ChiSquaredCommand.Info.class,
              ChiSquaredCommand.Check.class,
              ChiSquaredCommand.PDF.class,
              ChiSquaredCommand.LPDF.class,
@@ -57,13 +58,13 @@ class ChiSquaredCommand extends AbstractDistributionCommand 
{
             private double[] df = {1, 2, 3, 4, 6, 9};
         }
 
-        /** Extend the options to set the default values for this 
distribution. */
-        static final class Options extends ContinuousDistributionOptions {
-            /** Set defaults. */
-            private Options() {
-                min = 0;
-                max = 8;
-            }
+        /**
+         * Create an instance.
+         *
+         * @param outputOptions the output options
+         */
+        BaseCommand(OutputOptions outputOptions) {
+            super(outputOptions);
         }
 
         @Override
@@ -78,27 +79,29 @@ class ChiSquaredCommand extends AbstractDistributionCommand 
{
         }
     }
 
-    /** Base command for the distribution that defines the parameters. */
+    /** Base command for the distribution that defines the parameters for 
probability functions. */
     private abstract static class ProbabilityCommand extends BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private Options distributionOptions = new Options();
-
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+        /** Default constructor. */
+        ProbabilityCommand() {
+            super(new ContinuousDistributionOptions(0, 8));
         }
     }
 
     /** Base command for the distribution that defines the parameters for 
inverse probability functions. */
     private abstract static class InverseProbabilityCommand extends 
BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private InverseContinuousDistributionOptions distributionOptions = new 
InverseContinuousDistributionOptions();
+        /** Default constructor. */
+        InverseProbabilityCommand() {
+            super(new InverseContinuousDistributionOptions());
+        }
+    }
 
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+    /** Information command. */
+    @Command(name = "info",
+             description = "Chi-squared distribution information.")
+    static class Info extends BaseCommand {
+        /** Default constructor. */
+        Info() {
+            super(new OutputOptions());
         }
     }
 
diff --git 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/ContinuousDistributionOptions.java
 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/ContinuousDistributionOptions.java
index 63a8174f..c148d727 100644
--- 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/ContinuousDistributionOptions.java
+++ 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/ContinuousDistributionOptions.java
@@ -31,7 +31,7 @@ class ContinuousDistributionOptions extends 
DistributionOptions {
     /** The maximum point to evaluate. */
     @Option(names = { "--max" },
             description = {"Maximum point to evaluate (default: 
${DEFAULT-VALUE})."})
-    protected double max = 5;
+    protected double max;
 
     /** The number of steps from minimum to the maximum. */
     @Option(names = { "--steps" },
@@ -54,4 +54,15 @@ class ContinuousDistributionOptions extends 
DistributionOptions {
     @Option(names = { "--format" },
             description = {"Format for the output values (default: 
${DEFAULT-VALUE})."})
     protected String format = "%s";
+
+    /**
+     * Create an instance.
+     *
+     * @param min the minimum point to evaluate
+     * @param max the maximum point to evaluate
+     */
+    ContinuousDistributionOptions(double min, double max) {
+        this.min = min;
+        this.max = max;
+    }
 }
diff --git 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/DiscreteDistributionOptions.java
 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/DiscreteDistributionOptions.java
index fa98b31a..f8f9c610 100644
--- 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/DiscreteDistributionOptions.java
+++ 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/DiscreteDistributionOptions.java
@@ -31,7 +31,7 @@ class DiscreteDistributionOptions extends DistributionOptions 
{
     /** The maximum point to evaluate. */
     @Option(names = { "--max" },
             description = {"Maximum point to evaluate (default: 
${DEFAULT-VALUE})."})
-    protected int max = 20;
+    protected int max;
 
     /** The increment from minimum to the maximum. */
     @Option(names = { "-i", "--increment" },
@@ -49,4 +49,15 @@ class DiscreteDistributionOptions extends 
DistributionOptions {
     @Option(names = { "--format" },
             description = {"Format for the output values (default: 
${DEFAULT-VALUE})."})
     protected String format = "%s";
+
+    /**
+     * Create an instance.
+     *
+     * @param min the minimum point to evaluate
+     * @param max the maximum point to evaluate
+     */
+    DiscreteDistributionOptions(int min, int max) {
+        this.min = min;
+        this.max = max;
+    }
 }
diff --git 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/DistributionOptions.java
 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/DistributionOptions.java
index 850cb3d2..8ad5f680 100644
--- 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/DistributionOptions.java
+++ 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/DistributionOptions.java
@@ -22,22 +22,11 @@ import picocli.CommandLine.Option;
 /**
  * Standard options for distribution commands.
  */
-class DistributionOptions {
+class DistributionOptions extends OutputOptions {
 
     /** The distribution function. */
     protected DistributionFunction distributionFunction;
 
-    /** The field delimiter. */
-    @Option(names = { "--delim" },
-            description = {"Output field delimiter (default: \\t)."})
-    protected String delim = "\t";
-
-    /** The output file. */
-    @Option(names = { "--out" },
-            paramLabel = "file",
-            description = {"Output file (default: stdout)."})
-    protected File outputFile;
-
     /** The output file. */
     @Option(names = { "--in" },
             paramLabel = "file",
diff --git 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/DistributionUtils.java
 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/DistributionUtils.java
index eb29485e..f1e19237 100644
--- 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/DistributionUtils.java
+++ 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/DistributionUtils.java
@@ -340,6 +340,61 @@ final class DistributionUtils {
         }
     }
 
+    /**
+     * Show the information of the continuous distribution.
+     *
+     * @param dist Distributions
+     * @param outputOptions Output options
+     */
+    static void infoContinuous(List<Distribution<ContinuousDistribution>> 
dist, OutputOptions outputOptions) {
+        try (PrintWriter out = createOutput(outputOptions.outputFile)) {
+            final String format = createFormatAndWriteHeader(outputOptions, 
out);
+            dist.forEach(d -> {
+                final ContinuousDistribution dd = d.getDistribution();
+                final String title = dd.getClass().getSimpleName() + " " + 
d.getParameters();
+                final double lower = dd.getSupportLowerBound();
+                final double upper = dd.getSupportUpperBound();
+                final double mean = dd.getMean();
+                final double variance = dd.getVariance();
+                out.printf(format, title, lower, upper, mean, variance);
+            });
+        }
+    }
+
+    /**
+     * Show the information of the discrete distribution.
+     *
+     * @param dist Distributions
+     * @param outputOptions Output options
+     */
+    static void infoDiscrete(List<Distribution<DiscreteDistribution>> dist, 
OutputOptions outputOptions) {
+        try (PrintWriter out = createOutput(outputOptions.outputFile)) {
+            final String format = createFormatAndWriteHeader(outputOptions, 
out);
+            dist.forEach(d -> {
+                final DiscreteDistribution dd = d.getDistribution();
+                final String title = dd.getClass().getSimpleName() + " " + 
d.getParameters();
+                final int lower = dd.getSupportLowerBound();
+                final int upper = dd.getSupportUpperBound();
+                final double mean = dd.getMean();
+                final double variance = dd.getVariance();
+                out.printf(format, title, lower, upper, mean, variance);
+            });
+        }
+    }
+
+    /**
+     * Creates the format and writes the information header.
+     *
+     * @param outputOptions the output options
+     * @param out the output
+     * @return the format string for [lower, upper, mean, variance]
+     */
+    private static String createFormatAndWriteHeader(OutputOptions 
outputOptions, PrintWriter out) {
+        final String format = "%s %s %s %s %s%n".replace(" ", 
outputOptions.delim);
+        out.printf(format, "distribution", "lower", "upper", "mean", 
"variance");
+        return format;
+    }
+
     /**
      * Creates the output.
      *
@@ -347,11 +402,21 @@ final class DistributionUtils {
      * @return the print stream
      */
     private static PrintWriter createOutput(DistributionOptions 
distributionOptions) {
-        if (distributionOptions.outputFile != null) {
+        return createOutput(distributionOptions.outputFile);
+    }
+
+    /**
+     * Creates the output.
+     *
+     * @param outputFile Output file
+     * @return the print stream
+     */
+    private static PrintWriter createOutput(File outputFile) {
+        if (outputFile != null) {
             try {
-                return new 
PrintWriter(Files.newBufferedWriter(distributionOptions.outputFile.toPath()));
+                return new 
PrintWriter(Files.newBufferedWriter(outputFile.toPath()));
             } catch (IOException ex) {
-                throw new UncheckedIOException("Failed to create output: " + 
distributionOptions.outputFile, ex);
+                throw new UncheckedIOException("Failed to create output: " + 
outputFile, ex);
             }
         }
         return new PrintWriter(System.out) {
diff --git 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/ExpCommand.java
 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/ExpCommand.java
index bc4b1944..75374750 100644
--- 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/ExpCommand.java
+++ 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/ExpCommand.java
@@ -30,6 +30,7 @@ import picocli.CommandLine.Option;
 @Command(name = "exp",
          description = "Exponential distribution.",
          subcommands = {
+             ExpCommand.Info.class,
              ExpCommand.Check.class,
              ExpCommand.PDF.class,
              ExpCommand.LPDF.class,
@@ -56,13 +57,13 @@ class ExpCommand extends AbstractDistributionCommand {
             private double[] mean = {2, 1, 2.0 / 3};
         }
 
-        /** Extend the options to set the default values for this 
distribution. */
-        static final class Options extends ContinuousDistributionOptions {
-            /** Set defaults. */
-            private Options() {
-                min = 0;
-                max = 5;
-            }
+        /**
+         * Create an instance.
+         *
+         * @param outputOptions the output options
+         */
+        BaseCommand(OutputOptions outputOptions) {
+            super(outputOptions);
         }
 
         @Override
@@ -77,27 +78,29 @@ class ExpCommand extends AbstractDistributionCommand {
         }
     }
 
-    /** Base command for the distribution that defines the parameters. */
+    /** Base command for the distribution that defines the parameters for 
probability functions. */
     private abstract static class ProbabilityCommand extends BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private Options distributionOptions = new Options();
-
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+        /** Default constructor. */
+        ProbabilityCommand() {
+            super(new ContinuousDistributionOptions(0, 5));
         }
     }
 
     /** Base command for the distribution that defines the parameters for 
inverse probability functions. */
     private abstract static class InverseProbabilityCommand extends 
BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private InverseContinuousDistributionOptions distributionOptions = new 
InverseContinuousDistributionOptions();
+        /** Default constructor. */
+        InverseProbabilityCommand() {
+            super(new InverseContinuousDistributionOptions());
+        }
+    }
 
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+    /** Information command. */
+    @Command(name = "info",
+             description = "Exponential distribution information.")
+    static class Info extends BaseCommand {
+        /** Default constructor. */
+        Info() {
+            super(new OutputOptions());
         }
     }
 
diff --git 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/FCommand.java
 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/FCommand.java
index c6675205..8c29f5ef 100644
--- 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/FCommand.java
+++ 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/FCommand.java
@@ -30,6 +30,7 @@ import picocli.CommandLine.Option;
 @Command(name = "f",
          description = "F distribution.",
          subcommands = {
+             FCommand.Info.class,
              FCommand.Check.class,
              FCommand.PDF.class,
              FCommand.LPDF.class,
@@ -63,13 +64,13 @@ class FCommand extends AbstractDistributionCommand {
             private double[] df2 = {1, 1, 2, 1, 100};
         }
 
-        /** Extend the options to set the default values for this 
distribution. */
-        static final class Options extends ContinuousDistributionOptions {
-            /** Set defaults. */
-            private Options() {
-                min = 0;
-                max = 5;
-            }
+        /**
+         * Create an instance.
+         *
+         * @param outputOptions the output options
+         */
+        BaseCommand(OutputOptions outputOptions) {
+            super(outputOptions);
         }
 
         @Override
@@ -91,27 +92,29 @@ class FCommand extends AbstractDistributionCommand {
         }
     }
 
-    /** Base command for the distribution that defines the parameters. */
+    /** Base command for the distribution that defines the parameters for 
probability functions. */
     private abstract static class ProbabilityCommand extends BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private Options distributionOptions = new Options();
-
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+        /** Default constructor. */
+        ProbabilityCommand() {
+            super(new ContinuousDistributionOptions(0, 5));
         }
     }
 
     /** Base command for the distribution that defines the parameters for 
inverse probability functions. */
     private abstract static class InverseProbabilityCommand extends 
BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private InverseContinuousDistributionOptions distributionOptions = new 
InverseContinuousDistributionOptions();
+        /** Default constructor. */
+        InverseProbabilityCommand() {
+            super(new InverseContinuousDistributionOptions());
+        }
+    }
 
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+    /** Information command. */
+    @Command(name = "info",
+             description = "F distribution information.")
+    static class Info extends BaseCommand {
+        /** Default constructor. */
+        Info() {
+            super(new OutputOptions());
         }
     }
 
diff --git 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/FoldedNormalCommand.java
 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/FoldedNormalCommand.java
index 5089fdd0..76e752ba 100644
--- 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/FoldedNormalCommand.java
+++ 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/FoldedNormalCommand.java
@@ -33,6 +33,7 @@ import picocli.CommandLine.Option;
          aliases = {"foldnorm"},
          description = "Folded normal distribution.",
          subcommands = {
+             FoldedNormalCommand.Info.class,
              FoldedNormalCommand.Check.class,
              FoldedNormalCommand.PDF.class,
              FoldedNormalCommand.LPDF.class,
@@ -66,13 +67,13 @@ class FoldedNormalCommand extends 
AbstractDistributionCommand {
             private double[] sigma = {1, 2, 1, 1};
         }
 
-        /** Extend the options to set the default values for this 
distribution. */
-        static final class Options extends ContinuousDistributionOptions {
-            /** Set defaults. */
-            private Options() {
-                min = -5;
-                max = 5;
-            }
+        /**
+         * Create an instance.
+         *
+         * @param outputOptions the output options
+         */
+        BaseCommand(OutputOptions outputOptions) {
+            super(outputOptions);
         }
 
         @Override
@@ -94,27 +95,29 @@ class FoldedNormalCommand extends 
AbstractDistributionCommand {
         }
     }
 
-    /** Base command for the distribution that defines the parameters. */
+    /** Base command for the distribution that defines the parameters for 
probability functions. */
     private abstract static class ProbabilityCommand extends BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private Options distributionOptions = new Options();
-
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+        /** Default constructor. */
+        ProbabilityCommand() {
+            super(new ContinuousDistributionOptions(0, 5));
         }
     }
 
     /** Base command for the distribution that defines the parameters for 
inverse probability functions. */
     private abstract static class InverseProbabilityCommand extends 
BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private InverseContinuousDistributionOptions distributionOptions = new 
InverseContinuousDistributionOptions();
+        /** Default constructor. */
+        InverseProbabilityCommand() {
+            super(new InverseContinuousDistributionOptions());
+        }
+    }
 
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+    /** Information command. */
+    @Command(name = "info",
+             description = "Folded normal distribution information.")
+    static class Info extends BaseCommand {
+        /** Default constructor. */
+        Info() {
+            super(new OutputOptions());
         }
     }
 
diff --git 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/GammaCommand.java
 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/GammaCommand.java
index 2775a534..0e73e0b8 100644
--- 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/GammaCommand.java
+++ 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/GammaCommand.java
@@ -31,6 +31,7 @@ import picocli.CommandLine.Option;
          aliases = {"gam"},
          description = "Gamma distribution.",
          subcommands = {
+             GammaCommand.Info.class,
              GammaCommand.Check.class,
              GammaCommand.PDF.class,
              GammaCommand.LPDF.class,
@@ -64,13 +65,13 @@ class GammaCommand extends AbstractDistributionCommand {
             private double[] scale = {2, 2, 2, 1, 0.5, 1, 1};
         }
 
-        /** Extend the options to set the default values for this 
distribution. */
-        static final class Options extends ContinuousDistributionOptions {
-            /** Set defaults. */
-            private Options() {
-                min = 0;
-                max = 20;
-            }
+        /**
+         * Create an instance.
+         *
+         * @param outputOptions the output options
+         */
+        BaseCommand(OutputOptions outputOptions) {
+            super(outputOptions);
         }
 
         @Override
@@ -92,27 +93,29 @@ class GammaCommand extends AbstractDistributionCommand {
         }
     }
 
-    /** Base command for the distribution that defines the parameters. */
+    /** Base command for the distribution that defines the parameters for 
probability functions. */
     private abstract static class ProbabilityCommand extends BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private Options distributionOptions = new Options();
-
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+        /** Default constructor. */
+        ProbabilityCommand() {
+            super(new ContinuousDistributionOptions(0, 20));
         }
     }
 
     /** Base command for the distribution that defines the parameters for 
inverse probability functions. */
     private abstract static class InverseProbabilityCommand extends 
BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private InverseContinuousDistributionOptions distributionOptions = new 
InverseContinuousDistributionOptions();
+        /** Default constructor. */
+        InverseProbabilityCommand() {
+            super(new InverseContinuousDistributionOptions());
+        }
+    }
 
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+    /** Information command. */
+    @Command(name = "info",
+             description = "Gamme distribution information.")
+    static class Info extends BaseCommand {
+        /** Default constructor. */
+        Info() {
+            super(new OutputOptions());
         }
     }
 
diff --git 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/GeometricCommand.java
 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/GeometricCommand.java
index bb5b9034..6737db44 100644
--- 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/GeometricCommand.java
+++ 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/GeometricCommand.java
@@ -31,6 +31,7 @@ import picocli.CommandLine.Option;
          aliases = {"geo"},
          description = "Geometric distribution.",
          subcommands = {
+             GeometricCommand.Info.class,
              GeometricCommand.Check.class,
              GeometricCommand.PMF.class,
              GeometricCommand.LPMF.class,
@@ -57,13 +58,13 @@ class GeometricCommand extends AbstractDistributionCommand {
             private double[] p = {0.2, 0.5, 0.8};
         }
 
-        /** Extend the options to set the default values for this 
distribution. */
-        static final class Options extends DiscreteDistributionOptions {
-            /** Set defaults. */
-            private Options() {
-                min = 0;
-                max = 10;
-            }
+        /**
+         * Create an instance.
+         *
+         * @param outputOptions the output options
+         */
+        BaseCommand(OutputOptions outputOptions) {
+            super(outputOptions);
         }
 
         @Override
@@ -78,27 +79,29 @@ class GeometricCommand extends AbstractDistributionCommand {
         }
     }
 
-    /** Base command for the distribution that defines the parameters. */
+    /** Base command for the distribution that defines the parameters for 
probability functions. */
     private abstract static class ProbabilityCommand extends BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private Options distributionOptions = new Options();
-
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+        /** Default constructor. */
+        ProbabilityCommand() {
+            super(new DiscreteDistributionOptions(0, 10));
         }
     }
 
     /** Base command for the distribution that defines the parameters for 
inverse probability functions. */
     private abstract static class InverseProbabilityCommand extends 
BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private InverseDiscreteDistributionOptions distributionOptions = new 
InverseDiscreteDistributionOptions();
+        /** Default constructor. */
+        InverseProbabilityCommand() {
+            super(new InverseDiscreteDistributionOptions());
+        }
+    }
 
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+    /** Information command. */
+    @Command(name = "info",
+             description = "Geometric distribution information.")
+    static class Info extends BaseCommand {
+        /** Default constructor. */
+        Info() {
+            super(new OutputOptions());
         }
     }
 
diff --git 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/GumbelCommand.java
 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/GumbelCommand.java
index 445e3259..9054c7af 100644
--- 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/GumbelCommand.java
+++ 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/GumbelCommand.java
@@ -30,6 +30,7 @@ import picocli.CommandLine.Option;
 @Command(name = "gumbel",
          description = "Gumbel distribution.",
          subcommands = {
+             GumbelCommand.Info.class,
              GumbelCommand.Check.class,
              GumbelCommand.PDF.class,
              GumbelCommand.LPDF.class,
@@ -63,13 +64,13 @@ class GumbelCommand extends AbstractDistributionCommand {
             private double[] beta = {2, 2, 3, 4};
         }
 
-        /** Extend the options to set the default values for this 
distribution. */
-        static final class Options extends ContinuousDistributionOptions {
-            /** Set defaults. */
-            private Options() {
-                min = -5;
-                max = 20;
-            }
+        /**
+         * Create an instance.
+         *
+         * @param outputOptions the output options
+         */
+        BaseCommand(OutputOptions outputOptions) {
+            super(outputOptions);
         }
 
         @Override
@@ -91,27 +92,29 @@ class GumbelCommand extends AbstractDistributionCommand {
         }
     }
 
-    /** Base command for the distribution that defines the parameters. */
+    /** Base command for the distribution that defines the parameters for 
probability functions. */
     private abstract static class ProbabilityCommand extends BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private Options distributionOptions = new Options();
-
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+        /** Default constructor. */
+        ProbabilityCommand() {
+            super(new ContinuousDistributionOptions(-5, 20));
         }
     }
 
     /** Base command for the distribution that defines the parameters for 
inverse probability functions. */
     private abstract static class InverseProbabilityCommand extends 
BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private InverseContinuousDistributionOptions distributionOptions = new 
InverseContinuousDistributionOptions();
+        /** Default constructor. */
+        InverseProbabilityCommand() {
+            super(new InverseContinuousDistributionOptions());
+        }
+    }
 
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+    /** Information command. */
+    @Command(name = "info",
+             description = "Gumbel distribution information.")
+    static class Info extends BaseCommand {
+        /** Default constructor. */
+        Info() {
+            super(new OutputOptions());
         }
     }
 
diff --git 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/HypergeometricCommand.java
 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/HypergeometricCommand.java
index 48f8a23b..1486fbf6 100644
--- 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/HypergeometricCommand.java
+++ 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/HypergeometricCommand.java
@@ -31,6 +31,7 @@ import picocli.CommandLine.Option;
          aliases = {"hyge"},
          description = "Hypergeometric distribution.",
          subcommands = {
+             HypergeometricCommand.Info.class,
              HypergeometricCommand.Check.class,
              HypergeometricCommand.PMF.class,
              HypergeometricCommand.LPMF.class,
@@ -73,13 +74,13 @@ class HypergeometricCommand extends 
AbstractDistributionCommand {
             private int[] n = {100, 200, 300};
         }
 
-        /** Extend the options to set the default values for this 
distribution. */
-        static final class Options extends DiscreteDistributionOptions {
-            /** Set defaults. */
-            private Options() {
-                min = 0;
-                max = 60;
-            }
+        /**
+         * Create an instance.
+         *
+         * @param outputOptions the output options
+         */
+        BaseCommand(OutputOptions outputOptions) {
+            super(outputOptions);
         }
 
         @Override
@@ -103,27 +104,29 @@ class HypergeometricCommand extends 
AbstractDistributionCommand {
         }
     }
 
-    /** Base command for the distribution that defines the parameters. */
+    /** Base command for the distribution that defines the parameters for 
probability functions. */
     private abstract static class ProbabilityCommand extends BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private Options distributionOptions = new Options();
-
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+        /** Default constructor. */
+        ProbabilityCommand() {
+            super(new DiscreteDistributionOptions(0, 60));
         }
     }
 
     /** Base command for the distribution that defines the parameters for 
inverse probability functions. */
     private abstract static class InverseProbabilityCommand extends 
BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private InverseDiscreteDistributionOptions distributionOptions = new 
InverseDiscreteDistributionOptions();
+        /** Default constructor. */
+        InverseProbabilityCommand() {
+            super(new InverseDiscreteDistributionOptions());
+        }
+    }
 
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+    /** Information command. */
+    @Command(name = "info",
+             description = "Hypergeometric distribution information.")
+    static class Info extends BaseCommand {
+        /** Default constructor. */
+        Info() {
+            super(new OutputOptions());
         }
     }
 
diff --git 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/LaplaceCommand.java
 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/LaplaceCommand.java
index 007196db..d79c78cc 100644
--- 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/LaplaceCommand.java
+++ 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/LaplaceCommand.java
@@ -30,6 +30,7 @@ import picocli.CommandLine.Option;
 @Command(name = "laplace",
          description = "Laplace distribution.",
          subcommands = {
+             LaplaceCommand.Info.class,
              LaplaceCommand.Check.class,
              LaplaceCommand.PDF.class,
              LaplaceCommand.LPDF.class,
@@ -63,13 +64,13 @@ class LaplaceCommand extends AbstractDistributionCommand {
             private double[] beta = {1, 2, 4, 4};
         }
 
-        /** Extend the options to set the default values for this 
distribution. */
-        static final class Options extends ContinuousDistributionOptions {
-            /** Set defaults. */
-            private Options() {
-                min = -10;
-                max = 10;
-            }
+        /**
+         * Create an instance.
+         *
+         * @param outputOptions the output options
+         */
+        BaseCommand(OutputOptions outputOptions) {
+            super(outputOptions);
         }
 
         @Override
@@ -91,27 +92,29 @@ class LaplaceCommand extends AbstractDistributionCommand {
         }
     }
 
-    /** Base command for the distribution that defines the parameters. */
+    /** Base command for the distribution that defines the parameters for 
probability functions. */
     private abstract static class ProbabilityCommand extends BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private Options distributionOptions = new Options();
-
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+        /** Default constructor. */
+        ProbabilityCommand() {
+            super(new ContinuousDistributionOptions(-10, 10));
         }
     }
 
     /** Base command for the distribution that defines the parameters for 
inverse probability functions. */
     private abstract static class InverseProbabilityCommand extends 
BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private InverseContinuousDistributionOptions distributionOptions = new 
InverseContinuousDistributionOptions();
+        /** Default constructor. */
+        InverseProbabilityCommand() {
+            super(new InverseContinuousDistributionOptions());
+        }
+    }
 
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+    /** Information command. */
+    @Command(name = "info",
+             description = "Laplace distribution information.")
+    static class Info extends BaseCommand {
+        /** Default constructor. */
+        Info() {
+            super(new OutputOptions());
         }
     }
 
diff --git 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/LevyCommand.java
 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/LevyCommand.java
index c07a1fd5..032d92ea 100644
--- 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/LevyCommand.java
+++ 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/LevyCommand.java
@@ -30,6 +30,7 @@ import picocli.CommandLine.Option;
 @Command(name = "levy",
          description = "Levy distribution.",
          subcommands = {
+             LevyCommand.Info.class,
              LevyCommand.Check.class,
              LevyCommand.PDF.class,
              LevyCommand.LPDF.class,
@@ -63,13 +64,13 @@ class LevyCommand extends AbstractDistributionCommand {
             private double[] c = {0.5, 1, 2, 4, 8};
         }
 
-        /** Extend the options to set the default values for this 
distribution. */
-        static final class Options extends ContinuousDistributionOptions {
-            /** Set defaults. */
-            private Options() {
-                min = 0;
-                max = 3;
-            }
+        /**
+         * Create an instance.
+         *
+         * @param outputOptions the output options
+         */
+        BaseCommand(OutputOptions outputOptions) {
+            super(outputOptions);
         }
 
         @Override
@@ -91,27 +92,29 @@ class LevyCommand extends AbstractDistributionCommand {
         }
     }
 
-    /** Base command for the distribution that defines the parameters. */
+    /** Base command for the distribution that defines the parameters for 
probability functions. */
     private abstract static class ProbabilityCommand extends BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private Options distributionOptions = new Options();
-
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+        /** Default constructor. */
+        ProbabilityCommand() {
+            super(new ContinuousDistributionOptions(0, 3));
         }
     }
 
     /** Base command for the distribution that defines the parameters for 
inverse probability functions. */
     private abstract static class InverseProbabilityCommand extends 
BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private InverseContinuousDistributionOptions distributionOptions = new 
InverseContinuousDistributionOptions();
+        /** Default constructor. */
+        InverseProbabilityCommand() {
+            super(new InverseContinuousDistributionOptions());
+        }
+    }
 
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+    /** Information command. */
+    @Command(name = "info",
+             description = "Levy distribution information.")
+    static class Info extends BaseCommand {
+        /** Default constructor. */
+        Info() {
+            super(new OutputOptions());
         }
     }
 
diff --git 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/LogNormalCommand.java
 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/LogNormalCommand.java
index 2c95cdc7..28c91f0b 100644
--- 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/LogNormalCommand.java
+++ 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/LogNormalCommand.java
@@ -31,6 +31,7 @@ import picocli.CommandLine.Option;
          aliases = {"lnorm", "logn"},
          description = "Log-normal distribution.",
          subcommands = {
+             LogNormalCommand.Info.class,
              LogNormalCommand.Check.class,
              LogNormalCommand.PDF.class,
              LogNormalCommand.LPDF.class,
@@ -64,13 +65,13 @@ class LogNormalCommand extends AbstractDistributionCommand {
             private double[] sigma = {0.125, 0.25, 0.5, 1, 1.5, 10};
         }
 
-        /** Extend the options to set the default values for this 
distribution. */
-        static final class Options extends ContinuousDistributionOptions {
-            /** Set defaults. */
-            private Options() {
-                min = 0;
-                max = 3;
-            }
+        /**
+         * Create an instance.
+         *
+         * @param outputOptions the output options
+         */
+        BaseCommand(OutputOptions outputOptions) {
+            super(outputOptions);
         }
 
         @Override
@@ -92,27 +93,29 @@ class LogNormalCommand extends AbstractDistributionCommand {
         }
     }
 
-    /** Base command for the distribution that defines the parameters. */
+    /** Base command for the distribution that defines the parameters for 
probability functions. */
     private abstract static class ProbabilityCommand extends BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private Options distributionOptions = new Options();
-
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+        /** Default constructor. */
+        ProbabilityCommand() {
+            super(new ContinuousDistributionOptions(0, 3));
         }
     }
 
     /** Base command for the distribution that defines the parameters for 
inverse probability functions. */
     private abstract static class InverseProbabilityCommand extends 
BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private InverseContinuousDistributionOptions distributionOptions = new 
InverseContinuousDistributionOptions();
+        /** Default constructor. */
+        InverseProbabilityCommand() {
+            super(new InverseContinuousDistributionOptions());
+        }
+    }
 
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+    /** Information command. */
+    @Command(name = "info",
+             description = "Log-normal distribution information.")
+    static class Info extends BaseCommand {
+        /** Default constructor. */
+        Info() {
+            super(new OutputOptions());
         }
     }
 
diff --git 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/LogUniformCommand.java
 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/LogUniformCommand.java
index 1350cf33..6b7dbcc6 100644
--- 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/LogUniformCommand.java
+++ 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/LogUniformCommand.java
@@ -31,6 +31,7 @@ import picocli.CommandLine.Option;
          aliases = {"reciprocal"},
          description = "Log uniform distribution.",
          subcommands = {
+             LogUniformCommand.Info.class,
              LogUniformCommand.Check.class,
              LogUniformCommand.PDF.class,
              LogUniformCommand.LPDF.class,
@@ -66,13 +67,13 @@ class LogUniformCommand extends AbstractDistributionCommand 
{
             private double[] upper = {4, 6};
         }
 
-        /** Extend the options to set the default values for this 
distribution. */
-        static final class Options extends ContinuousDistributionOptions {
-            /** Set defaults. */
-            private Options() {
-                min = -5;
-                max = 5;
-            }
+        /**
+         * Create an instance.
+         *
+         * @param outputOptions the output options
+         */
+        BaseCommand(OutputOptions outputOptions) {
+            super(outputOptions);
         }
 
         @Override
@@ -94,27 +95,29 @@ class LogUniformCommand extends AbstractDistributionCommand 
{
         }
     }
 
-    /** Base command for the distribution that defines the parameters. */
+    /** Base command for the distribution that defines the parameters for 
probability functions. */
     private abstract static class ProbabilityCommand extends BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private Options distributionOptions = new Options();
-
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+        /** Default constructor. */
+        ProbabilityCommand() {
+            super(new ContinuousDistributionOptions(-5, 5));
         }
     }
 
     /** Base command for the distribution that defines the parameters for 
inverse probability functions. */
     private abstract static class InverseProbabilityCommand extends 
BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private InverseContinuousDistributionOptions distributionOptions = new 
InverseContinuousDistributionOptions();
+        /** Default constructor. */
+        InverseProbabilityCommand() {
+            super(new InverseContinuousDistributionOptions());
+        }
+    }
 
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+    /** Information command. */
+    @Command(name = "info",
+             description = "Log uniform distribution information.")
+    static class Info extends BaseCommand {
+        /** Default constructor. */
+        Info() {
+            super(new OutputOptions());
         }
     }
 
diff --git 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/LogisticCommand.java
 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/LogisticCommand.java
index fec25239..469c63a5 100644
--- 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/LogisticCommand.java
+++ 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/LogisticCommand.java
@@ -30,6 +30,7 @@ import picocli.CommandLine.Option;
 @Command(name = "logistic",
          description = "Logistic distribution.",
          subcommands = {
+             LogisticCommand.Info.class,
              LogisticCommand.Check.class,
              LogisticCommand.PDF.class,
              LogisticCommand.LPDF.class,
@@ -63,13 +64,13 @@ class LogisticCommand extends AbstractDistributionCommand {
             private double[] s = {2, 3, 4, 2, 1};
         }
 
-        /** Extend the options to set the default values for this 
distribution. */
-        static final class Options extends ContinuousDistributionOptions {
-            /** Set defaults. */
-            private Options() {
-                min = -5;
-                max = 20;
-            }
+        /**
+         * Create an instance.
+         *
+         * @param outputOptions the output options
+         */
+        BaseCommand(OutputOptions outputOptions) {
+            super(outputOptions);
         }
 
         @Override
@@ -91,27 +92,29 @@ class LogisticCommand extends AbstractDistributionCommand {
         }
     }
 
-    /** Base command for the distribution that defines the parameters. */
+    /** Base command for the distribution that defines the parameters for 
probability functions. */
     private abstract static class ProbabilityCommand extends BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private Options distributionOptions = new Options();
-
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+        /** Default constructor. */
+        ProbabilityCommand() {
+            super(new ContinuousDistributionOptions(-5, 20));
         }
     }
 
     /** Base command for the distribution that defines the parameters for 
inverse probability functions. */
     private abstract static class InverseProbabilityCommand extends 
BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private InverseContinuousDistributionOptions distributionOptions = new 
InverseContinuousDistributionOptions();
+        /** Default constructor. */
+        InverseProbabilityCommand() {
+            super(new InverseContinuousDistributionOptions());
+        }
+    }
 
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+    /** Information command. */
+    @Command(name = "info",
+             description = "Logistic distribution information.")
+    static class Info extends BaseCommand {
+        /** Default constructor. */
+        Info() {
+            super(new OutputOptions());
         }
     }
 
diff --git 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/NakagamiCommand.java
 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/NakagamiCommand.java
index a8b26c67..c1ac0a59 100644
--- 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/NakagamiCommand.java
+++ 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/NakagamiCommand.java
@@ -30,6 +30,7 @@ import picocli.CommandLine.Option;
 @Command(name = "nakagami",
          description = "Nakagami distribution.",
          subcommands = {
+             NakagamiCommand.Info.class,
              NakagamiCommand.Check.class,
              NakagamiCommand.PDF.class,
              NakagamiCommand.LPDF.class,
@@ -63,13 +64,13 @@ class NakagamiCommand extends AbstractDistributionCommand {
             private double[] omega = {3, 3, 3, 0.5, 1};
         }
 
-        /** Extend the options to set the default values for this 
distribution. */
-        static final class Options extends ContinuousDistributionOptions {
-            /** Set defaults. */
-            private Options() {
-                min = 0;
-                max = 4;
-            }
+        /**
+         * Create an instance.
+         *
+         * @param outputOptions the output options
+         */
+        BaseCommand(OutputOptions outputOptions) {
+            super(outputOptions);
         }
 
         @Override
@@ -91,27 +92,29 @@ class NakagamiCommand extends AbstractDistributionCommand {
         }
     }
 
-    /** Base command for the distribution that defines the parameters. */
+    /** Base command for the distribution that defines the parameters for 
probability functions. */
     private abstract static class ProbabilityCommand extends BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private Options distributionOptions = new Options();
-
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+        /** Default constructor. */
+        ProbabilityCommand() {
+            super(new ContinuousDistributionOptions(0, 4));
         }
     }
 
     /** Base command for the distribution that defines the parameters for 
inverse probability functions. */
     private abstract static class InverseProbabilityCommand extends 
BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private InverseContinuousDistributionOptions distributionOptions = new 
InverseContinuousDistributionOptions();
+        /** Default constructor. */
+        InverseProbabilityCommand() {
+            super(new InverseContinuousDistributionOptions());
+        }
+    }
 
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+    /** Information command. */
+    @Command(name = "info",
+             description = "Nakagami distribution information.")
+    static class Info extends BaseCommand {
+        /** Default constructor. */
+        Info() {
+            super(new OutputOptions());
         }
     }
 
diff --git 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/NormalCommand.java
 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/NormalCommand.java
index 3bafe4ba..7b785340 100644
--- 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/NormalCommand.java
+++ 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/NormalCommand.java
@@ -31,6 +31,7 @@ import picocli.CommandLine.Option;
          aliases = {"norm"},
          description = "Normal distribution.",
          subcommands = {
+             NormalCommand.Info.class,
              NormalCommand.Check.class,
              NormalCommand.PDF.class,
              NormalCommand.LPDF.class,
@@ -65,13 +66,13 @@ class NormalCommand extends AbstractDistributionCommand {
             private double[] sigma = {Math.sqrt(0.2), 1, Math.sqrt(5), 
Math.sqrt(0.5)};
         }
 
-        /** Extend the options to set the default values for this 
distribution. */
-        static final class Options extends ContinuousDistributionOptions {
-            /** Set defaults. */
-            private Options() {
-                min = -5;
-                max = 5;
-            }
+        /**
+         * Create an instance.
+         *
+         * @param outputOptions the output options
+         */
+        BaseCommand(OutputOptions outputOptions) {
+            super(outputOptions);
         }
 
         @Override
@@ -93,27 +94,29 @@ class NormalCommand extends AbstractDistributionCommand {
         }
     }
 
-    /** Base command for the distribution that defines the parameters. */
+    /** Base command for the distribution that defines the parameters for 
probability functions. */
     private abstract static class ProbabilityCommand extends BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private Options distributionOptions = new Options();
-
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+        /** Default constructor. */
+        ProbabilityCommand() {
+            super(new ContinuousDistributionOptions(-5, 5));
         }
     }
 
     /** Base command for the distribution that defines the parameters for 
inverse probability functions. */
     private abstract static class InverseProbabilityCommand extends 
BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private InverseContinuousDistributionOptions distributionOptions = new 
InverseContinuousDistributionOptions();
+        /** Default constructor. */
+        InverseProbabilityCommand() {
+            super(new InverseContinuousDistributionOptions());
+        }
+    }
 
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+    /** Information command. */
+    @Command(name = "info",
+             description = "Normal distribution information.")
+    static class Info extends BaseCommand {
+        /** Default constructor. */
+        Info() {
+            super(new OutputOptions());
         }
     }
 
diff --git 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/DistributionOptions.java
 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/OutputOptions.java
similarity index 60%
copy from 
commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/DistributionOptions.java
copy to 
commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/OutputOptions.java
index 850cb3d2..f49fa8d7 100644
--- 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/DistributionOptions.java
+++ 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/OutputOptions.java
@@ -20,12 +20,9 @@ import java.io.File;
 import picocli.CommandLine.Option;
 
 /**
- * Standard options for distribution commands.
+ * Standard output options for commands.
  */
-class DistributionOptions {
-
-    /** The distribution function. */
-    protected DistributionFunction distributionFunction;
+class OutputOptions {
 
     /** The field delimiter. */
     @Option(names = { "--delim" },
@@ -37,18 +34,4 @@ class DistributionOptions {
             paramLabel = "file",
             description = {"Output file (default: stdout)."})
     protected File outputFile;
-
-    /** The output file. */
-    @Option(names = { "--in" },
-            paramLabel = "file",
-            description = {"Input file containing points to evaluate.",
-                           "Overrides configured ranges."})
-    protected File inputFile;
-
-    /** Flag indicating if an exception should be suppressed during function 
evaluation.
-     * Exceptions are thrown by the ICDF and ISF functions when the input 
probability is not in
-     * the interval {@code [0, 1]}. */
-    @Option(names = { "--no-ex", "--no-exception" },
-            description = {"Suppress function evaluation exceptions (returns 
NaN or integer min value)."})
-    protected boolean suppressException;
 }
diff --git 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/ParetoCommand.java
 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/ParetoCommand.java
index ac7ef3a8..264133a1 100644
--- 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/ParetoCommand.java
+++ 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/ParetoCommand.java
@@ -30,6 +30,7 @@ import picocli.CommandLine.Option;
 @Command(name = "pareto",
          description = "Pareto distribution.",
          subcommands = {
+             ParetoCommand.Info.class,
              ParetoCommand.Check.class,
              ParetoCommand.PDF.class,
              ParetoCommand.LPDF.class,
@@ -64,13 +65,13 @@ class ParetoCommand extends AbstractDistributionCommand {
             private double[] shape = {3, 2, 1};
         }
 
-        /** Extend the options to set the default values for this 
distribution. */
-        static final class Options extends ContinuousDistributionOptions {
-            /** Set defaults. */
-            private Options() {
-                min = 0;
-                max = 5;
-            }
+        /**
+         * Create an instance.
+         *
+         * @param outputOptions the output options
+         */
+        BaseCommand(OutputOptions outputOptions) {
+            super(outputOptions);
         }
 
         @Override
@@ -92,27 +93,29 @@ class ParetoCommand extends AbstractDistributionCommand {
         }
     }
 
-    /** Base command for the distribution that defines the parameters. */
+    /** Base command for the distribution that defines the parameters for 
probability functions. */
     private abstract static class ProbabilityCommand extends BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private Options distributionOptions = new Options();
-
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+        /** Default constructor. */
+        ProbabilityCommand() {
+            super(new ContinuousDistributionOptions(0, 5));
         }
     }
 
     /** Base command for the distribution that defines the parameters for 
inverse probability functions. */
     private abstract static class InverseProbabilityCommand extends 
BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private InverseContinuousDistributionOptions distributionOptions = new 
InverseContinuousDistributionOptions();
+        /** Default constructor. */
+        InverseProbabilityCommand() {
+            super(new InverseContinuousDistributionOptions());
+        }
+    }
 
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+    /** Information command. */
+    @Command(name = "info",
+             description = "Pareto distribution information.")
+    static class Info extends BaseCommand {
+        /** Default constructor. */
+        Info() {
+            super(new OutputOptions());
         }
     }
 
diff --git 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/PascalCommand.java
 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/PascalCommand.java
index 3a121f34..a07234f8 100644
--- 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/PascalCommand.java
+++ 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/PascalCommand.java
@@ -31,6 +31,7 @@ import picocli.CommandLine.Option;
          aliases = {"negativebinomial", "nbin"},
          description = "Pascal distribution.",
          subcommands = {
+             PascalCommand.Info.class,
              PascalCommand.Check.class,
              PascalCommand.PMF.class,
              PascalCommand.LPMF.class,
@@ -67,13 +68,13 @@ class PascalCommand extends AbstractDistributionCommand {
             private double[] p = {1.0 / 11, 2.0 / 12, 3.0 / 13, 4.0 / 14, 5.0 
/ 15, 10.0 / 20, 20.0 / 30, 40.0 / 50};
         }
 
-        /** Extend the options to set the default values for this 
distribution. */
-        static final class Options extends DiscreteDistributionOptions {
-            /** Set defaults. */
-            private Options() {
-                min = 0;
-                max = 25;
-            }
+        /**
+         * Create an instance.
+         *
+         * @param outputOptions the output options
+         */
+        BaseCommand(OutputOptions outputOptions) {
+            super(outputOptions);
         }
 
         @Override
@@ -95,27 +96,29 @@ class PascalCommand extends AbstractDistributionCommand {
         }
     }
 
-    /** Base command for the distribution that defines the parameters. */
+    /** Base command for the distribution that defines the parameters for 
probability functions. */
     private abstract static class ProbabilityCommand extends BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private Options distributionOptions = new Options();
-
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+        /** Default constructor. */
+        ProbabilityCommand() {
+            super(new DiscreteDistributionOptions(0, 25));
         }
     }
 
     /** Base command for the distribution that defines the parameters for 
inverse probability functions. */
     private abstract static class InverseProbabilityCommand extends 
BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private InverseDiscreteDistributionOptions distributionOptions = new 
InverseDiscreteDistributionOptions();
+        /** Default constructor. */
+        InverseProbabilityCommand() {
+            super(new InverseDiscreteDistributionOptions());
+        }
+    }
 
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+    /** Information command. */
+    @Command(name = "info",
+             description = "Pascal distribution information.")
+    static class Info extends BaseCommand {
+        /** Default constructor. */
+        Info() {
+            super(new OutputOptions());
         }
     }
 
diff --git 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/PoissonCommand.java
 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/PoissonCommand.java
index 6b09d5d7..12054773 100644
--- 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/PoissonCommand.java
+++ 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/PoissonCommand.java
@@ -31,6 +31,7 @@ import picocli.CommandLine.Option;
          aliases = {"poiss"},
          description = "Poisson distribution.",
          subcommands = {
+             PoissonCommand.Info.class,
              PoissonCommand.Check.class,
              PoissonCommand.PMF.class,
              PoissonCommand.LPMF.class,
@@ -57,13 +58,13 @@ class PoissonCommand extends AbstractDistributionCommand {
             private double[] mean = {1, 4, 10};
         }
 
-        /** Extend the options to set the default values for this 
distribution. */
-        static final class Options extends DiscreteDistributionOptions {
-            /** Set defaults. */
-            private Options() {
-                min = 0;
-                max = 20;
-            }
+        /**
+         * Create an instance.
+         *
+         * @param outputOptions the output options
+         */
+        BaseCommand(OutputOptions outputOptions) {
+            super(outputOptions);
         }
 
         @Override
@@ -78,27 +79,29 @@ class PoissonCommand extends AbstractDistributionCommand {
         }
     }
 
-    /** Base command for the distribution that defines the parameters. */
+    /** Base command for the distribution that defines the parameters for 
probability functions. */
     private abstract static class ProbabilityCommand extends BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private Options distributionOptions = new Options();
-
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+        /** Default constructor. */
+        ProbabilityCommand() {
+            super(new DiscreteDistributionOptions(0, 20));
         }
     }
 
     /** Base command for the distribution that defines the parameters for 
inverse probability functions. */
     private abstract static class InverseProbabilityCommand extends 
BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private InverseDiscreteDistributionOptions distributionOptions = new 
InverseDiscreteDistributionOptions();
+        /** Default constructor. */
+        InverseProbabilityCommand() {
+            super(new InverseDiscreteDistributionOptions());
+        }
+    }
 
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+    /** Information command. */
+    @Command(name = "info",
+             description = "Poisson distribution information.")
+    static class Info extends BaseCommand {
+        /** Default constructor. */
+        Info() {
+            super(new OutputOptions());
         }
     }
 
diff --git 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/TCommand.java
 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/TCommand.java
index 1504ed6d..eb498376 100644
--- 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/TCommand.java
+++ 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/TCommand.java
@@ -30,6 +30,7 @@ import picocli.CommandLine.Option;
 @Command(name = "t",
          description = "T distribution.",
          subcommands = {
+             TCommand.Info.class,
              TCommand.Check.class,
              TCommand.PDF.class,
              TCommand.LPDF.class,
@@ -56,13 +57,13 @@ class TCommand extends AbstractDistributionCommand {
             private double[] df = {1, 2, 5, 1e10};
         }
 
-        /** Extend the options to set the default values for this 
distribution. */
-        static final class Options extends ContinuousDistributionOptions {
-            /** Set defaults. */
-            private Options() {
-                min = -5;
-                max = 5;
-            }
+        /**
+         * Create an instance.
+         *
+         * @param outputOptions the output options
+         */
+        BaseCommand(OutputOptions outputOptions) {
+            super(outputOptions);
         }
 
         @Override
@@ -77,27 +78,29 @@ class TCommand extends AbstractDistributionCommand {
         }
     }
 
-    /** Base command for the distribution that defines the parameters. */
+    /** Base command for the distribution that defines the parameters for 
probability functions. */
     private abstract static class ProbabilityCommand extends BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private Options distributionOptions = new Options();
-
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+        /** Default constructor. */
+        ProbabilityCommand() {
+            super(new ContinuousDistributionOptions(-5, 5));
         }
     }
 
     /** Base command for the distribution that defines the parameters for 
inverse probability functions. */
     private abstract static class InverseProbabilityCommand extends 
BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private InverseContinuousDistributionOptions distributionOptions = new 
InverseContinuousDistributionOptions();
+        /** Default constructor. */
+        InverseProbabilityCommand() {
+            super(new InverseContinuousDistributionOptions());
+        }
+    }
 
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+    /** Information command. */
+    @Command(name = "info",
+             description = "T distribution information.")
+    static class Info extends BaseCommand {
+        /** Default constructor. */
+        Info() {
+            super(new OutputOptions());
         }
     }
 
diff --git 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/TrapezoidalCommand.java
 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/TrapezoidalCommand.java
index d029fe29..f95b998b 100644
--- 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/TrapezoidalCommand.java
+++ 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/TrapezoidalCommand.java
@@ -31,6 +31,7 @@ import picocli.CommandLine.Option;
          aliases = {"trap"},
          description = "Trapezoidal distribution.",
          subcommands = {
+             TrapezoidalCommand.Info.class,
              TrapezoidalCommand.Check.class,
              TrapezoidalCommand.PDF.class,
              TrapezoidalCommand.LPDF.class,
@@ -82,13 +83,13 @@ class TrapezoidalCommand extends 
AbstractDistributionCommand {
             private double[] upper = {4, 3, 3};
         }
 
-        /** Extend the options to set the default values for this 
distribution. */
-        static final class Options extends ContinuousDistributionOptions {
-            /** Set defaults. */
-            private Options() {
-                min = -5;
-                max = 5;
-            }
+        /**
+         * Create an instance.
+         *
+         * @param outputOptions the output options
+         */
+        BaseCommand(OutputOptions outputOptions) {
+            super(outputOptions);
         }
 
         @Override
@@ -114,27 +115,29 @@ class TrapezoidalCommand extends 
AbstractDistributionCommand {
         }
     }
 
-    /** Base command for the distribution that defines the parameters. */
+    /** Base command for the distribution that defines the parameters for 
probability functions. */
     private abstract static class ProbabilityCommand extends BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private Options distributionOptions = new Options();
-
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+        /** Default constructor. */
+        ProbabilityCommand() {
+            super(new ContinuousDistributionOptions(-5, 5));
         }
     }
 
     /** Base command for the distribution that defines the parameters for 
inverse probability functions. */
     private abstract static class InverseProbabilityCommand extends 
BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private InverseContinuousDistributionOptions distributionOptions = new 
InverseContinuousDistributionOptions();
+        /** Default constructor. */
+        InverseProbabilityCommand() {
+            super(new InverseContinuousDistributionOptions());
+        }
+    }
 
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+    /** Information command. */
+    @Command(name = "info",
+             description = "Trapezoidal distribution information.")
+    static class Info extends BaseCommand {
+        /** Default constructor. */
+        Info() {
+            super(new OutputOptions());
         }
     }
 
diff --git 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/TriangularCommand.java
 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/TriangularCommand.java
index 3dc176d4..1598e389 100644
--- 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/TriangularCommand.java
+++ 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/TriangularCommand.java
@@ -31,6 +31,7 @@ import picocli.CommandLine.Option;
          aliases = {"tri"},
          description = "Triangular distribution.",
          subcommands = {
+             TriangularCommand.Info.class,
              TriangularCommand.Check.class,
              TriangularCommand.PDF.class,
              TriangularCommand.LPDF.class,
@@ -74,13 +75,13 @@ class TriangularCommand extends AbstractDistributionCommand 
{
             private double[] upper = {4, 5};
         }
 
-        /** Extend the options to set the default values for this 
distribution. */
-        static final class Options extends ContinuousDistributionOptions {
-            /** Set defaults. */
-            private Options() {
-                min = -5;
-                max = 5;
-            }
+        /**
+         * Create an instance.
+         *
+         * @param outputOptions the output options
+         */
+        BaseCommand(OutputOptions outputOptions) {
+            super(outputOptions);
         }
 
         @Override
@@ -104,27 +105,29 @@ class TriangularCommand extends 
AbstractDistributionCommand {
         }
     }
 
-    /** Base command for the distribution that defines the parameters. */
+    /** Base command for the distribution that defines the parameters for 
probability functions. */
     private abstract static class ProbabilityCommand extends BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private Options distributionOptions = new Options();
-
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+        /** Default constructor. */
+        ProbabilityCommand() {
+            super(new ContinuousDistributionOptions(-5, 5));
         }
     }
 
     /** Base command for the distribution that defines the parameters for 
inverse probability functions. */
     private abstract static class InverseProbabilityCommand extends 
BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private InverseContinuousDistributionOptions distributionOptions = new 
InverseContinuousDistributionOptions();
+        /** Default constructor. */
+        InverseProbabilityCommand() {
+            super(new InverseContinuousDistributionOptions());
+        }
+    }
 
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+    /** Information command. */
+    @Command(name = "info",
+             description = "Triangular distribution information.")
+    static class Info extends BaseCommand {
+        /** Default constructor. */
+        Info() {
+            super(new OutputOptions());
         }
     }
 
diff --git 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/TruncatedNormalCommand.java
 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/TruncatedNormalCommand.java
index f3831eb6..58ecca91 100644
--- 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/TruncatedNormalCommand.java
+++ 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/TruncatedNormalCommand.java
@@ -31,6 +31,7 @@ import picocli.CommandLine.Option;
          aliases = {"tnorm"},
          description = "Truncated normal distribution.",
          subcommands = {
+             TruncatedNormalCommand.Info.class,
              TruncatedNormalCommand.Check.class,
              TruncatedNormalCommand.PDF.class,
              TruncatedNormalCommand.LPDF.class,
@@ -83,13 +84,13 @@ class TruncatedNormalCommand extends 
AbstractDistributionCommand {
             private double[] upper = {MAX};
         }
 
-        /** Extend the options to set the default values for this 
distribution. */
-        static final class Options extends ContinuousDistributionOptions {
-            /** Set defaults. */
-            private Options() {
-                min = MIN;
-                max = MAX;
-            }
+        /**
+         * Create an instance.
+         *
+         * @param outputOptions the output options
+         */
+        BaseCommand(OutputOptions outputOptions) {
+            super(outputOptions);
         }
 
         @Override
@@ -116,27 +117,29 @@ class TruncatedNormalCommand extends 
AbstractDistributionCommand {
         }
     }
 
-    /** Base command for the distribution that defines the parameters. */
+    /** Base command for the distribution that defines the parameters for 
probability functions. */
     private abstract static class ProbabilityCommand extends BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private Options distributionOptions = new Options();
-
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+        /** Default constructor. */
+        ProbabilityCommand() {
+            super(new ContinuousDistributionOptions(MIN, MAX));
         }
     }
 
     /** Base command for the distribution that defines the parameters for 
inverse probability functions. */
     private abstract static class InverseProbabilityCommand extends 
BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private InverseContinuousDistributionOptions distributionOptions = new 
InverseContinuousDistributionOptions();
+        /** Default constructor. */
+        InverseProbabilityCommand() {
+            super(new InverseContinuousDistributionOptions());
+        }
+    }
 
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+    /** Information command. */
+    @Command(name = "info",
+             description = "Truncated normal distribution information.")
+    static class Info extends BaseCommand {
+        /** Default constructor. */
+        Info() {
+            super(new OutputOptions());
         }
     }
 
diff --git 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/UniformContinuousCommand.java
 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/UniformContinuousCommand.java
index b00e0aa2..f7218faa 100644
--- 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/UniformContinuousCommand.java
+++ 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/UniformContinuousCommand.java
@@ -31,6 +31,7 @@ import picocli.CommandLine.Option;
          aliases = {"uniform", "rectangular"},
          description = "Continuous uniform distribution.",
          subcommands = {
+             UniformContinuousCommand.Info.class,
              UniformContinuousCommand.Check.class,
              UniformContinuousCommand.PDF.class,
              UniformContinuousCommand.LPDF.class,
@@ -66,13 +67,13 @@ class UniformContinuousCommand extends 
AbstractDistributionCommand {
             private double[] upper = {3, 5, 2};
         }
 
-        /** Extend the options to set the default values for this 
distribution. */
-        static final class Options extends ContinuousDistributionOptions {
-            /** Set defaults. */
-            private Options() {
-                min = -5;
-                max = 5;
-            }
+        /**
+         * Create an instance.
+         *
+         * @param outputOptions the output options
+         */
+        BaseCommand(OutputOptions outputOptions) {
+            super(outputOptions);
         }
 
         @Override
@@ -94,27 +95,29 @@ class UniformContinuousCommand extends 
AbstractDistributionCommand {
         }
     }
 
-    /** Base command for the distribution that defines the parameters. */
+    /** Base command for the distribution that defines the parameters for 
probability functions. */
     private abstract static class ProbabilityCommand extends BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private Options distributionOptions = new Options();
-
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+        /** Default constructor. */
+        ProbabilityCommand() {
+            super(new ContinuousDistributionOptions(-5, 5));
         }
     }
 
     /** Base command for the distribution that defines the parameters for 
inverse probability functions. */
     private abstract static class InverseProbabilityCommand extends 
BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private InverseContinuousDistributionOptions distributionOptions = new 
InverseContinuousDistributionOptions();
+        /** Default constructor. */
+        InverseProbabilityCommand() {
+            super(new InverseContinuousDistributionOptions());
+        }
+    }
 
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+    /** Information command. */
+    @Command(name = "info",
+             description = "Continuous uniform distribution information.")
+    static class Info extends BaseCommand {
+        /** Default constructor. */
+        Info() {
+            super(new OutputOptions());
         }
     }
 
diff --git 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/UniformDiscreteCommand.java
 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/UniformDiscreteCommand.java
index ad86d5c5..c62ca21f 100644
--- 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/UniformDiscreteCommand.java
+++ 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/UniformDiscreteCommand.java
@@ -30,6 +30,7 @@ import picocli.CommandLine.Option;
 @Command(name = "unid",
          description = "Discrete uniform distribution.",
          subcommands = {
+             UniformDiscreteCommand.Info.class,
              UniformDiscreteCommand.Check.class,
              UniformDiscreteCommand.PMF.class,
              UniformDiscreteCommand.LPMF.class,
@@ -65,13 +66,13 @@ class UniformDiscreteCommand extends 
AbstractDistributionCommand {
             private int[] upper = {5, 4};
         }
 
-        /** Extend the options to set the default values for this 
distribution. */
-        static final class Options extends DiscreteDistributionOptions {
-            /** Set defaults. */
-            private Options() {
-                min = -5;
-                max = 5;
-            }
+        /**
+         * Create an instance.
+         *
+         * @param outputOptions the output options
+         */
+        BaseCommand(OutputOptions outputOptions) {
+            super(outputOptions);
         }
 
         @Override
@@ -93,27 +94,29 @@ class UniformDiscreteCommand extends 
AbstractDistributionCommand {
         }
     }
 
-    /** Base command for the distribution that defines the parameters. */
+    /** Base command for the distribution that defines the parameters for 
probability functions. */
     private abstract static class ProbabilityCommand extends BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private Options distributionOptions = new Options();
-
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+        /** Default constructor. */
+        ProbabilityCommand() {
+            super(new ContinuousDistributionOptions(-5, 5));
         }
     }
 
     /** Base command for the distribution that defines the parameters for 
inverse probability functions. */
     private abstract static class InverseProbabilityCommand extends 
BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private InverseDiscreteDistributionOptions distributionOptions = new 
InverseDiscreteDistributionOptions();
+        /** Default constructor. */
+        InverseProbabilityCommand() {
+            super(new InverseContinuousDistributionOptions());
+        }
+    }
 
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+    /** Information command. */
+    @Command(name = "info",
+             description = "Discrete uniform distribution information.")
+    static class Info extends BaseCommand {
+        /** Default constructor. */
+        Info() {
+            super(new OutputOptions());
         }
     }
 
diff --git 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/WeibullCommand.java
 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/WeibullCommand.java
index 0bfef3cc..deef8086 100644
--- 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/WeibullCommand.java
+++ 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/WeibullCommand.java
@@ -31,6 +31,7 @@ import picocli.CommandLine.Option;
          aliases = {"wbl"},
          description = "Weibull distribution.",
          subcommands = {
+             WeibullCommand.Info.class,
              WeibullCommand.Check.class,
              WeibullCommand.PDF.class,
              WeibullCommand.LPDF.class,
@@ -64,13 +65,13 @@ class WeibullCommand extends AbstractDistributionCommand {
             private double[] beta = {1};
         }
 
-        /** Extend the options to set the default values for this 
distribution. */
-        static final class Options extends ContinuousDistributionOptions {
-            /** Set defaults. */
-            private Options() {
-                min = 0;
-                max = 2.5;
-            }
+        /**
+         * Create an instance.
+         *
+         * @param outputOptions the output options
+         */
+        BaseCommand(OutputOptions outputOptions) {
+            super(outputOptions);
         }
 
         @Override
@@ -92,27 +93,29 @@ class WeibullCommand extends AbstractDistributionCommand {
         }
     }
 
-    /** Base command for the distribution that defines the parameters. */
+    /** Base command for the distribution that defines the parameters for 
probability functions. */
     private abstract static class ProbabilityCommand extends BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private Options distributionOptions = new Options();
-
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+        /** Default constructor. */
+        ProbabilityCommand() {
+            super(new ContinuousDistributionOptions(0, 2.5));
         }
     }
 
     /** Base command for the distribution that defines the parameters for 
inverse probability functions. */
     private abstract static class InverseProbabilityCommand extends 
BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private InverseContinuousDistributionOptions distributionOptions = new 
InverseContinuousDistributionOptions();
+        /** Default constructor. */
+        InverseProbabilityCommand() {
+            super(new InverseContinuousDistributionOptions());
+        }
+    }
 
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+    /** Information command. */
+    @Command(name = "info",
+             description = "Weibull distribution information.")
+    static class Info extends BaseCommand {
+        /** Default constructor. */
+        Info() {
+            super(new OutputOptions());
         }
     }
 
diff --git 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/ZetaCommand.java
 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/ZetaCommand.java
index 4cf6145c..53d91f58 100644
--- 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/ZetaCommand.java
+++ 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/ZetaCommand.java
@@ -30,6 +30,7 @@ import picocli.CommandLine.Option;
 @Command(name = "zeta",
          description = "Zeta distribution.",
          subcommands = {
+             ZetaCommand.Info.class,
              ZetaCommand.Check.class,
              ZetaCommand.PMF.class,
              ZetaCommand.LPMF.class,
@@ -43,7 +44,7 @@ class ZetaCommand extends AbstractDistributionCommand {
     /** Base command for the distribution that defines the parameters. */
     private abstract static class BaseCommand extends 
AbstractDiscreteDistributionCommand {
         /** Distribution parameters. */
-        @ArgGroup(validate = false, heading = "Distribution parameters:%n", 
order = 1)
+        @ArgGroup(validate = false, heading = HEADING_DISTRIBUTION_PARAMETERS, 
order = 1)
         private Params params = new Params();
 
         /** Parameters class. */
@@ -56,13 +57,13 @@ class ZetaCommand extends AbstractDistributionCommand {
             private double[] e = {1.1, 2.1, 3.1};
         }
 
-        /** Extend the options to set the default values for this 
distribution. */
-        static final class Options extends DiscreteDistributionOptions {
-            /** Set defaults. */
-            private Options() {
-                min = 1;
-                max = 10;
-            }
+        /**
+         * Create an instance.
+         *
+         * @param outputOptions the output options
+         */
+        BaseCommand(OutputOptions outputOptions) {
+            super(outputOptions);
         }
 
         @Override
@@ -77,27 +78,29 @@ class ZetaCommand extends AbstractDistributionCommand {
         }
     }
 
-    /** Base command for the distribution that defines the parameters. */
+    /** Base command for the distribution that defines the parameters for 
probability functions. */
     private abstract static class ProbabilityCommand extends BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private Options distributionOptions = new Options();
-
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+        /** Default constructor. */
+        ProbabilityCommand() {
+            super(new DiscreteDistributionOptions(1, 10));
         }
     }
 
     /** Base command for the distribution that defines the parameters for 
inverse probability functions. */
     private abstract static class InverseProbabilityCommand extends 
BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private InverseDiscreteDistributionOptions distributionOptions = new 
InverseDiscreteDistributionOptions();
+        /** Default constructor. */
+        InverseProbabilityCommand() {
+            super(new InverseDiscreteDistributionOptions());
+        }
+    }
 
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+    /** Information command. */
+    @Command(name = "info",
+             description = "Zeta distribution information.")
+    static class Info extends BaseCommand {
+        /** Default constructor. */
+        Info() {
+            super(new OutputOptions());
         }
     }
 
diff --git 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/ZipfCommand.java
 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/ZipfCommand.java
index 9f815b8f..dc035905 100644
--- 
a/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/ZipfCommand.java
+++ 
b/commons-statistics-examples/examples-distribution/src/main/java/org/apache/commons/statistics/examples/distribution/ZipfCommand.java
@@ -30,6 +30,7 @@ import picocli.CommandLine.Option;
 @Command(name = "zipf",
          description = "Zipf distribution.",
          subcommands = {
+             ZipfCommand.Info.class,
              ZipfCommand.Check.class,
              ZipfCommand.PMF.class,
              ZipfCommand.LPMF.class,
@@ -63,13 +64,13 @@ class ZipfCommand extends AbstractDistributionCommand {
             private double[] e = {1, 2, 3, 4};
         }
 
-        /** Extend the options to set the default values for this 
distribution. */
-        static final class Options extends DiscreteDistributionOptions {
-            /** Set defaults. */
-            private Options() {
-                min = 1;
-                max = 10;
-            }
+        /**
+         * Create an instance.
+         *
+         * @param outputOptions the output options
+         */
+        BaseCommand(OutputOptions outputOptions) {
+            super(outputOptions);
         }
 
         @Override
@@ -91,27 +92,30 @@ class ZipfCommand extends AbstractDistributionCommand {
         }
     }
 
-    /** Base command for the distribution that defines the parameters. */
-    private abstract static class ProbabilityCommand extends BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private Options distributionOptions = new Options();
 
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+    /** Base command for the distribution that defines the parameters for 
probability functions. */
+    private abstract static class ProbabilityCommand extends BaseCommand {
+        /** Default constructor. */
+        ProbabilityCommand() {
+            super(new DiscreteDistributionOptions(1, 10));
         }
     }
 
     /** Base command for the distribution that defines the parameters for 
inverse probability functions. */
     private abstract static class InverseProbabilityCommand extends 
BaseCommand {
-        /** The distribution options. */
-        @ArgGroup(validate = false, heading = "Evaluation options:%n", order = 
2)
-        private InverseDiscreteDistributionOptions distributionOptions = new 
InverseDiscreteDistributionOptions();
+        /** Default constructor. */
+        InverseProbabilityCommand() {
+            super(new InverseDiscreteDistributionOptions());
+        }
+    }
 
-        @Override
-        protected DistributionOptions getDistributionOptions() {
-            return distributionOptions;
+    /** Information command. */
+    @Command(name = "info",
+             description = "Zipf distribution information.")
+    static class Info extends BaseCommand {
+        /** Default constructor. */
+        Info() {
+            super(new OutputOptions());
         }
     }
 

Reply via email to