56
52
(defvar ess-jags-system t "Default whether JAGS recognizes the system command.")
58
54
(defvar ess-jags-font-lock-keywords
61
(cons "#.*\n" font-lock-comment-face)
63
(cons "^[ \t]*\\(model\\|var\\)\\>"
64
font-lock-keyword-face)
66
(cons (concat "\\<d\\(bern\\|beta\\|bin\\|cat\\|chisq\\|"
67
"dexp\\|dirch\\|exp\\|\\(gen[.]\\)?gamma\\|hyper\\|"
68
"interval\\|lnorm\\|logis\\|mnorm\\|mt\\|multi\\|"
69
"negbin\\|norm\\(mix\\)?\\|par\\|pois\\|sum\\|t\\|"
70
"unif\\|weib\\|wish\\)[ \t\n]*(")
71
font-lock-constant-face)
73
(cons (concat "\\<\\(abs\\|cos\\|dim\\|\\(i\\)?cloglog\\|equals\\|"
74
"exp\\|for\\|inprod\\|interp[.]line\\|inverse\\|length\\|"
75
"\\(i\\)?logit\\|logdet\\|logfact\\|loggam\\|max\\|mean\\|"
76
"mexp\\|min\\|phi\\|pow\\|probit\\|prod\\|rank\\|round\\|"
77
"sd\\|sin\\|sort\\|sqrt\\|step\\|sum\\|t\\|trunc\\|T\\)[ \t\n]*(")
78
font-lock-function-name-face)
81
(cons (concat "\\<\\(adapt\\|cd\\|clear\\|coda\\|data\\|dir\\|"
82
"exit\\|in\\(itialize\\)?\\|load\\|model\\|monitors\\|parameters\\|"
83
"pwd\\|run\\|s\\(amplers\\|ystem\\)\\|to\\|update\\)[ \t\n]")
84
font-lock-keyword-face)
86
(cons "\\<\\(compile\\|monitor\\)[, \t\n]"
87
font-lock-keyword-face)
89
(cons "[, \t\n]\\(by\\|chain\\|nchains\\|stem\\|thin\\|type\\)[ \t\n]*("
90
font-lock-function-name-face)
92
"ESS[JAGS]: Font lock keywords."
57
(cons "#.*\n" font-lock-comment-face)
59
(cons "^[ \t]*\\(model\\|var\\)\\>"
60
font-lock-keyword-face)
62
(cons (concat "\\<d\\(bern\\|beta\\|bin\\|cat\\|chisq\\|"
63
"dexp\\|dirch\\|exp\\|\\(gen[.]\\)?gamma\\|hyper\\|"
64
"interval\\|lnorm\\|logis\\|mnorm\\|mt\\|multi\\|"
65
"negbin\\|norm\\(mix\\)?\\|par\\|pois\\|sum\\|t\\|"
66
"unif\\|weib\\|wish\\)[ \t\n]*(")
67
font-lock-constant-face)
69
(cons (concat "\\<\\(abs\\|cos\\|dim\\|\\(i\\)?cloglog\\|equals\\|"
70
"exp\\|for\\|inprod\\|interp[.]line\\|inverse\\|length\\|"
71
"\\(i\\)?logit\\|logdet\\|logfact\\|loggam\\|max\\|mean\\|"
72
"mexp\\|min\\|phi\\|pow\\|probit\\|prod\\|rank\\|round\\|"
73
"sd\\|sin\\|sort\\|sqrt\\|step\\|sum\\|t\\|trunc\\|T\\)[ \t\n]*(")
74
font-lock-function-name-face)
77
(cons (concat "\\<\\(adapt\\|cd\\|clear\\|coda\\|data\\|dir\\|"
78
"exit\\|in\\(itialize\\)?\\|load\\|model\\|monitors\\|parameters\\|"
79
"pwd\\|run\\|s\\(amplers\\|ystem\\)\\|to\\|update\\)[ \t\n]")
80
font-lock-keyword-face)
82
(cons "\\<\\(compile\\|monitor\\)[, \t\n]"
83
font-lock-keyword-face)
85
(cons "[, \t\n]\\(by\\|chain\\|nchains\\|stem\\|thin\\|type\\)[ \t\n]*("
86
font-lock-function-name-face)
88
"ESS[JAGS]: Font lock keywords."
95
91
(defun ess-jags-switch-to-suffix (suffix &optional jags-chains jags-monitor jags-thin
96
jags-burnin jags-update)
97
"ESS[JAGS]: Switch to file with suffix."
98
(find-file (concat ess-bugs-file-dir ess-bugs-file-root suffix))
100
(if (equal 0 (buffer-size)) (progn
101
(if (equal ".jag" suffix) (progn
104
(insert " for (i in 1:N) {\n \n")
107
(insert "#Local Variables" ":\n")
108
(insert "#ess-jags-chains:1\n")
109
(insert "#ess-jags-monitor:(\"\")\n")
110
(insert "#ess-jags-thin:1\n")
111
(insert "#ess-jags-burnin:10000\n")
112
(insert "#ess-jags-update:10000\n")
116
(if (equal ".jmd" suffix) (let
117
((ess-jags-temp-chains "") (ess-jags-temp-monitor "") (ess-jags-temp-chain ""))
119
(if jags-chains (setq ess-jags-chains jags-chains))
120
(if jags-monitor (setq ess-jags-monitor jags-monitor))
121
(if jags-thin (setq ess-jags-thin jags-thin))
123
(setq ess-jags-temp-chains
124
(concat "compile, nchains(" (format "%d" ess-jags-chains) ")\n"))
126
(setq jags-chains ess-jags-chains)
128
(while (< 0 jags-chains)
129
(setq ess-jags-temp-chains
130
(concat ess-jags-temp-chains
131
"parameters ## \"" ess-bugs-file-root
132
".##" (format "%d" jags-chains) "\", chain("
133
(format "%d" jags-chains) ")\n"))
134
(setq jags-chains (- jags-chains 1)))
136
(setq ess-jags-temp-monitor "")
138
(while (and (listp ess-jags-monitor) (consp ess-jags-monitor))
139
(if (not (string-equal "" (car ess-jags-monitor)))
140
(setq ess-jags-temp-monitor
141
(concat ess-jags-temp-monitor "monitor "
142
(car ess-jags-monitor) ", thin(" (format "%d" ess-jags-thin) ")\n")))
143
(setq ess-jags-monitor (cdr ess-jags-monitor)))
145
(insert "model in \"" ess-bugs-file-root ".jag\"\n")
146
(insert "data in \"" ess-bugs-file-root ".jdt\"\n")
147
(insert (ess-replace-in-string ess-jags-temp-chains "##" "in"))
148
(insert "initialize\n")
149
(insert "update " (format "%d" (* jags-thin jags-burnin)) "\n")
150
(insert ess-jags-temp-monitor)
151
(insert "update " (format "%d" (* jags-thin jags-update)) "\n")
152
(insert (ess-replace-in-string
153
(ess-replace-in-string ess-jags-temp-chains
154
"compile, nchains([0-9]+)" "#") "##" "to"))
156
(if ess-microsoft-p (if (w32-shell-dos-semantics) "*" "\\*") "\\*")
157
", stem(\"" ess-bugs-file-root "\")\n")
159
(if ess-jags-system (progn
160
(insert "system rm -f " ess-bugs-file-root ".ind\n")
161
(insert "system ln -s " ess-bugs-file-root "index.txt " ess-bugs-file-root ".ind\n")
163
(setq jags-chains ess-jags-chains)
165
(while (< 0 jags-chains)
166
(setq ess-jags-temp-chain (format "%d" jags-chains))
168
;.txt not recognized by BOA and impractical to over-ride
169
(insert "system rm -f " ess-bugs-file-root ess-jags-temp-chain ".out\n")
170
(insert "system ln -s " ess-bugs-file-root "chain" ess-jags-temp-chain ".txt "
171
ess-bugs-file-root ess-jags-temp-chain ".out\n")
172
(setq jags-chains (- jags-chains 1)))))
175
(insert "Local Variables" ":\n")
176
(insert "ess-jags-chains:" (format "%d" ess-jags-chains) "\n")
177
(insert "ess-jags-command:\"jags\"\n")
92
jags-burnin jags-update)
93
"ESS[JAGS]: Switch to file with suffix."
94
(find-file (concat ess-bugs-file-dir ess-bugs-file-root suffix))
96
(if (equal 0 (buffer-size)) (progn
97
(if (equal ".jag" suffix) (progn
100
(insert " for (i in 1:N) {\n \n")
103
(insert "#Local Variables" ":\n")
104
(insert "#ess-jags-chains:1\n")
105
(insert "#ess-jags-monitor:(\"\")\n")
106
(insert "#ess-jags-thin:1\n")
107
(insert "#ess-jags-burnin:10000\n")
108
(insert "#ess-jags-update:10000\n")
112
(if (equal ".jmd" suffix) (let
113
((ess-jags-temp-chains "") (ess-jags-temp-monitor "") (ess-jags-temp-chain ""))
115
(if jags-chains (setq ess-jags-chains jags-chains))
116
(if jags-monitor (setq ess-jags-monitor jags-monitor))
117
(if jags-thin (setq ess-jags-thin jags-thin))
119
(setq ess-jags-temp-chains
120
(concat "compile, nchains(" (format "%d" ess-jags-chains) ")\n"))
122
(setq jags-chains ess-jags-chains)
124
(while (< 0 jags-chains)
125
(setq ess-jags-temp-chains
126
(concat ess-jags-temp-chains
127
"parameters ## \"" ess-bugs-file-root
128
".##" (format "%d" jags-chains) "\", chain("
129
(format "%d" jags-chains) ")\n"))
130
(setq jags-chains (- jags-chains 1)))
132
(setq ess-jags-temp-monitor "")
134
(while (and (listp ess-jags-monitor) (consp ess-jags-monitor))
135
(if (not (string-equal "" (car ess-jags-monitor)))
136
(setq ess-jags-temp-monitor
137
(concat ess-jags-temp-monitor "monitor "
138
(car ess-jags-monitor) ", thin(" (format "%d" ess-jags-thin) ")\n")))
139
(setq ess-jags-monitor (cdr ess-jags-monitor)))
141
(insert "model in \"" ess-bugs-file-root ".jag\"\n")
142
(insert "data in \"" ess-bugs-file-root ".jdt\"\n")
143
(insert (ess-replace-in-string ess-jags-temp-chains "##" "in"))
144
(insert "initialize\n")
145
(insert "update " (format "%d" (* jags-thin jags-burnin)) "\n")
146
(insert ess-jags-temp-monitor)
147
(insert "update " (format "%d" (* jags-thin jags-update)) "\n")
148
(insert (ess-replace-in-string
149
(ess-replace-in-string ess-jags-temp-chains
150
"compile, nchains([0-9]+)" "#") "##" "to"))
152
(if ess-microsoft-p (if (w32-shell-dos-semantics) "*" "\\*") "\\*")
153
", stem(\"" ess-bugs-file-root "\")\n")
155
(if ess-jags-system (progn
156
(insert "system rm -f " ess-bugs-file-root ".ind\n")
157
(insert "system ln -s " ess-bugs-file-root "index.txt " ess-bugs-file-root ".ind\n")
159
(setq jags-chains ess-jags-chains)
161
(while (< 0 jags-chains)
162
(setq ess-jags-temp-chain (format "%d" jags-chains))
164
;.txt not recognized by BOA and impractical to over-ride
165
(insert "system rm -f " ess-bugs-file-root ess-jags-temp-chain ".out\n")
166
(insert "system ln -s " ess-bugs-file-root "chain" ess-jags-temp-chain ".txt "
167
ess-bugs-file-root ess-jags-temp-chain ".out\n")
168
(setq jags-chains (- jags-chains 1)))))
171
(insert "Local Variables" ":\n")
172
(insert "ess-jags-chains:" (format "%d" ess-jags-chains) "\n")
173
(insert "ess-jags-command:\"jags\"\n")
183
179
(defun ess-jags-na-jmd (jags-command jags-chains)
184
"ESS[JAGS]: Perform the Next-Action for .jmd."
185
;(ess-save-and-set-local-variables)
186
(if (equal 0 (buffer-size)) (ess-jags-switch-to-suffix ".jmd")
180
"ESS[JAGS]: Perform the Next-Action for .jmd."
181
;(ess-save-and-set-local-variables)
182
(if (equal 0 (buffer-size)) (ess-jags-switch-to-suffix ".jmd")
191
187
(if (w32-shell-dos-semantics)
192
(if (string-equal ":" (substring ess-bugs-file 1 2))
194
(insert (substring ess-bugs-file 0 2))
200
(insert "cd \"" ess-bugs-file-dir "\"")
203
; (let ((ess-jags-temp-chains ""))
205
; (while (< 0 jags-chains)
206
; (setq ess-jags-temp-chains
207
; (concat (format "%d " jags-chains) ess-jags-temp-chains))
208
; (setq jags-chains (- jags-chains 1)))
210
(insert ess-bugs-batch-pre-command " " jags-command " "
211
ess-bugs-file-root ".jmd "
213
(if (or (equal shell-file-name "/bin/csh")
214
(equal shell-file-name "/bin/tcsh")
215
(equal shell-file-name "/bin/zsh")
216
(equal shell-file-name "/bin/bash"))
217
(concat ">& " ess-bugs-file-root ".jog ")
219
"> " ess-bugs-file-root ".jog 2>&1 ")
221
; ;.txt not recognized by BOA and impractical to over-ride
222
; "&& (rm -f " ess-bugs-file-root ".ind; "
223
; "ln -s " ess-bugs-file-root "index.txt " ess-bugs-file-root ".ind; "
224
; "for i in " ess-jags-temp-chains "; do; "
225
; "rm -f " ess-bugs-file-root "$i.out; "
226
; "ln -s " ess-bugs-file-root "chain$i.txt " ess-bugs-file-root "$i.out; done) "
228
ess-bugs-batch-post-command)
188
(if (string-equal ":" (substring ess-bugs-file 1 2))
190
(insert (substring ess-bugs-file 0 2))
196
(insert "cd \"" ess-bugs-file-dir "\"")
199
; (let ((ess-jags-temp-chains ""))
201
; (while (< 0 jags-chains)
202
; (setq ess-jags-temp-chains
203
; (concat (format "%d " jags-chains) ess-jags-temp-chains))
204
; (setq jags-chains (- jags-chains 1)))
206
(insert ess-bugs-batch-pre-command " " jags-command " "
207
ess-bugs-file-root ".jmd "
209
(if (or (equal shell-file-name "/bin/csh")
210
(equal shell-file-name "/bin/tcsh")
211
(equal shell-file-name "/bin/zsh")
212
(equal shell-file-name "/bin/bash"))
213
(concat ">& " ess-bugs-file-root ".jog ")
215
"> " ess-bugs-file-root ".jog 2>&1 ")
217
; ;.txt not recognized by BOA and impractical to over-ride
218
; "&& (rm -f " ess-bugs-file-root ".ind; "
219
; "ln -s " ess-bugs-file-root "index.txt " ess-bugs-file-root ".ind; "
220
; "for i in " ess-jags-temp-chains "; do; "
221
; "rm -f " ess-bugs-file-root "$i.out; "
222
; "ln -s " ess-bugs-file-root "chain$i.txt " ess-bugs-file-root "$i.out; done) "
224
ess-bugs-batch-post-command)
233
229
(defun ess-jags-na-bug ()
234
"ESS[JAGS]: Perform Next-Action for .jag"
230
"ESS[JAGS]: Perform Next-Action for .jag"
236
(if (equal 0 (buffer-size)) (ess-jags-switch-to-suffix ".jag")
238
(ess-save-and-set-local-variables)
239
(ess-jags-switch-to-suffix ".jmd"
240
ess-jags-chains ess-jags-monitor ess-jags-thin ess-jags-burnin ess-jags-update))
232
(if (equal 0 (buffer-size)) (ess-jags-switch-to-suffix ".jag")
234
(ess-save-and-set-local-variables)
235
(ess-jags-switch-to-suffix ".jmd"
236
ess-jags-chains ess-jags-monitor ess-jags-thin ess-jags-burnin ess-jags-update))
243
239
(defun ess-jags-mode ()
244
"ESS[JAGS]: Major mode for JAGS."
246
(kill-all-local-variables)
247
(ess-setq-vars-local '((comment-start . "#")))
248
(setq major-mode 'ess-jags-mode)
249
(setq mode-name "ESS[JAGS]")
250
(use-local-map ess-bugs-mode-map)
251
(setq font-lock-auto-fontify t)
252
(make-local-variable 'font-lock-defaults)
253
(setq font-lock-defaults '(ess-jags-font-lock-keywords nil t))
254
(run-hooks 'ess-bugs-mode-hook)
240
"ESS[JAGS]: Major mode for JAGS."
242
(kill-all-local-variables)
243
(ess-setq-vars-local '((comment-start . "#")))
244
(setq major-mode 'ess-jags-mode)
245
(setq mode-name "ESS[JAGS]")
246
(use-local-map ess-bugs-mode-map)
247
(setq font-lock-auto-fontify t)
248
(make-local-variable 'font-lock-defaults)
249
(setq font-lock-defaults '(ess-jags-font-lock-keywords nil t))
250
(setq ess-language "S") ; mimic S for ess-smart-underscore
251
(run-hooks 'ess-bugs-mode-hook)
256
(if (not (w32-shell-dos-semantics))
257
(add-hook 'comint-output-filter-functions 'ess-bugs-exit-notify-sh))
253
(if (not (w32-shell-dos-semantics))
254
(add-hook 'comint-output-filter-functions 'ess-bugs-exit-notify-sh))
260
257
(setq features (delete 'ess-bugs-d features))
261
258
(provide 'ess-jags-d)
260
;;; ess-jags-d.el ends here