public static Option <SimElement> FindElement(this SimOutput output, string name) { foreach (var value in output.SimValues) { foreach (var element in value.SimElements) { if (element.Name == name) { return(Some(element)); } } } return(None); }
public static NumDataColumn[] TabulateExecOutput(SimOutput output) { var instance = REngine.GetInstance(); var sexpOutput = instance.GetSymbol(_execOutputName); var matrices = SexpToMatrices(sexpOutput); if (0 == matrices.Length) { return(Array.Empty <NumDataColumn>()); } var targetColumnNames = output.SimValues.IsEmpty ? default : output.SimValues.Select(v => v.Name).ToArray(); var tabulated = new List <NumDataColumn>(); foreach (var(columnNames, array) in matrices) { int[]? excludedColumnIndexes = default; if (default != targetColumnNames) { RequireNotNull(columnNames); excludedColumnIndexes = columnNames .Select((cn, i) => new { cn, i }) .Where(a => !targetColumnNames.Contains(a.cn)) .Select(a => a.i) .ToArray(); } var numDataColumns = MatrixToNumDataColumns( array, columnNames, excludedColumnIndexes ); tabulated.AddRange(numDataColumns); } return(tabulated.ToArray()); }
internal DepVarConfigViewModel( SimOutput output, ISimEvidence evidence, IAppService appService, DepVarConfigState depVarConfigState ) { RequireNotNull(output); RequireTrue(output.SimValues.Count > 0); RequireNotNull(evidence); RequireNotNull(depVarConfigState); var elements = output.DependentVariables; RequireFalse(elements.IsEmpty); RequireTrue( depVarConfigState.SelectedElementName.IsntAString() || elements.Exists(e => e.Name == depVarConfigState.SelectedElementName) ); _elements = elements; _evidence = evidence; _depVarConfigState = depVarConfigState; ToggleView = ReactiveCommand.Create(HandleToggleView); _selectElement = ReactiveCommand.Create <ISelectableItemViewModel>(HandleSelectElement); _selectSupplementaryElement = ReactiveCommand.Create <ISelectableItemViewModel>(HandleSelectSupplementaryElement); _selectObservations = ReactiveCommand.Create <ISelectableItemViewModel>(HandleSelectObservations); var elementViewModels = elements .Map(e => new SelectableItemViewModel <SimElement>( e, e.GetFQName(), e.Name.ToUpperInvariant(), _selectElement, false ) ) .OrderBy(vm => vm.SortKey); _elementViewModels = elementViewModels.ToArr(); depVarConfigState.SelectedElementName ??= elementViewModels.First().Item.Name; _selectedElement = elementViewModels.Single(e => e.Item.Name == depVarConfigState.SelectedElementName); var partitioned = elementViewModels.Select( e => e == _selectedElement ? (None, None) : depVarConfigState.MRUElementNames.Exists(n => n == e.Item.Name) ? (MRU: Some(e), LRU: Option <SelectableItemViewModel <SimElement> > .None) : (MRU: None, LRU: Some(e)) ); MRUElements = new ObservableCollection <ISelectableItemViewModel>(partitioned.Choose(t => t.MRU)); LRUElements = new ObservableCollection <ISelectableItemViewModel>(partitioned.Choose(t => t.LRU)); _isScaleLogarithmic = depVarConfigState.IsScaleLogarithmic; InsetOptions = Array("(none)") + _elementViewModels.Map(vm => vm.Item.Name); SelectedInsetOption = depVarConfigState.SelectedInsetElementName.IsAString() ? InsetOptions.FindIndex(io => io == depVarConfigState.SelectedElementName) + 1 : 0; PopulateSupplementaryElements(); PopulateObservations(); _reactiveSafeInvoke = appService.GetReactiveSafeInvoke(); _subscriptions = new CompositeDisposable( evidence.ObservationsChanges.Subscribe( _reactiveSafeInvoke.SuspendAndInvoke <(Arr <SimObservations>, ObservableQualifier)>( ObserveEvidenceObservationChange ) ), depVarConfigState .ObservableForProperty(s => s.SelectedElementName) .Subscribe( _reactiveSafeInvoke.SuspendAndInvoke <object>(ObserveStateSelectedElementName) ), depVarConfigState .ObservableForProperty(s => s.ObservationsReferences) .Subscribe( _reactiveSafeInvoke.SuspendAndInvoke <object>(ObserveStateObservationsReferences) ), this .ObservableForProperty(vm => vm.IsScaleLogarithmic) .Subscribe( _reactiveSafeInvoke.SuspendAndInvoke <object>(ObserveIsScaleLogarithmic) ), this .ObservableForProperty(vm => vm.SelectedInsetOption) .Subscribe( _reactiveSafeInvoke.SuspendAndInvoke <object>(ObserveSelectedInsetOption) ) ); }
public static Arr <SimElement> FindElementsWithUnit(this SimOutput output, string unit) => output.SimValues.Bind(v => v.SimElements.Filter(e => e.Unit == unit));
public static Arr <NumDataColumn> GetDependentData(this SimOutput output, NumDataTable dataTable) => output.DependentVariables.Map(e => dataTable[e.Name]);
public static NumDataColumn GetIndependentData(this SimOutput output, NumDataTable dataTable) => dataTable.NumDataColumns.Single(ndc => ndc.Name == output.IndependentVariable.Name);