From 6e5c73bcb2d96813d14f45dbe871b596660ccdd3 Mon Sep 17 00:00:00 2001 From: Sergiu Ivanov Date: Fri, 28 Feb 2020 21:56:42 +0100 Subject: [PATCH] networks: Add build-full-boolean-state-graph-annotated. --- networks-tests.rkt | 39 +++++++++++++++++++++++++++++++++++++-- networks.rkt | 9 ++++++++- 2 files changed, 45 insertions(+), 3 deletions(-) diff --git a/networks-tests.rkt b/networks-tests.rkt index a2ae83e..bcec724 100644 --- a/networks-tests.rkt +++ b/networks-tests.rkt @@ -133,7 +133,8 @@ [gr-full (dds-build-state-graph asyn (set s))] [gr-full-pp (ppsg gr-full)] [gr-full-ppb (ppsgb gr-full)] - [gr-complete-bool (build-full-boolean-state-graph asyn)]) + [gr-complete-bool (build-full-boolean-state-graph asyn)] + [gr-complete-bool-ann (build-full-boolean-state-graph-annotated asyn)]) (check-equal? (dds-step-one asyn s) (set (st '((a . #f) (b . #f))) (st '((a . #t) (b . #f))))) (check-equal? (dds-step-one-annotated asyn s) @@ -171,4 +172,38 @@ (#hash((a . #t) (b . #t)) #hash((a . #f) (b . #t))) (#hash((a . #t) (b . #t)) #hash((a . #t) (b . #t))) (#hash((a . #f) (b . #t)) #hash((a . #f) (b . #t))) - (#hash((a . #f) (b . #t)) #hash((a . #t) (b . #t))))))) + (#hash((a . #f) (b . #t)) #hash((a . #t) (b . #t))))) + + (check-equal? (get-edges gr-complete-bool-ann) + '((#hash((a . #f) (b . #f)) #hash((a . #t) (b . #f))) + (#hash((a . #f) (b . #f)) #hash((a . #f) (b . #f))) + (#hash((a . #t) (b . #f)) #hash((a . #t) (b . #f))) + (#hash((a . #t) (b . #f)) #hash((a . #f) (b . #f))) + (#hash((a . #t) (b . #t)) #hash((a . #f) (b . #t))) + (#hash((a . #t) (b . #t)) #hash((a . #t) (b . #t))) + (#hash((a . #f) (b . #t)) #hash((a . #f) (b . #t))) + (#hash((a . #f) (b . #t)) #hash((a . #t) (b . #t))))) + (check-equal? (edge-weight gr-complete-bool-ann + #hash((a . #f) (b . #f)) #hash((a . #t) (b . #f))) + (set 'a)) + (check-equal? (edge-weight gr-complete-bool-ann + #hash((a . #f) (b . #f)) #hash((a . #f) (b . #f))) + (set 'b)) + (check-equal? (edge-weight gr-complete-bool-ann + #hash((a . #t) (b . #f)) #hash((a . #t) (b . #f))) + (set 'b)) + (check-equal? (edge-weight gr-complete-bool-ann + #hash((a . #t) (b . #f)) #hash((a . #f) (b . #f))) + (set 'a)) + (check-equal? (edge-weight gr-complete-bool-ann + #hash((a . #t) (b . #t)) #hash((a . #f) (b . #t))) + (set 'a)) + (check-equal? (edge-weight gr-complete-bool-ann + #hash((a . #t) (b . #t)) #hash((a . #t) (b . #t))) + (set 'b)) + (check-equal? (edge-weight gr-complete-bool-ann + #hash((a . #f) (b . #t)) #hash((a . #f) (b . #t))) + (set 'b)) + (check-equal? (edge-weight gr-complete-bool-ann + #hash((a . #f) (b . #t)) #hash((a . #t) (b . #t))) + (set 'a)))) diff --git a/networks.rkt b/networks.rkt index fbf22f4..1a18907 100644 --- a/networks.rkt +++ b/networks.rkt @@ -52,7 +52,8 @@ [pretty-print-state-graph-with (-> graph? (-> state? string?) graph?)] [pretty-print-state-graph (-> graph? graph?)] [pretty-print-boolean-state-graph (-> graph? graph?)] - [build-full-boolean-state-graph (-> dynamics? graph?)]) + [build-full-boolean-state-graph (-> dynamics? graph?)] + [build-full-boolean-state-graph-annotated (-> dynamics? graph?)]) ;; Predicates (contract-out [variable? (-> any/c boolean?)] [state? (-> any/c boolean?)] @@ -366,3 +367,9 @@ (dds-build-state-graph dyn (list->set (build-all-boolean-states (hash-keys (dynamics-network dyn)))))) + +;;; Build the full annotated state graph of a Boolean network. +(define (build-full-boolean-state-graph-annotated dyn) + (dds-build-state-graph-annotated + dyn + (list->set (build-all-boolean-states (hash-keys (dynamics-network dyn))))))