EMMA Coverage Report (generated Sat Aug 20 11:00:51 CDT 2011)
[all classes][felix.dstruct]

COVERAGE SUMMARY FOR SOURCE FILE [FelixClause.java]

nameclass, %method, %block, %line, %
FelixClause.java100% (1/1)67%  (2/3)34%  (277/807)35%  (56.4/159)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class FelixClause100% (1/1)67%  (2/3)34%  (277/807)35%  (56.4/159)
toLearningQueryForVictor (StatOperator, FelixPredicate): ConjunctiveQuery 0%   (0/1)0%   (0/470)0%   (0/91)
toSimplifiedFactorGraphQuery (StatOperator, FelixPredicate, boolean): Conjunc... 100% (1/1)82%  (271/331)82%  (54.4/66)
FelixClause (): void 100% (1/1)100% (6/6)100% (2/2)

1package felix.dstruct;
2 
3import java.util.ArrayList;
4import java.util.HashMap;
5import java.util.HashSet;
6 
7import felix.dstruct.StatOperator.OPType;
8 
9 
10import tuffy.db.RDB;
11import tuffy.mln.Clause;
12import tuffy.mln.Literal;
13import tuffy.mln.Term;
14import tuffy.mln.Type;
15import tuffy.ra.ConjunctiveQuery;
16import tuffy.util.Config;
17import tuffy.util.ExceptionMan;
18 
19 
20/**
21 * The clause object used in Felix, which extends
22 * the Clause class in Tuffy to contain Felix-related
23 * fields and methods.
24 * 
25 * @author Ce Zhang
26 *
27 */
28public class FelixClause extends Clause{
29        
30        /**
31         * @deprecated
32         */
33        public boolean isBinaryLRRules = false;
34 
35 
36        /**
37         * See {@link StatOperator#translateFelixClasesIntoFactorGraphEdgeQueries(FelixPredicate, boolean, dstruct.FelixPredicate.FPProperty...)}
38         * @param sop
39         * @param toBeHead
40         * @param forceRecursive
41         * @return
42         */
43        public ConjunctiveQuery toSimplifiedFactorGraphQuery(StatOperator sop, FelixPredicate toBeHead, boolean forceRecursive){
44                
45                try{
46                        
47                        ConjunctiveQuery cq = new ConjunctiveQuery();
48                        
49                        //pick head literals
50                        int nOfTargetLiteral = 0;
51                        ArrayList<Term> headTerms = new ArrayList<Term>();
52                        ArrayList<Type> headTypes = new ArrayList<Type>();
53                        ArrayList<Literal> headLiterals = new ArrayList<Literal>();
54                        for(Literal l : this.getRegLiterals()){
55                                if(nOfTargetLiteral == 1 && forceRecursive == true){
56                                        break;
57                                }
58                                
59                                if(l.getPred().getName().equals(toBeHead.getName())){
60                                        nOfTargetLiteral ++;
61                                        headTerms.addAll(l.getTerms());
62                                        headLiterals.add(l);
63                                        for(int i=0;i<l.getPred().arity();i++){
64                                                headTypes.add(l.getPred().getTypeAt(i));
65                                        }
66                                }
67                        }
68                        
69                        // currently, we do not consider hyper-graph edges
70                        if(nOfTargetLiteral > 2 && forceRecursive == false){
71                                ExceptionMan.die("Too many matched literals for predicate " + toBeHead);
72                        }
73                        
74                        FelixPredicate tmpHeadPredicate = new FelixPredicate(FelixPredicate.getNextTmpPredicateName(), false);
75                        for(Type type : headTypes){
76                                tmpHeadPredicate.appendArgument(type);
77                        }
78                        RDB db = RDB.getRDBbyConfig(Config.db_schema);
79                        tmpHeadPredicate.prepareDB(db);
80                        db.close();
81                        
82                        Literal lhead = new Literal(tmpHeadPredicate, true);
83                        for(Term t : headTerms){
84                                lhead.appendTerm(t);
85                        }
86                        cq.setHead(lhead);
87                        cq.sourceClause = this;
88                        
89                        int ctOpen = 0;
90                        boolean lastSense = false;
91                        Literal lastLiteral = null;
92                        for(Literal l : this.getRegLiterals()){
93                                if(headLiterals.contains(l)){
94                                        continue;
95                                }
96                                ctOpen ++;
97                                Literal negL = (Literal) l.clone();
98                                negL.setSense(!negL.getSense());
99                                lastLiteral = negL;
100                                lastSense = negL.getSense();
101                                cq.addBodyLit(negL);
102                        }
103                        
104                        boolean flipFlag = false;
105                        if(ctOpen == 1 && lastSense == false){
106                                flipFlag = true;
107                                lastLiteral.setSense(!lastLiteral.getSense());
108                        }
109                        
110                        cq.setWeight(0);
111                        
112                        // set weight for the factor graph's edges
113                        if(headLiterals.size() == 1){
114                                if(headLiterals.get(0).getSense() == true){
115                                        if(this.hasEmbeddedWeight()){
116                                                cq.inverseEmbededWeight = (flipFlag == false? false : true);
117                                        }else{
118                                                cq.setWeight(flipFlag == false? this.getWeight(): -this.getWeight());
119                                        }
120                                }else{
121                                        if(this.hasEmbeddedWeight()){
122                                                cq.inverseEmbededWeight = (flipFlag == false? true : false);
123                                        }else{
124                                                cq.setWeight((flipFlag == false?-this.getWeight():this.getWeight()));
125                                        }                                        
126                                }
127                        }else{
128                                if(headLiterals.get(0).getSense() != headLiterals.get(1).getSense()){
129                                        if(this.hasEmbeddedWeight()){
130                                                cq.inverseEmbededWeight = (flipFlag == false? false : true);
131                                        }else{
132                                                cq.setWeight(flipFlag == false? this.getWeight(): -this.getWeight());
133                                        }
134                                }else{
135                                        if(this.hasEmbeddedWeight()){
136                                                cq.inverseEmbededWeight = (flipFlag == false? true : false);
137                                        }else{
138                                                cq.setWeight((flipFlag == false?-this.getWeight():this.getWeight()));
139                                        }
140                                }
141                        }
142                        
143                        if(sop.clauseConstraints.get(this) != null){
144                                cq.addConstraintAll(sop.clauseConstraints.get(this));
145                        }
146                        cq.addConstraintAll(this.getConstraints());
147                        
148                        return cq;
149                        
150                }catch(Exception e){
151                        e.printStackTrace();
152                        return null;
153                }
154 
155        }
156        
157        /**
158         * See {@link StatOperator#translateFelixClasesIntoFactorGraphEdgeQueries(FelixPredicate, boolean, dstruct.FelixPredicate.FPProperty...)}
159         * @param sop
160         * @param toBeHead
161         * @param forceRecursive
162         * @return
163         * @deprecated
164         */
165        public ConjunctiveQuery toLearningQueryForVictor(StatOperator sop, FelixPredicate toBeHead){
166                
167                try{
168                        
169                        if(sop.type != OPType.LR){
170                                ExceptionMan.die("I can only eat LR operators now!");
171                        }
172                        
173                        ConjunctiveQuery cq = new ConjunctiveQuery();
174                        
175                        //pick head literals
176                        int nOfTargetLiteral = 0;
177                        ArrayList<Term> headTerms = new ArrayList<Term>();
178                        ArrayList<Type> headTypes = new ArrayList<Type>();
179                        ArrayList<Literal> headLiterals = new ArrayList<Literal>();
180                        
181                        ArrayList<Literal> bodyLiterals = new ArrayList<Literal>();        //remove embeded weight predicate from t
182                        Literal embedWeightLiteral = null;
183                        
184                        ArrayList<String> strHeadTerms = new ArrayList<String>();
185                        HashSet<String> bodyTerms = new HashSet<String>();
186                        HashSet<String> labelTerms = new HashSet<String>();
187                        HashSet<String> keyTerms = new HashSet<String>();
188                        HashMap<String, Type> term2typeMap = new HashMap<String, Type>();
189                        HashMap<String, Term> str2termMap = new HashMap<String, Term>();
190                        
191                        for(Literal l : this.getRegLiterals()){
192                                
193                                if(l.getPred().getName().equals(toBeHead.getName())){
194                                        nOfTargetLiteral ++;
195                                        
196                                        headTerms.addAll(l.getTerms());
197                                        headLiterals.add(l);
198                                        for(int i=0;i<l.getPred().arity();i++){
199                                                
200                                                strHeadTerms.add(l.getTerms().get(i).toString());
201                                                
202                                                //assume LR head
203                                                if(toBeHead.getLabelPositions().contains(i)){
204                                                        labelTerms.add(l.getTerms().get(i).toString());
205                                                }else{
206                                                        keyTerms.add(l.getTerms().get(i).toString());
207                                                }
208                                                
209                                                str2termMap.put(l.getTerms().get(i).toString(), l.getTerms().get(i));
210                                                term2typeMap.put(l.getTerms().get(i).toString(), l.getPred().getTypeAt(i));
211                                                headTypes.add(l.getPred().getTypeAt(i));
212                                        }        
213                                }else{
214                                        if(this.hasEmbeddedWeight()){
215                                                int flag = 0;
216                                                for (Term t : l.getTerms()){
217                                                        if(t.toString().equals(this.getVarWeight())){
218                                                                flag = 1;
219                                                                break;
220                                                        }
221                                                }
222                                                if(flag == 1){
223                                                        embedWeightLiteral = l;
224                                                        continue;
225                                                }
226                                        }
227                                        
228                                        bodyLiterals.add(l);
229                                        for(int i=0;i<l.getPred().arity();i++){
230                                                
231                                                String t = l.getTerms().get(i).toString();
232                                                if(labelTerms.contains(t) || keyTerms.contains(t)){
233                                                        continue;
234                                                }
235                                                bodyTerms.add(t);
236                                                term2typeMap.put(t, l.getPred().getTypeAt(i));
237                                                str2termMap.put(t, l.getTerms().get(i));
238                                        }        
239                                        
240                                }
241                        }
242                        
243                        // currently, we do not consider hyper-graph edges
244                        if(nOfTargetLiteral >= 2){
245                                ExceptionMan.die("Too many matched literals for predicate " + toBeHead);
246                        }
247                        
248                        FelixPredicate tmpHeadPredicate = new FelixPredicate(FelixPredicate.getNextTmpPredicateName(), false);
249 
250                        for(String t : strHeadTerms){
251                                tmpHeadPredicate.appendArgument(term2typeMap.get(t));
252                        }
253                        tmpHeadPredicate.appendArgument(new Type("__clauseID"));
254                        if(embedWeightLiteral != null){
255                                for(int i=0;i<embedWeightLiteral.getTerms().size();i++){
256                                        if(embedWeightLiteral.getTerms().get(i).toString().equals(this.getVarWeight())){
257                                                continue;
258                                        }
259                                        tmpHeadPredicate.appendArgument(embedWeightLiteral.getPred().getTypeAt(i));
260                                }
261                        }
262                        
263                        //for(String t : bodyTerms){
264                        //        tmpHeadPredicate.appendArgument(term2typeMap.get(t));
265                        //}
266                        
267                        RDB db = RDB.getRDBbyConfig(Config.db_schema);
268                        tmpHeadPredicate.prepareDB(db);
269                        db.close();
270                        
271                        Literal lhead = new Literal(tmpHeadPredicate, true);
272                        
273                        for(String t : strHeadTerms){
274                                lhead.appendTerm(str2termMap.get(t));
275                        }
276                        lhead.appendTerm(new Term(this.getId()));
277                        if(embedWeightLiteral != null){
278                                for(int i=0;i<embedWeightLiteral.getTerms().size();i++){
279                                        if(embedWeightLiteral.getTerms().get(i).toString().equals(this.getVarWeight())){
280                                                continue;
281                                        }
282                                        lhead.appendTerm(embedWeightLiteral.getTerms().get(i));
283                                }
284                        }
285                        
286                        cq.setHead(lhead);
287                        cq.sourceClause = this;
288                        
289                        for(Literal l : this.getRegLiterals()){
290                                if(headLiterals.contains(l)){
291                                        continue;
292                                }
293                                
294                                int flag = 0;
295                                for (Term t : l.getTerms()){
296                                        if(t.toString().equals(this.getVarWeight())){
297                                                flag = 1;
298                                                break;
299                                        }
300                                }
301                                if(flag == 1){
302                                        continue;
303                                }
304                                
305                                
306 
307                                Literal negL = (Literal) l.clone();
308                                negL.setSense(!negL.getSense());
309                                cq.addBodyLit(negL);
310                        }
311                                                
312                        cq.setWeight(0);
313                                                
314                        if(sop.clauseConstraints.get(this) != null){
315                                cq.addConstraintAll(sop.clauseConstraints.get(this));
316                        }
317                        cq.addConstraintAll(this.getConstraints());
318                        
319                        return cq;
320                        
321                }catch(Exception e){
322                        e.printStackTrace();
323                        return null;
324                }
325 
326        }
327        
328}
329 

[all classes][felix.dstruct]
EMMA 2.0.5312 EclEmma Fix 2 (C) Vladimir Roubtsov