/// <summary> /// Returns <see cref="QsVector"/> from to... with specified interval /// </summary> /// <param name="from"></param> /// <param name="to"></param> /// <param name="step"></param> /// <returns></returns> public static QsValue Range(QsParameter from, QsParameter to, QsParameter step) { Contract.Requires(from.QsNativeValue is QsScalar); Contract.Requires(to.QsNativeValue is QsScalar); Contract.Requires(step.QsNativeValue is QsScalar); double fd = ((QsScalar)from.QsNativeValue).NumericalQuantity.Value; double td = ((QsScalar)to.QsNativeValue).NumericalQuantity.Value; double stepd = ((QsScalar)step.QsNativeValue).NumericalQuantity.Value; QsVector vec = new QsVector(); if (td >= fd) { for (double vl = fd; vl <= td; vl += stepd) { vec.AddComponent(vl); } } else { for (double vl = fd; vl >= td; vl -= stepd) { vec.AddComponent(vl); } } return(vec); }
public static QsValue Atan2(QsParameter x, QsParameter y) { var xs = x.QsNativeValue as QsScalar; var ys = y.QsNativeValue as QsScalar; double r = System.Math.Atan2(ys.NumericalQuantity.Value, xs.NumericalQuantity.Value); return(r.ToQuantity().ToScalarValue()); }
public static QsValue Speak( [QsParamInfo(QsParamType.Text)] QsParameter text ) { System.Speech.Synthesis.SpeechSynthesizer ss = new System.Speech.Synthesis.SpeechSynthesizer(); ss.SpeakAsync(text.UnknownValueText); return(null); }
public static QsValue Name(QsParameter value) { QsScalar s = value.QsNativeValue as QsScalar; if (s != null) { return(new QsText(s.Unit.QuantityType.Name.TrimEnd('`', '1').ToString())); } return(new QsText("Works on scalar quantities")); }
public static QsValue Transpose(QsParameter matrix) { if (matrix.QsNativeValue is QsMatrix) { return(((QsMatrix)matrix.QsNativeValue).Transpose()); } else { throw new QsInvalidInputException("Expected matrix input"); } }
public static QsValue Determinant(QsParameter matrix) { if (matrix.QsNativeValue is QsMatrix) { return(QsMatrix.Determinant(((QsMatrix)matrix.QsNativeValue))); } else { throw new QsInvalidInputException("Expected matrix input"); } }
/// <summary> /// Returns the dimension of value quantity. /// </summary> /// <param name="value"></param> /// <returns></returns> public static QsValue Dimension(QsParameter value) { QsScalar s = value.QsNativeValue as QsScalar; if (s != null) { return(new QsText(s.Unit.UnitDimension.ToString())); } return(new QsText("Works on scalar quantities")); }
/// <summary> /// Returns the name of the quantity associated with this value /// </summary> /// <param name="value"></param> /// <returns></returns> public static QsValue FromValue(QsParameter value) { QsScalar s = value.QsNativeValue as QsScalar; if (s != null) { string qt = s.Unit.QuantityType.Name; return(new QsText(qt.Substring(0, qt.Length - 2))); } return(new QsText("Works on scalar quantities")); }
/// <summary> /// Resturns the name of the quantity associated with this dimension /// </summary> /// <param name="dimension"></param> /// <returns></returns> public static QsValue FromDimension(QsParameter dimension) { string ss = dimension.ParameterRawText; if (dimension.QsNativeValue is QsText) { ss = ((QsText)dimension.QsNativeValue).Text; } var q = QuantityDimension.Parse(ss); string qt = QuantityDimension.GetQuantityTypeFrom(q).Name; return(new QsText(qt.Substring(0, qt.Length - 2))); }
public static QsValue InvertedQuantityName(QsParameter value) { QsScalar s = value.QsNativeValue as QsScalar; if (s != null) { var InvertedDimension = s.Unit.UnitDimension.Invert(); var qp = QsParameter.MakeParameter(null, InvertedDimension.ToString()); return(Quantity.FromDimension(qp)); } return(new QsText("Works on scalar quantities")); }
public static QsValue MessageBox(QsParameter text) { IWin32Window fw = null; try { fw = ForegroundWindow.Instance; } catch { } DialogResult d = System.Windows.Forms.MessageBox.Show( fw, text.UnknownValueText, "Quantity System" ); return(((int)d).ToScalarValue()); //return d; }
/// <summary> /// Returns <see cref="QsVector"/> with constant value /// </summary> /// <param name="count"></param> /// <param name="constant"></param> /// <returns></returns> public static QsValue ConstantRange(QsParameter count, QsParameter constant) { Contract.Requires(count.QsNativeValue is QsScalar); Contract.Requires(constant.QsNativeValue is QsScalar); double countd = ((QsScalar)count.QsNativeValue).NumericalQuantity.Value; int icount = (int)countd; QsVector v = new QsVector(icount); for (int i = 0; i < icount; i++) { v.AddComponent((QsScalar)constant.QsNativeValue); } return(v); }
public static QsValue MessageBox( QsParameter text, [QsParamInfo(QsParamType.Text)] QsParameter caption ) { IWin32Window fw = null; try { fw = ForegroundWindow.Instance; } catch { } DialogResult d = System.Windows.Forms.MessageBox.Show( fw, text.UnknownValueText, caption.UnknownValueText ); return(((int)d).ToScalarValue()); }
public static QsValue Min(QsParameter value) { if (value.QsNativeValue is QsScalar) { return(value.QsNativeValue); } if (value.QsNativeValue is QsVector) { var vector = value.QsNativeValue as QsVector; return((QsValue)vector.Min()); } if (value.QsNativeValue is QsMatrix) { var matrix = value.QsNativeValue as QsMatrix; return((QsValue)matrix.ToArray().Min()); } throw new QsException("Not implemented for above matrix"); }
/// <summary> /// Returns a value from the dimension of this quantity. /// </summary> /// <param name="dimension"></param> /// <param name="value"></param> /// <returns></returns> public static QsValue FromDimension(QsParameter dimension, QsParameter value) { string ss = dimension.ParameterRawText; if (dimension.QsNativeValue is QsText) { ss = ((QsText)dimension.QsNativeValue).Text; } var q = QuantityDimension.Parse(ss); var unit = QuantitySystem.Units.Unit.DiscoverUnit(q); var qval = unit.GetThisUnitQuantity <double>(double.Parse(value.ParameterRawText, CultureInfo.InvariantCulture)); var qs = new QsScalar(ScalarTypes.NumericalQuantity) { NumericalQuantity = qval }; return(qs); }
public static QsValue FromName(QsParameter name, QsParameter value) { string ss = name.ParameterRawText; if (name.QsNativeValue is QsText) { ss = ((QsText)name.QsNativeValue).Text; } var qval = AnyQuantity <double> .Parse(ss); qval.Unit = Unit.DiscoverUnit(qval); qval.Value = double.Parse(value.ParameterRawText, CultureInfo.InvariantCulture); var qs = new QsScalar(ScalarTypes.NumericalQuantity) { NumericalQuantity = qval }; return(qs); }
public static QsValue ReadBinaryFile([QsParamInfo(QsParamType.Text)] QsParameter fileName) { byte[] data = File.ReadAllBytes(fileName.UnknownValueText); return(data.ToQsVector()); }
public static QsValue PrintLine([QsParamInfo(QsParamType.Text)] QsParameter val) { Console.WriteLine(val.UnknownValueText); return(null); }
/// <summary> /// Returns the count of vector /// </summary> /// <param name="vector"></param> /// <returns></returns> public static QsValue Count(QsParameter vector) { Contract.Requires(vector.QsNativeValue is QsVector); return(((QsVector)vector.QsNativeValue).Count.ToScalarValue()); }
public static QsValue Sqrt(QsParameter x) { var xs = x.QsNativeValue as QsValue; return(xs.PowerOperation("0.5".ToScalar())); }
public static QsValue Log(QsParameter val, QsParameter newBase) { if (val.IsQsValue) { if (val.ParameterValue is QsScalar) { AnyQuantity <double> q = ((QsScalar)val.ParameterValue).NumericalQuantity; if (q.Dimension.IsDimensionless) { double r = System.Math.Log(q.Value, ((QsScalar)newBase.ParameterValue).NumericalQuantity.Value); return(r.ToQuantity().ToScalarValue()); } else { throw new QsInvalidInputException("Non dimensionless number"); } } else if (val.ParameterValue is QsVector) { QsVector vec = (QsVector)val.ParameterValue; QsVector rv = new QsVector(vec.Count); foreach (QsScalar var in vec) { if (var.NumericalQuantity.Dimension.IsDimensionless) { double r = System.Math.Log(var.NumericalQuantity.Value, ((QsScalar)newBase.ParameterValue).NumericalQuantity.Value); rv.AddComponent(r.ToQuantity().ToScalar()); } else { throw new QsInvalidInputException("Non dimensionless component"); } } return(rv); } else if (val.ParameterValue is QsMatrix) { QsMatrix mat = (QsMatrix)val.ParameterValue; QsMatrix rm = new QsMatrix(); foreach (var vec in mat.Rows) { rm.AddVector((QsVector)Log(QsParameter.MakeParameter(vec, string.Empty))); } return(rm); } else { return(null); } } else { //not known may be ordinary string return(null); } }