Пример #1
0
        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);
        }
Пример #2
0
        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());
        }
Пример #3
0
        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)
                    )

                );
        }
Пример #4
0
 public static Arr <SimElement> FindElementsWithUnit(this SimOutput output, string unit) =>
 output.SimValues.Bind(v => v.SimElements.Filter(e => e.Unit == unit));
Пример #5
0
 public static Arr <NumDataColumn> GetDependentData(this SimOutput output, NumDataTable dataTable) =>
 output.DependentVariables.Map(e => dataTable[e.Name]);
Пример #6
0
 public static NumDataColumn GetIndependentData(this SimOutput output, NumDataTable dataTable) =>
 dataTable.NumDataColumns.Single(ndc => ndc.Name == output.IndependentVariable.Name);