Example #1
0
        public override bool TryGetValue(TRowKey rowKey, TColKey colKey, out TVal value)
        {
            KeyValuePair <TRowKey, int> multKeyAndState;
            TVal actualMultState;

            if (_binaryKeyToMultKeyAndState.TryGetValue(rowKey, out multKeyAndState) &&
                _multistateMatrix.TryGetValue(multKeyAndState.Key, colKey, out actualMultState))
            {
                if (rowKey.Equals(multKeyAndState.Key))
                {
                    value = actualMultState;
                }
                else
                {
                    int state = _cnvrtTValToState.ConvertForward(actualMultState);

                    bool thisIsTheState = state == multKeyAndState.Value;

                    value = thisIsTheState ? _cnvrtTValToState.ConvertBackward(1) : _cnvrtTValToState.ConvertBackward(0);
                }
                return(true);
            }

            value = MissingValue;

            return(false);   //must be missing if we get to here.
        }
Example #2
0
        public override TVal this[TRowKey rowKey, TColKey colKey]
        {
            get
            {
                TVal result;
                if (TryGetValue(rowKey, colKey, out result))
                {
                    return(result);
                }
                else
                {
                    throw new Exception(string.Format("[{0},{1}] is missing.", rowKey, colKey));
                }
            }
            set
            {
                if (MissingValue.Equals(value))
                {
                    throw new Exception("Can't assign missing value using this[row,col]. Use SetValueOrMissing(row, col, value) or Remove(row,vol)");
                }

                var binaryKeys = _multKeyToBinaryKeys[rowKey];
                Helper.CheckCondition <InvalidOperationException>(binaryKeys.Count > 0, "Every multistate key must have at least one binary key. {0} does not.", rowKey);
                if (binaryKeys.Count == 1 && binaryKeys[0].Equals(rowKey))
                {
                    _binaryMatrix[binaryKeys[0], colKey] = value;
                }

                else
                {
                    //int state = _cnvrtTValToState.ConvertForward(value);
                    Multinomial m = _cnvrtTValToState.ConvertForward(value);
                    Helper.CheckCondition(m.NumOutcomes == binaryKeys.Count || m.IsDefinite && m.NumOutcomes <= binaryKeys.Count,
                                          "{0}, which maps to state {1} is outside the value range of values for this state ([{2},{3}])",
                                          value, m, 0, binaryKeys.Count - 1);

                    int state = 0;
                    foreach (var key in binaryKeys)
                    {
                        double      prob     = m[state];
                        Multinomial binomial = new Multinomial(1 - prob, prob);
                        _binaryMatrix[key, colKey] = _cnvrtTValToState.ConvertBackward(binomial);
                        state++;
                    }

                    //int hotState = 0;
                    //TVal trueState = _cnvrtTValToState.ConvertBackward(1);
                    //TVal falseState = _cnvrtTValToState.ConvertBackward(0);
                    //foreach (var key in binaryKeys)
                    //{
                    //    _binaryMatrix[key, colKey] = hotState == state ? trueState : falseState;
                    //    hotState++;
                    //}
                }
            }
        }
        public void ValidateValueConverterCharToInt()
        {
            ValueConverter <char, int> charInt = ValueConverter.CharToInt;
            char x = charInt.ConvertBackward(3);
            int  y = charInt.ConvertForward('4');

            Assert.AreEqual('3', x);
            Assert.AreEqual(4, y);
        }
        public void ValidateValueConverterIntToChar()
        {
            ValueConverter <int, char> intChar = ValueConverter.IntToChar;
            int  x = intChar.ConvertBackward('0');
            char y = intChar.ConvertForward(1);

            Assert.AreEqual(0, x);
            Assert.AreEqual('1', y);
        }
Example #5
0
 /// <summary>
 /// Creates a this wrapper.
 /// </summary>
 /// <param name="binaryMatrixToWrap">Must have values that map to 0/1</param>
 /// <param name="multistateKeyToOrderedBinaryKeys">First key is multistate name (e.g. 1@A#B#C), the value is an enumeration of binary keys that map to the multistate keys.
 /// The order specifies the state value in multistate space. (e.g. 1@A is state 0, 1@B is state 2, 1@C is state 2)</param>
 /// <param name="convertTValToInt">Specifies how to convert from TVal to 0,1,2,3... and back. 0/1 are used for binary, 0..N are assumed to be used by the multistate matrix.</param>
 public BinaryToMultistateView(
     Matrix <TRowKey, TColKey, TVal> binaryMatrixToWrap,
     IEnumerable <KeyValuePair <TRowKey, IEnumerable <TRowKey> > > multistateKeyToOrderedBinaryKeys,
     ValueConverter <TVal, int> convertTValToInt)
     : this(binaryMatrixToWrap, multistateKeyToOrderedBinaryKeys,
            new ValueConverter <TVal, Multinomial>(v => IntToMultinomial(convertTValToInt.ConvertForward(v)), m => convertTValToInt.ConvertBackward(MultinomialToInt(m))))
 {
 }