Search in sources :

Example 1 with Source

use of suite.util.FunUtil.Source in project suite by stupidsing.

the class ProveTracer method expandWithTrace.

public Node expandWithTrace(Node query, Prover prover, Iterate<Node> expand) {
    Node query1 = new Cloner().clone(query);
    if (currentDepth < 64) {
        Record record0 = currentRecord;
        int depth0 = currentDepth;
        Record record = new Record(record0, query1, currentDepth + 1);
        Data<Source<Boolean>> enter = new Data<>(() -> {
            currentRecord = record;
            currentDepth = record.depth;
            record.start = records.size();
            records.add(record);
            return Boolean.TRUE;
        });
        Data<Source<Boolean>> leaveOk = new Data<>(() -> {
            currentRecord = record0;
            currentDepth = depth0;
            record.nOkays++;
            return Boolean.TRUE;
        });
        Data<Source<Boolean>> leaveFail = new Data<>(() -> {
            currentRecord = record0;
            currentDepth = depth0;
            record.end = records.size();
            return Boolean.FALSE;
        });
        Node alt = prover.getAlternative();
        Node rem = prover.getRemaining();
        prover.setAlternative(Tree.of(TermOp.OR____, leaveFail, alt));
        prover.setRemaining(Tree.of(TermOp.AND___, leaveOk, rem));
        query = expand.apply(query);
        query = Tree.of(TermOp.AND___, enter, query);
    } else
        query = expand.apply(query);
    return query;
}
Also used : Node(suite.node.Node) Data(suite.node.Data) Source(suite.util.FunUtil.Source)

Example 2 with Source

use of suite.util.FunUtil.Source in project suite by stupidsing.

the class Prover method prove0.

public boolean prove0(Node query) {
    rem = OK;
    alt = FAIL;
    while (true) {
        // logUtil.info(Formatter.dump(query));
        query = query.finalNode();
        if (query instanceof Tree) {
            Tree tree = (Tree) query;
            Node left = tree.getLeft(), right = tree.getRight();
            switch((TermOp) tree.getOperator()) {
                case OR____:
                    int pit = trail.getPointInTime();
                    Node bt = new Data<Source<Boolean>>(() -> {
                        trail.unwind(pit);
                        return Boolean.TRUE;
                    });
                    alt = andTree(bt, orTree(andTree(right, rem), alt));
                    query = left;
                    continue;
                case AND___:
                    rem = andTree(right, rem);
                    query = left;
                    continue;
                case EQUAL_:
                    query = isSuccess(bind(left, right));
                    break;
                default:
            }
        } else if (query instanceof Data) {
            query = isSuccess(Data.<Source<Boolean>>get(query).source());
            continue;
        }
        Boolean b = systemPredicates.call(query);
        if (b != null)
            query = isSuccess(b);
        // not handled above
        if (query == OK)
            if (rem != OK) {
                query = rem;
                rem = OK;
            } else
                return true;
        else if (query == FAIL)
            if (alt != FAIL) {
                query = alt;
                alt = FAIL;
                rem = OK;
            } else
                return false;
        else {
            boolean isTrace = config.isTrace();
            if (isTrace) {
                Set<String> whites = Suite.tracePredicates;
                Set<String> blacks = Suite.noTracePredicates;
                Prototype prototype = Prototype.of(query);
                Node head = prototype != null ? prototype.head : null;
                Atom atom = head instanceof Atom ? (Atom) head : null;
                String name = atom != null ? atom.name : null;
                isTrace &= whites == null || whites.contains(name);
                isTrace &= blacks == null || !blacks.contains(name);
            }
            if (!isTrace)
                query = expand(query);
            else
                query = tracer.expandWithTrace(query, this, this::expand);
        }
    }
}
Also used : Set(java.util.Set) RuleSet(suite.lp.kb.RuleSet) Prototype(suite.lp.kb.Prototype) TermOp(suite.node.io.TermOp) Node(suite.node.Node) Tree(suite.node.Tree) Data(suite.node.Data) Source(suite.util.FunUtil.Source) Atom(suite.node.Atom)

Example 3 with Source

use of suite.util.FunUtil.Source in project suite by stupidsing.

the class NioDispatcherTest method testTextExchange.

@Test
public void testTextExchange() throws IOException {
    String hello = "HELLO";
    Charset charset = Constants.charset;
    Source<NioChannel> source = () -> {
        BufferedNioChannel channel = new BufferedNioChannel();
        channel.onConnected.wire(sender -> {
            String s = hello + "\n";
            channel.send(To.bytes(s));
        });
        channel.onReceive.wire(channel::send);
        return NioChannelFactory.buffered(channel);
    };
    NioDispatcher<NioChannel> dispatcher = new NioDispatcherImpl<>(source);
    dispatcher.start();
    try (Closeable closeServer = dispatcher.listen(5151);
        Socket socket = new Socket("localhost", 5151);
        InputStream is = socket.getInputStream();
        OutputStream os = socket.getOutputStream();
        InputStreamReader isr = new InputStreamReader(is, charset);
        BufferedReader reader = new BufferedReader(isr);
        PrintWriter writer = new PrintWriter(os)) {
        String m = "testing nio";
        writer.println(m);
        writer.flush();
        assertEquals(hello, reader.readLine());
        assertEquals(m, reader.readLine());
    } finally {
        dispatcher.stop();
    }
}
Also used : OutputStream(java.io.OutputStream) PrintWriter(java.io.PrintWriter) Socket(java.net.Socket) ThreadPoolExecutor(java.util.concurrent.ThreadPoolExecutor) Constants(suite.Constants) Source(suite.util.FunUtil.Source) Bytes(suite.primitive.Bytes) Thread_(suite.util.Thread_) IOException(java.io.IOException) Test(org.junit.Test) To(suite.util.To) NioChannel(suite.net.nio.NioChannelFactory.NioChannel) InputStreamReader(java.io.InputStreamReader) InetSocketAddress(java.net.InetSocketAddress) InetAddress(java.net.InetAddress) TimeUnit(java.util.concurrent.TimeUnit) BufferedNioChannel(suite.net.nio.NioChannelFactory.BufferedNioChannel) Iterate(suite.util.FunUtil.Iterate) Charset(java.nio.charset.Charset) Closeable(java.io.Closeable) BufferedReader(java.io.BufferedReader) Assert.assertEquals(org.junit.Assert.assertEquals) InputStream(java.io.InputStream) RequestResponseNioChannel(suite.net.nio.NioChannelFactory.RequestResponseNioChannel) InputStreamReader(java.io.InputStreamReader) InputStream(java.io.InputStream) Closeable(java.io.Closeable) OutputStream(java.io.OutputStream) Charset(java.nio.charset.Charset) BufferedNioChannel(suite.net.nio.NioChannelFactory.BufferedNioChannel) NioChannel(suite.net.nio.NioChannelFactory.NioChannel) BufferedNioChannel(suite.net.nio.NioChannelFactory.BufferedNioChannel) RequestResponseNioChannel(suite.net.nio.NioChannelFactory.RequestResponseNioChannel) BufferedReader(java.io.BufferedReader) Socket(java.net.Socket) PrintWriter(java.io.PrintWriter) Test(org.junit.Test)

Example 4 with Source

use of suite.util.FunUtil.Source in project suite by stupidsing.

the class LempelZivWelchTest method doTest.

private String doTest(String s0) {
    byte[] bs = s0.getBytes(Constants.charset);
    Source<Byte> source0 = new Source<>() {

        private int index;

        public Byte source() {
            return index < bs.length ? bs[index++] : null;
        }
    };
    LempelZivWelch<Byte> lzw = new LempelZivWelch<>(allBytes());
    Source<Integer> source1 = lzw.encode(source0);
    Source<Byte> source2 = lzw.decode(source1);
    BytesBuilder bb = new BytesBuilder();
    Byte b;
    while ((b = source2.source()) != null) bb.append(b);
    return To.string(bb.toBytes());
}
Also used : Source(suite.util.FunUtil.Source) BytesBuilder(suite.primitive.Bytes.BytesBuilder)

Example 5 with Source

use of suite.util.FunUtil.Source in project suite by stupidsing.

the class DblFunUtil method suck.

/**
 * Sucks data from a sink and produce into a source.
 */
public static DblSource suck(Sink<DblSink> fun) {
    NullableSyncQueue<Double> queue = new NullableSyncQueue<>();
    DblSink enqueue = c -> enqueue(queue, c);
    Thread thread = Thread_.startThread(() -> {
        try {
            fun.sink(enqueue);
        } finally {
            enqueue(queue, EMPTYVALUE);
        }
    });
    return () -> {
        try {
            return queue.take();
        } catch (InterruptedException ex) {
            thread.interrupt();
            return Fail.t(ex);
        }
    };
}
Also used : DblSink(suite.primitive.DblPrimitives.DblSink) DblSource(suite.primitive.DblPrimitives.DblSource) Dbl_Obj(suite.primitive.DblPrimitives.Dbl_Obj) Iterator(java.util.Iterator) LogUtil(suite.os.LogUtil) Source2(suite.util.FunUtil2.Source2) Source(suite.util.FunUtil.Source) NullableSyncQueue(suite.util.NullableSyncQueue) Thread_(suite.util.Thread_) Fun(suite.util.FunUtil.Fun) DblObjSource(suite.primitive.DblPrimitives.DblObjSource) Sink(suite.util.FunUtil.Sink) Collections(java.util.Collections) Fail(suite.util.Fail) DblTest(suite.primitive.DblPrimitives.DblTest) DblObjPair(suite.primitive.adt.pair.DblObjPair) NullableSyncQueue(suite.util.NullableSyncQueue) DblSink(suite.primitive.DblPrimitives.DblSink)

Aggregations

Source (suite.util.FunUtil.Source)16 Node (suite.node.Node)7 Fail (suite.util.Fail)7 Fun (suite.util.FunUtil.Fun)7 Iterator (java.util.Iterator)6 LogUtil (suite.os.LogUtil)6 Sink (suite.util.FunUtil.Sink)6 Thread_ (suite.util.Thread_)6 Collections (java.util.Collections)5 Data (suite.node.Data)5 Source2 (suite.util.FunUtil2.Source2)5 NullableSyncQueue (suite.util.NullableSyncQueue)5 Atom (suite.node.Atom)4 Tree (suite.node.Tree)4 TermOp (suite.node.io.TermOp)4 List (java.util.List)3 Test (org.junit.Test)3 RuleSet (suite.lp.kb.RuleSet)3 Int (suite.node.Int)3 ArrayList (java.util.ArrayList)2