/*******************************************************************************
* Copyright 2012 Analog Devices, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
********************************************************************************/
package com.analog.lyric.dimple.matlabproxy;
import com.analog.lyric.collect.BitSetUtil;
import com.analog.lyric.dimple.factorfunctions.core.FactorTable;
import com.analog.lyric.dimple.factorfunctions.core.IFactorTable;
import com.analog.lyric.dimple.model.domains.JointDomainIndexer;
import com.analog.lyric.util.misc.Matlab;
@Matlab
public class PFactorTable extends PObject
{
private IFactorTable _table;
/*--------------
* Construction
*/
public PFactorTable(PDiscreteDomain [] domains)
{
_table = FactorTable.create(PHelpers.convertDomains(domains));
}
public PFactorTable(Object table, PDiscreteDomain [] domains)
{
_table = FactorTable.create(table, PHelpers.convertDomains(domains));
}
public PFactorTable(int [][] indices, double [] values, PDiscreteDomain [] domains)
{
_table = FactorTable.create(indices, values, PHelpers.convertDomains(domains));
}
public PFactorTable(IFactorTable table)
{
_table = table;
}
/*-----------------
* PObject methods
*/
@Override
public IFactorTable getDelegate()
{
return _table;
}
@Override
public IFactorTable getModelerObject()
{
return _table;
}
@Override
public boolean isDiscrete()
{
return true;
}
@Override
public boolean isFactorTable()
{
return true;
}
/*----------------------
* PFactorTable methods
*/
public void normalize(int [] directedTo)
{
_table.makeConditional(BitSetUtil.bitsetFromIndices(_table.getDimensions(), directedTo));
}
public PDiscreteDomain [] getDomains()
{
JointDomainIndexer domains = _table.getDomainIndexer();
PDiscreteDomain [] pdomains = new PDiscreteDomain[domains.size()];
for (int i = 0; i < pdomains.length; i++)
{
pdomains[i] = new PDiscreteDomain(domains.get(i));
}
return pdomains;
}
public int [][] getIndices()
{
return _table.getIndicesSparseUnsafe();
}
public double [] getWeights()
{
return _table.getWeightsSparseUnsafe();
}
public double get(int [] indices)
{
return _table.getWeightForIndices(indices);
}
public void set(int [] indices, double value)
{
_table.setWeightForIndices(value, indices);
}
public void changeWeights(double [] values)
{
_table.replaceWeightsSparse(values);
}
public void change(int [][] indices, double [] weights)
{
_table.setWeightsSparse(indices,weights);
}
}