calculator/src/GraphingInterfaces/GraphingEnums.h
2020-01-03 15:06:14 -08:00

576 lines
17 KiB
C++

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#pragma once
namespace Graphing
{
enum class LocalizationType
{
Unknown,
DecimalPointAndListComma,
DecimalPointAndListSemicolon,
DecimalCommaAndListSemicolon
};
enum class EquationParsingMode
{
// Solving an equation. At least one equal sign is required
SolveEquation,
// Graphing an equation. At least one equal sign is required
GraphEquation,
// Not expecting an equation. No equal sign is allowed
NonEquation,
// Accept zero or more equal signs
DoNotCare
};
enum class FormatType
{
// This format is not very human-readable, but best for machine processing and unit test.
// The meaning of an expression is precise, there is no need for parentheses, and it's easy to parse.
// While other serializers may contain little tweaks to make the UI component work as expected, this
// format doesn't change often because no real UI uses it.
// Example: Sum[1,Divide[2,x]]
Formula,
// Similar to Formula, except the variables are in the format of Var(0), Var(1), ... instead of in their names.
// Used in serialization only (CasContext.FormatOptions) but not in parsing (CasContext.ParsingOptions)
// Example: Sum[1,Divide[2,Var(0)]]
InvariantFormula,
// Similar to Formula, except the aggregates (grouping parentheses) are silently removed during serialization.
// The primary usage for this format is in internal test cases.
// When used in parsing, it's identical to Formula
// Example: Sum[1,Divide[2,x]]
FormulaWithoutAggregate,
// This format is the most human-readable one. Can be used in command line applications or application that accept
// and displays linear syntax. Also, the RichEdit wrapper returns linear syntax and it should be parsed with Linear format type.
// Example: 1+2/x
Linear,
// This format is similar to linear format, but during serialization it uses ASCII characters only (except for variable
// named specified by the user) and can round trip back to the linear parser.
//
// When used in parsing it's identical to Linear.
LinearInput,
// The standard MathML format. Note that the math engine can only parse a subset of the syntax in the MathML specification.
// Example: <math><mn>1</mn><mo>+</mo><mfrac><mn>2</mn><mi>x</mi></mfrac></math>
MathML,
// Same as MathML, except this format type won't generate the root element <math> .
// Used in serialization only (CasContext.FormatOptions) but not in parsing (CasContext.ParsingOptions)
// Example: <mn>1</mn><mo>+</mo><mfrac><mn>2</mn><mi>x</mi></mfrac>
MathMLNoWrapper,
// This format type is for the RichEdit wrapper to render math in RichEdit.
//
// Used in serialization only (CasContext.FormatOptions) but not in parsing (CasContext.ParsingOptions)
// Example: 1 + \frac{2,x}
MathRichEdit,
// This format type is for the RichEdit wrapper to render math in RichEdit.
// It's same with MathRichEdit format with one exception: fractions are rendered
// horizontally instead of vertically. This is a better choice if the display area
// is confined with a small height.
//
// Used in serialization only (CasContext.FormatOptions) but not in parsing (CasContext.ParsingOptions)
// Example: 1 + x/(2 a)
InlineMathRichEdit,
// The most compact format. Uses binary data. Like Format, it guarantees round trip between parsing and serialization.
Binary,
// Similar to Binary, except variableIds are used instead of variable name.
InvariantBinary,
// This is the base-64 encoded Binary format
Base64,
// This is the base-64 encoded InvariantBinary format.
InvariantBase64,
// Latex format
// Example: \frac{1}{2}
Latex
};
// Specify on what number field the evaluation should be performed: Real or Complex.
enum class EvalNumberField
{
// This is invalid setting.
Invalid,
// Evaluation should be performed on Real number field
Real,
// Evaluation should be performed on Complex number field
Complex
};
// Specify the evaluation direction: Expand, Factor or Neutral (neither Expand nor Factor)
enum class EvalExpandMode
{
// Neither Expand nor Factor
Neutral,
// To expand during evaluation
Expand,
// To factor during evaluation
Factor
};
// Specify the current trigonometry unit mode: Radians, Degrees, Grads. This has effect on these trig operators:
// Sin Cos Tan Cot Sec Csc
// ASin ACos ATan ACot ASec ACsc.
// It has NO effect on hyperbolic trig operators (same behavior as Windows Calc), and any other operators.
enum class EvalTrigUnitMode
{
// Invalid value.
Invalid,
// Default trig unit. Period of sin is 2pi
Radians,
// Degrees as trig unit. Period of sin is 360 degrees
Degrees,
// Grads as trig unit. Period of sin is 400 grads
Grads
};
// Specifies the type of contextual action
enum class ContextualActionType
{
// The input didn't generate any contextual action
None,
// Solve equation
SolveEquation,
// perform comparison
Compare,
// Expand the expression
Expand,
// Perform a 2D graphing
Graph2D,
// Perform a 2D graphing on all items in the list
ListGraph2D,
// Perform 2D graphing of the two functions on both side of the equal sign or inequality sign
GraphBothSides2D,
// Perform a 3D graphing
Graph3D,
// Perform 3D graphing of the two functions on both side of the equal sign or inequality sign
GraphBothSides3D,
// Perform 2D inequality graphing
GraphInequality,
// Perform assignment
Assign,
// Factor the expression
Factor,
// Compute the derivate of the expression
Deriv,
// Compute the integral of the expression
IndefiniteIntegral,
// Perform 2D graph
Graph2DExpression,
// Perform 3D graph
Graph3DExpression,
// solve the inequality
SolveInequality,
// calculate/simplify the expression
Calculate,
// round of the number
Round,
// floor of the number
Floor,
// ceiling of the number
Ceiling,
// The bit mask for matrix related contextual action types. if (type & MatrixMask)!=0 then the type is matrix related
MatrixMask,
// Compute the determinant of the matrix
MatrixDeterminant,
// Compute the inverse of the matrix
MatrixInverse,
// Compute the trace of the matrix
MatrixTrace,
// Compute the transpose of the matrix
MatrixTranspose,
// Compute the size of the matrix
MatrixSize,
// Compute the reduce of the matrix
MatrixReduce,
// The bit mask for list related contextual action types. if (type & ListMask)!=0 then the type is list related
ListMask,
// Sort the list
ListSort,
// Compute the mean of the list
ListMean,
// Compute the median of the list
ListMedian,
// Compute the mode of the list
ListMode,
// Compute the LCM (least common multiplier) of the list
ListLcm,
// Compute the GCF (greatest common factor) of the list
ListGcf,
// Compute the sum of the list elements
ListSum,
// Compute the product of the list elements
ListProduct,
// Compute the max of the list elements
ListMax,
// Compute the min of the list elements
ListMin,
// Compute the variance of the list elements
ListVariance,
// Compute the standard deviation of the list elements
ListStdDev,
// Show complete (verbose) solution
ShowVerboseSolution,
// bit mask of action type. Can be used to remove the Informational flag
TypeMask, // mask to get the type
// A flag that can be added onto any type. This is informational only that explains what the straight input would do.
// No action should be performed
Informational
};
enum class MathActionCategoryType
{
Unknown,
Calculate,
Solve,
Integrate,
Differentiate,
Algebra,
Matrix,
List,
Graph
};
enum class StepSequenceType
{
None,
Text,
Expression,
NewLine,
NewStep,
Conditional,
Composite,
Goto,
Call,
Return,
Stop,
Error,
GotoTemp
};
enum class FormatVerbosityMode
{
Verbose,
Simple
};
namespace Renderer
{
// Used to indicate what action should be performed to change the range.
enum class ChangeRangeAction
{
// Zoom in on all axes by the predefined ratio
ZoomIn,
// Zoom out on all axes by the predefined ratio
ZoomOut,
// Zoom out on X axis only, leave the range of Y (and Z in 3D) unchanged
WidenX,
// Zoom in on X axis only, leave the range of Y (and Z in 3D) unchanged
ShrinkX,
// Zoom out on Y axis only, leave the range of X (and Z in 3D) unchanged
WidenY,
// Zoom in on Y axis only, leave the range of X (and Z in 3D) unchanged
ShrinkY,
// Zoom out on Z axis only, leave the range of X and Y unchanged. Apply to 3D graph only but not 2D graph.
WidenZ,
// Zoom in on Z axis only, leave the range of X and Y unchanged. Apply to 3D graph only but not 2D graph.
ShrinkZ,
// Move the view window of the graph towards the negative X axis.
MoveNegativeX,
// Move the view window of the graph towards the positive X axis.
MovePositiveX,
// Move the view window of the graph towards the negative Y axis.
MoveNegativeY,
// Move the view window of the graph towards the positive Y axis.
MovePositiveY,
// Move the view window of the graph towards the negative Z axis.
MoveNegativeZ,
// Move the view window of the graph towards the positive Z axis.
MovePositiveZ,
// Zoom in on all axes by the predefined ratio. The ratio is smaller than used in ZoomIn result in a smoother motion
SmoothZoomIn,
// Zoom out on all axes by the predefined ratio. The ratio is smaller than used in ZoomIn result in a smoother motion
SmoothZoomOut,
// Zoom in on all axes by the predefined ratio
PinchZoomIn,
// Zoom out on all axes by the predefined ratio
PinchZoomOut
};
enum class LineStyle
{
Solid,
Dot,
Dash,
DashDot,
DashDotDot
};
}
namespace Analyzer
{
// Graph Analyzer Messages
enum GraphAnalyzerMessage
{
// "No data"
GraphAnalyzerMessage_None = 0,
// "No zeros"
GraphAnalyzerMessage_NoZeros = 1,
// "No y-intercept"
GraphAnalyzerMessage_NoYIntercept = 2,
// "No minima"
GraphAnalyzerMessage_NoMinima = 3,
// "No maxima"
GraphAnalyzerMessage_NoMaxima = 4,
// "No inflection points"
GraphAnalyzerMessage_NoInflectionPoints = 5,
// "No vertical asymptotes"
GraphAnalyzerMessage_NoVerticalAsymptotes = 6,
// "No horizontal asymptotes"
GraphAnalyzerMessage_NoHorizontalAsymptotes = 7,
// "No oblique asymptotes"
GraphAnalyzerMessage_NoObliqueAsymptotes = 8,
// "Not able to calculate"
GraphAnalyzerMessage_NotAbleToCalculate = 9,
// "Not able to mark all graph features"
GraphAnalyzerMessage_NotAbleToMarkAllGraphFeatures = 10,
// These features are too complex for {APPLICATION_NAME} to calculate
GraphAnalyzerMessage_TheseFeaturesAreTooComplexToCalculate = 11,
// "This feature is too complex for {APPLICATION_NAME} to calculate"
GraphAnalyzerMessage_ThisFeatureIsTooComplexToCalculate = 12
};
// define which data should be filled into result object
enum AnalysisType
{
// fill domain data
AnalysisType_Domain = 0,
// fill range data
AnalysisType_Range = 1,
// fill parity data
AnalysisType_Parity = 2,
// fill zeros
AnalysisType_Zeros = 3,
// fill interception with y axis
AnalysisType_YIntercept = 4,
// fill minima
AnalysisType_Minima = 5,
// fill maxima
AnalysisType_Maxima = 6,
// fill inflection points
AnalysisType_InflectionPoints = 7,
// fill vertical asymptotes
AnalysisType_VerticalAsymptotes = 8,
// fill horizontal asymptotes
AnalysisType_HorizontalAsymptotes = 9,
// fill oblique asymptotes
AnalysisType_ObliqueAsymptotes = 10,
// fill monotonicity
AnalysisType_Monotonicity = 11,
// fill period
AnalysisType_Period = 12
};
// define which additional data should be calculated
enum class PerformAnalysisType
{
// Calculate nothing
// PerformAnalysisType_None = 0x0,
// Calculate domain data
PerformAnalysisType_Domain = 0x01,
// Calculate range data
PerformAnalysisType_Range = 0x02,
// Calculate parity data
PerformAnalysisType_Parity = 0x04,
// Calculate zeros and interception with y axis
PerformAnalysisType_InterceptionPointsWithXAndYAxis = 0x08,
// Calculate Extrema and inflection points
PerformAnalysisType_CriticalPoints = 0x10,
// Calculate asymptotes
PerformAnalysisType_Asymptotes = 0x20,
// Calculate monotonicity
PerformAnalysisType_Monotonicity = 0x40,
// Calculate period
PerformAnalysisType_Period = 0x80,
// Calculate all additional data
PerformAnalysisType_All = 0xFF
};
// function parity for function analysis
enum class FunctionParityType
{
// parity not calculated or not possible to calculate
FunctionParityType_Unknown = 0,
// parity is odd
FunctionParityType_Odd = 1,
// parity is even
FunctionParityType_Even = 2,
// function is not odd nor even
FunctionParityType_None = 3
};
// monotonicity direction for function analysis
enum class FunctionMonotonicityType
{
// unknown or not calculated
FunctionMonotonicityType_Unknown = 0,
// ascending monotonicity on interval
FunctionMonotonicityType_Ascending = 1,
// descending monotonicity on interval
FunctionMonotonicityType_Descending = 2,
// constant monotonicity on interval
FunctionMonotonicityType_Constant = 3
};
// asymptote description for function analysis
enum class AsymptoteType
{
// unknown or not calculated
AsymptoteType_Unknown = 0,
// when x goes to positive infinity
AsymptoteType_PositiveInfinity = 1,
// when x goes to negative infinity
AsymptoteType_NegativeInfinity = 2,
// when x goes to positive or negative infinity
AsymptoteType_AnyInfinity = 3
};
// function periodicity for function analysis
enum class FunctionPeriodicityType
{
// periodicity not calculated or not possible to calculate
FunctionPeriodicityType_Unknown = 0,
// parity is odd
FunctionPeriodicityType_Periodic = 1,
// parity is even
FunctionPeriodicityType_NotPeriodic = 2
};
}
}