Before Change
for key in agent_processed_observation:
val1 = agent_processed_observation[key]
val2 = teacher_processed_act[key]
if type(val1) is torch.Tensor:
self.assertTrue(bool(torch.all(torch.eq(val1, val2))),
"{}\n\n --not equal to-- \n\n{}".format(
val1,
After Change
// Get preprocessed act from teacher
defaults["model_file"] = os.path.join(tmpdir, "model")
defaults["dict_file"] = os.path.join(tmpdir, "model.dict")
defaults["pytorch_preprocess"] = True
teacher_processed_act, agent2 = get_teacher_act(defaults, teacher_processed=True) // noqa: E501
for key in agent_processed_observation:


Ripple
Ready to make a Ripple?
Verify your email address
We've sent a verification link to your email address. Please click the link to complete your registration.


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
32
33 34 35
36 import xdc.runtime.Diags;
37
38 /*!
39 * UIA Standard Error Events
40 *
41 * The UIAErr module defines standard error events that allow
42 * tooling to identify common errors in a consistent way. They are all
43 * intended to be used with the Log_writeX APIs and, in the future, with
44 * crash dump APIs, and provide a way to log errors in a more standardized
45 * way than the generic Log_error API enables.
46 *
47 * The events in this module have one of the following event priority levels:
48 * EMERGENCY: used to indicate a non-recoverable situation (e.g. a crash, with
49 * the event containing information about the cause of the crash)
50 * CRITICAL: used to indicate a sever error that should raise an alarm or
51 * cause a notification message to be sent to a system administrator.
52 * ERROR: used to indicate a recoverable error that does not require an alarm
53 * to be raised.
54 *
55 * The following special formatting specifiers may be used to define the
56 * msg field of the UIAErr events:
57
58 * %$S - a string parameter that can provide additional formatting specifiers
59 * Note that $S use in strings passed in as a paramter is not supported.
60 *@p
61 * %$F - a specifier for a string parameter containing the file name (__FILE__) and
62 * an integer parameter containing the line number (__LINE__).
63 *
64 * The generation of UIAErr events is controlled by a module's diagnostics
65 * mask, which is described in details in `{@link xdc.runtime.Diags}`.
66 * `UIAErr` events are generated only when the Diags.STATUS bit is set
67 * in the module's diagnostics mask. The Diags.STATUS bit is set to ALWAYS_ON
68 * by default.
69 *
70 * The following configuration script demonstrates how to enable use of
71 * UIAErr events within an application. Since the Diags.STATUS bits are set
72 * to ALWAYS_ON by default, no explicit code is required to enable the
73 * Diags Masks for these events.
74 *
75 * @a(Examples)
76 * Example 1: This is part of the XDC configuration file for the application:
77 *
78 * @p(code)
79 * var UIAErr = xdc.useModule('ti.uia.events.UIAErr');
80 * var Diags = xdc.useModule('xdc.runtime.Diags');
81 * var LoggerSys = xdc.useModule('xdc.runtime.LoggerSys');
82 * var Defaults = xdc.useModule('xdc.runtime.Defaults');
83 * var logger = LoggerSys.create();
84 *
85 * Defaults.common$.logger = logger;
86 * @p
87 *
88 * @p(html)
89 * <hr />
90 * @p
91 *
92 * Example 2: The following example configures a module to support logging
93 * of STATUS events, but defers the actual activation and deactivation of the
94 * logging until runtime. See the `{@link Diags#setMask Diags_setMask()}`
95 * function for details on specifying the control string.
96 *
97 * This is a part of the XDC configuration file for the application:
98 *
99 * @p(code)
100 * var UIAErr = xdc.useModule('ti.uia.events.UIAErr');
101 * var Diags = xdc.useModule('xdc.runtime.Diags');
102 * var Mod = xdc.useModule('my.pkg.Mod');
103 *
104 * Mod.common$.diags_STATUS = Diags.RUNTIME_OFF;
105 * @p
106 *
107 * This is a part of the C code for the application:
108 *
109 * @p(code)
110 * // turn on logging of STATUS events in the module
111 * Diags_setMask("my.pkg.Mod+S");
112 *
113 * // turn off logging of STATUS events in the module
114 * Diags_setMask("my.pkg.Mod-S");
115 * @p
116 */
117 module UIAErr inherits IUIAEvent {
118
119 /*!
120 * ======== error ========
121 * Event to use to log an existing software Error Code.
122 *
123 * UIAErr_error is used primarily to support logging of legacy error codes with minimal
124 * overhead. Metadata is generated for this event that provides a predefined format
125 * specifier string that can be used to display the error code with. This minimizes the
126 * number of parameters that need to be logged with the event (it only requires the
127 * actual error code to be logged). Unlike the Log_error API, no __FILE__ or
128 * __LINE__ information about the call-site is logged with the error code.
129 *
130 * @a(Example)
131 * The following C code shows how to log a legacy error code as a UIA event.
132 *
133 * @p(code)
134 * #include <xdc/runtime/Log.h>
135 * #include <ti/uia/events/UIAErr.h>
136 * ...
137 * Int myErrorCode = 0xEC0DE;
138 * Log_write1(UIAErr_error,myErrorCode);
139 * ...
140 * @p The following text is an example of what will be displayed for the event:
141 * @p(code)
142 * "ERROR: ErrorCode:0xECODE"
143 *
144 * @param(%x) integer that identifies the type of error
145 * @see #errorWithStr
146 */
147 config xdc.runtime.Log.Event error = {
148 mask: Diags.STATUS,
149 level: Diags.ERROR,
150 msg: "ERROR: ErrorCode:0x%x"
151 };
152
153 /*!
154 * ======== errorWithStr ========
155 * Event to use to log an existing software Error Code and fmt string
156 *
157 * UIAErr_errorWithStr is used primarily to support logging of legacy error codes along
158 * with user-defined strings that describe the error. Unlike the Log_error API,
159 * no __FILE__ or __LINE__ information about the call-site is logged with the error code.
160 *
161 * @a(Example)
162 * The following C code shows how to log a legacy error code as a UIA event.
163 *
164 * @p(code)
165 * #include <xdc/runtime/Log.h>
166 * #include <ti/uia/events/UIAErr.h>
167 * ...
168 * Int myErrorCode = 0xEC0DE;
169 * String myErrorStr = "Legacy Error String for error 0xECODE";
170 * ...
171 * Log_write2(UIAErr_errorWithStr,myErrorCode,(IArg)myErrorStr);
172 * ...
173 * @p The following text is an example of what will be displayed for the event:
174 * @p(code)
175 * "ERROR: ErrorCode:0xECODE. Legacy Error String for error 0xECODE"
176 *
177 * @param(%x) integer that identifies the type of error
178 * @param(%$S) fmt string used to format the event message.
179 *
180 * Up to 6 additional arguments can be logged with this event if
181 * required. The formatting string should provide format specifiers
182 * for each of the additional arguments
183 *
184 * @see #error
185 *
186 */
187 config xdc.runtime.Log.Event errorWithStr = {
188 mask: Diags.STATUS,
189 level: Diags.ERROR,
190 msg: "ERROR: ErrorCode:0x%x. %$S"
191 };
192
193 /*!
194 * ======== hwError ========
195 * hardware error event code
196 *
197 * Used to log a generic hardware error.
198 * Unlike the Log_error API, no __FILE__ or __LINE__ information about
199 * the call-site is logged with the error code.
200 *
201 * @a(Example)
202 * The following C code shows how to log a legacy error code as a UIA event.
203 *
204 * @p(code)
205 * #include <xdc/runtime/Log.h>
206 * #include <ti/uia/events/UIAErr.h>
207 * ...
208 * Int myHWErrorCode = 0xEC0DE;
209 * ...
210 * Log_write1(UIAErr_hwError,myHWErrorCode);
211 * ...
212 * @p The following text is an example of what will be displayed for the event:
213 * @p(code)
214 * "HW ERROR: ErrorCode:0xECODE."
215 *
216 * @param(%x) integer that identifies the type of warning
217 * @see #error
218 */
219 config xdc.runtime.Log.Event hwError = {
220 mask: Diags.STATUS,
221 level: Diags.ERROR,
222 msg: "HW ERROR: ErrorCode:0x%x"};
223
224 /*!
225 * ======== hwErrorWithStr ========
226 * hardware error event code and fmt string
227 *
228 * Used to log a generic hardware error.
229 * @a(Example)
230 * The following C code shows how to log a legacy error code and an
231 * associated string as a UIA event.
232 *
233 * @p(code)
234 * #include <xdc/runtime/Log.h>
235 * #include <ti/uia/events/UIAErr.h>
236 * ...
237 * Int myHWErrorCode = 0xEC0DE;
238 * String myHWErrorStr = "My description of hardware error 0xEC0DE";
239 * ...
240 * Log_write2(UIAErr_hwErrorWithStr,myHWErrorCode,(IArg)myHWErrorStr);
241 * ...
242 * @p The following text is an example of what will be displayed for the event:
243 * @p(code)
244 * "HW ERROR: ErrorCode:0xECODE. My description of hardware error 0xEC0DE"
245 *
246 * @param(%x) integer that identifies the type of error
247 * @param(%$S) fmt string used to format the event message.
248 *
249 * Up to 6 additional arguments can be logged with this event if
250 * required. The formatting string should provide format specifiers
251 * for each of the additional arguments
252 *
253 * @see #error
254 *
255 */
256 config xdc.runtime.Log.Event hwErrorWithStr = {
257 mask: Diags.STATUS,
258 level: Diags.ERROR,
259 msg: "HW ERROR: ErrorCode:0x%x. %$S"};
260
261 /*!
262 * ======== fatal ========
263 * fatal error code
264 *
265 * Used to log a fatal, nonrecoverable error (Event level = EMERGENCY)
266 *
267 * @a(Example)
268 * The following C code shows how to log a fatal error code as a UIA event.
269 *
270 * @p(code)
271 * #include <xdc/runtime/Log.h>
272 * #include <ti/uia/events/UIAErr.h>
273 * ...
274 * Int myFatalErrorCode = 0xDEADC0DE;
275 * ...
276 * Log_write1(UIAErr_fatal,myFatalErrorCode);
277 * ...
278 * @p The following text is an example of what will be displayed for the event:
279 * @p(code)
280 * "FATAL ERROR: ErrorCode:0xDEADC0DE."
281 * @param(%x) integer that identifies the type of error
282 * @see #error
283 */
284 config xdc.runtime.Log.Event fatal = {
285 mask: Diags.STATUS,
286 level: Diags.EMERGENCY,
287 msg: "FATAL ERROR: ErrorCode:0x%x"};
288
289 /*!
290 * ======== fatalWithStr ========
291 * fatal error event code and fmt string
292 *
293 * Used to log a fatal, nonrecoverable error.
294 *
295 * @a(Example)
296 * The following C code shows how to log a legacy error code and an
297 * associated string as a UIA event.
298 *
299 * @p(code)
300 * #include <xdc/runtime/Log.h>
301 * #include <ti/uia/events/UIAErr.h>
302 * ...
303 * Int myFatalErrorCode = 0xDEADC0DE;
304 * String myFatalErrorStr = "My description of fatal error 0xDEADC0DE";
305 * ...
306 * Log_write2(UIAErr_fatalWithStr,myFatalErrorCode,(IArg)myFatalErrorStr);
307 * ...
308 * @p The following text is an example of what will be displayed for the event:
309 * @p(code)
310 * "FATAL ERROR: ErrorCode:0xDEADC0DE. My description of fatal error 0xDEADC0DE"
311 *
312 * @param(%x) integer that identifies the type of error
313 * @param(%$S) fmt string used to format the event message.
314 *
315 * Up to 6 additional arguments can be logged with this event if
316 * required. The formatting string should provide format specifiers
317 * for each of the additional arguments
318 * @see #error
319 */
320 config xdc.runtime.Log.Event fatalWithStr = {
321 mask: Diags.STATUS,
322 level: Diags.EMERGENCY,
323 msg: "FATAL ERROR: ErrorCode:0x%x. %$S"};
324
325 /*!
326 * ======== critical ========
327 * critical error event code
328 *
329 * Used to log a critical error in which the system
330 * has e.g. had to kill certain operations in order to
331 * keep running. (Event Level = CRITICAL)
332 *
333 * @a(Example)
334 * The following C code shows how to log a fatal error code as a UIA event.
335 *
336 * @p(code)
337 * #include <xdc/runtime/Log.h>
338 * #include <ti/uia/events/UIAErr.h>
339 * ...
340 * Int myCriticalErrorCode = 0xACODE;
341 * ...
342 * Log_write1(UIAErr_critical,myCriticalErrorCode);
343 * ...
344 * @p The following text is an example of what will be displayed for the event:
345 * @p(code)
346 * "CRITICAL ERROR: ErrorCode:0xACODE."
347 * @param(%x) integer that identifies the type of error
348 *
349 * @see #error
350 */
351 config xdc.runtime.Log.Event critical = {
352 mask: Diags.STATUS,
353 level: Diags.CRITICAL,
354 msg: "CRITICAL ERROR: ErrorCode:0x%x"};
355
356 /*!
357 * ======== criticalWithStr ========
358 * critical error event code and fmt string
359 *
360 * Used to log a critical error in which the system
361 * has e.g. had to kill certain operations in order to
362 * keep running. (Event Level = CRITICAL)
363 *
364 * @a(Example)
365 * The following C code shows how to log a legacy error code and an
366 * associated string as a UIA event.
367 *
368 * @p(code)
369 * #include <xdc/runtime/Log.h>
370 * #include <ti/uia/events/UIAErr.h>
371 * ...
372 * Int myCriticalErrorCode = 0xAC0DE;
373 * ...
374 * Log_write2(UIAErr_criticalWithStr,myCriticalErrorCode,(IArg)"My description of critical error 0xAC0DE");
375 * ...
376 * @p The following text is an example of what will be displayed for the event:
377 * @p(code)
378 * "CRITICAL ERROR: ErrorCode:0xAC0DE. My description of critical error 0xAC0DE"
379 *
380 * @param(%x) integer that identifies the type of error
381 * @param(%$S) fmt string used to format the event message.
382 *
383 * Up to 6 additional arguments can be logged with this event if
384 * required. The formatting string should provide format specifiers
385 * for each of the additional arguments
386 *
387 * @see #error
388 */
389 config xdc.runtime.Log.Event criticalWithStr = {
390 mask: Diags.STATUS,
391 level: Diags.CRITICAL,
392 msg: "CRITICAL ERROR: ErrorCode:0x%x. %$S"};
393 /*!
394 * ======== exception ========
395 * exception event code
396 *
397 * Used to log that an exception occurred.
398 * Typically used with LogSnapshot or LogCrashDump APIs to
399 * log stack dump data that identifies why the exception occurred.
400 * @a(Example)
401 * The following C code shows how to log an exception that identifies
402 * the file and line number that the exception occurred at as a UIA event.
403 *
404 * @p(code)
405 * #include <xdc/runtime/Log.h>
406 * #include <ti/uia/events/UIAErr.h>
407 * ...
408 * Log_write2(UIAErr_exception,(IArg)__FILE__,__LINE__);
409 * ...
410 * @p The following text is an example of what will be displayed for the event:
411 * @p(code)
412 * "ERROR: Exception at demo.c line 1234."
413 * @param(__FILE__) The file that the exception occurred in
414 * @param(__LINE__) The line that the exception occurred at
415 *
416 * @see #error
417 */
418 config xdc.runtime.Log.Event exception = {
419 mask: Diags.STATUS,
420 level: Diags.ERROR,
421 msg: "ERROR: Exception at %$F."};
422
423 /*!
424 * ======== uncaughtException ========
425 * uncaughtException event code
426 *
427 * Used to log that an uncaught exception occurred.
428 * Typically used with LogSnapshot or LogCrashDump APIs to
429 * log stack dump data that identifies why the exception occurred.
430 * @a(Example)
431 * The following C code shows how to log an exception that identifies
432 * the file and line number that the exception occurred at as a UIA event.
433 *
434 * @p(code)
435 * #include <xdc/runtime/Log.h>
436 * #include <ti/uia/events/UIAErr.h>
437 * ...
438 * Log_write2(UIAErr_uncaughtException,(IArg)__FILE__,__LINE__);
439 * ...
440 * @p The following text is an example of what will be displayed for the event:
441 * @p(code)
442 * "ERROR: Uncaught Exception at demo.c line 1234."
443 * @param(__FILE__) The file that the exception occurred in
444 * @param(__LINE__) The line that the exception occurred at
445 *
446 */
447 config xdc.runtime.Log.Event uncaughtException = {
448 mask: Diags.STATUS,
449 level: Diags.ERROR,
450 msg: "ERROR: Uncaught Exception at %$F."};
451
452 /*!
453 * ======== nullPointerException ========
454 * nullPointerException event code
455 *
456 * Used to log that a null pointer exception occurred.
457 * Typically used with LogSnapshot or LogCrashDump APIs to
458 * log stack dump data that identifies why the exception occurred.
459 * @a(Example)
460 * The following C code shows how to log an exception that identifies
461 * the file and line number that the exception occurred at as a UIA event.
462 *
463 * @p(code)
464 * #include <xdc/runtime/Log.h>
465 * #include <ti/uia/events/UIAErr.h>
466 * ...
467 * Log_write2(UIAErr_nullPointerException,(IArg)__FILE__,__LINE__);
468 * ...
469 * @p The following text is an example of what will be displayed for the event:
470 * @p(code)
471 * "ERROR: Null Pointer Exception at demo.c line 1234."
472 * @param(__FILE__) The file that the exception occurred in
473 * @param(__LINE__) The line that the exception occurred at
474 */
475 config xdc.runtime.Log.Event nullPointerException = {
476 mask: Diags.STATUS,
477 level: Diags.ERROR,
478 msg: "ERROR: Null Pointer Exception at %$F."};
479
480 /*!
481 * ======== unexpectedInterrupt ========
482 * unexpectedInterrupt event code
483 *
484 * Used to log that an unexpected interrupt occurred.
485 * @a(Example)
486 * The following C code shows how to log an exception that identifies
487 * the file and line number that the exception occurred at as a UIA event.
488 *
489 * @p(code)
490 * #include <xdc/runtime/Log.h>
491 * #include <ti/uia/events/UIAErr.h>
492 * ...
493 * Log_write2(UIAErr_unexpectedInterrupt,(IArg)__FILE__,__LINE__);
494 * ...
495 * @p The following text is an example of what will be displayed for the event:
496 * @p(code)
497 * "ERROR: Null Pointer Exception at demo.c line 1234."
498 * @param(__FILE__) The file that the exception occurred in
499 * @param(__LINE__) The line that the exception occurred at
500 */
501 config xdc.runtime.Log.Event unexpectedInterrupt = {
502 mask: Diags.STATUS,
503 level: Diags.ERROR,
504 msg: "ERROR: Unexpected Interrupt at %$F."};
505
506 /*!
507 * ======== memoryAccessFault ========
508 * memoryAccessFault event code
509 *
510 * Used to log that a memory access fault occurred.
511 * @a(Example)
512 * The following C code shows how to log an exception that identifies
513 * the file and line number that the exception occurred at as a UIA event.
514 * Comments in the code can then provide further explication of the error.
515 *
516 * @p(code)
517 * #include <xdc/runtime/Log.h>
518 * #include <ti/uia/events/UIAErr.h>
519 * ...
520 * Log_write3(UIAErr_memoryAccessFault,(IArg)__FILE__,__LINE__,(IArg)badAdrs);
521 * ...
522 * @p The following text is an example of what will be displayed for the event:
523 * @p(code)
524 * "ERROR: Memory Access Fault at demo.c line 1234. [ADRS]0xFFFFFFFF"
525 * @param(__FILE__) The file that the exception occurred in
526 * @param(__LINE__) The line that the exception occurred at
527 * @param(adrs) The address that caused the memory access fault
528 */
529 config xdc.runtime.Log.Event memoryAccessFault = {
530 mask: Diags.STATUS,
531 level: Diags.ERROR,
532 msg: "ERROR: Memory Access Fault at %$F. [ADRS]0x%x"};
533
534 /*!
535 * ======== securityException ========
536 * securityException event code
537 *
538 * Used to log that a security exception occurred.
539 * @a(Example)
540 * The following C code shows how to log an exception that identifies
541 * the file and line number that the exception occurred at as a UIA event.
542 * Comments in the code can then provide further explication of the error.
543 *
544 * @p(code)
545 * #include <xdc/runtime/Log.h>
546 * #include <ti/uia/events/UIAErr.h>
547 * ...
548 * Log_write2(UIAErr_securityException,(IArg)__FILE__,__LINE__);
549 * ...
550 * @p The following text is an example of what will be displayed for the event:
551 * @p(code)
552 * "ERROR: Security Exception at demo.c line 1234."
553 * @param(__FILE__) The file that the exception occurred in
554 * @param(__LINE__) The line that the exception occurred at
555 */
556 config xdc.runtime.Log.Event securityException = {
557 mask: Diags.STATUS,
558 level: Diags.ERROR,
559 msg: "ERROR: Security Exception at %$F."};
560
561 /*!
562 * ======== divisionByZero ========
563 * divisionByZero event code
564 *
565 * Used to log that divide by zero exception occurred.
566 * @a(Example)
567 * The following C code shows how to log an exception that identifies
568 * the file and line number that the exception occurred at as a UIA event.
569 * Comments in the code can then provide further explication of the error.
570 *
571 * @p(code)
572 * #include <xdc/runtime/Log.h>
573 * #include <ti/uia/events/UIAErr.h>
574 * ...
575 * Log_write2(UIAErr_divisionByZero,(IArg)__FILE__,__LINE__);
576 * ...
577 * @p The following text is an example of what will be displayed for the event:
578 * @p(code)
579 * "ERROR: Division by zero at demo.c line 1234."
580 * @param(__FILE__) The file that the exception occurred in
581 * @param(__LINE__) The line that the exception occurred at
582 */
583 config xdc.runtime.Log.Event divisionByZero = {
584 mask: Diags.STATUS,
585 level: Diags.ERROR,
586 msg: "ERROR: Division by zero at %$F."};
587
588 /*!
589 * ======== overflowException ========
590 * overflowException event code
591 *
592 * Used to log that an overflow exception occurred.
593 * @a(Example)
594 * The following C code shows how to log an exception that identifies
595 * the file and line number that the exception occurred at as a UIA event.
596 * Comments in the code can then provide further explication of the error.
597 *
598 * @p(code)
599 * #include <xdc/runtime/Log.h>
600 * #include <ti/uia/events/UIAErr.h>
601 * ...
602 * Log_write2(UIAErr_overflowException,(IArg)__FILE__,__LINE__);
603 * ...
604 * @p The following text is an example of what will be displayed for the event:
605 * @p(code)
606 * "ERROR: Overflow exception at demo.c line 1234."
607 * @param(__FILE__) The file that the exception occurred in
608 * @param(__LINE__) The line that the exception occurred at
609 */
610 config xdc.runtime.Log.Event overflowException = {
611 mask: Diags.STATUS,
612 level: Diags.ERROR,
613 msg: "ERROR: Overflow exception at %$F."};
614
615 /*!
616 * ======== indexOutOfRange ========
617 * indexOutOfRange event code
618 *
619 * Used to log that an index out of range condition occurred.
620 * @a(Example)
621 * The following C code shows how to log an exception that identifies
622 * the file and line number that the exception occurred at as a UIA event.
623 * Comments in the code can then provide further explication of the error.
624 *
625 * @p(code)
626 * #include <xdc/runtime/Log.h>
627 * #include <ti/uia/events/UIAErr.h>
628 * ...
629 * Log_write3(UIAErr_indexOutOfRange,(IArg)__FILE__,__LINE__,badIndex);
630 * ...
631 * @p The following text is an example of what will be displayed for the event:
632 * @p(code)
633 * "ERROR: OIndex out of range at demo.c line 1234. [INDEX]0xFFFFFFFF"
634 * @param(__FILE__) The file that the exception occurred in
635 * @param(__LINE__) The line that the exception occurred at
636 * @param(index) The index value that was out of range
637 */
638 config xdc.runtime.Log.Event indexOutOfRange = {
639 mask: Diags.STATUS,
640 level: Diags.ERROR,
641 msg: "ERROR: Index out of range at %$F. [INDEX]0x%x"};
642
643 /*!
644 * ======== notImplemented ========
645 * notImplemented event code
646 *
647 * Used to log that an attempt to access a feature that is not implemented
648 * @a(Example)
649 * The following C code shows how to log an exception that identifies
650 * the file and line number that the exception occurred at as a UIA event.
651 * Comments in the code can then provide further explication of the error.
652 *
653 * @p(code)
654 * #include <xdc/runtime/Log.h>
655 * #include <ti/uia/events/UIAErr.h>
656 * ...
657 * Log_write2(UIAErr_notImplemented,(IArg)__FILE__,__LINE__);
658 * ...
659 * @p The following text is an example of what will be displayed for the event:
660 * @p(code)
661 * "ERROR: Attempt to access feature that is not implemented at demo.c line 1234."
662 * @param(__FILE__) The file that the exception occurred in
663 * @param(__LINE__) The line that the exception occurred at
664 */
665 config xdc.runtime.Log.Event notImplemented = {
666 mask: Diags.STATUS,
667 level: Diags.ERROR,
668 msg: "ERROR: Attempt to access feature that is not implemented at %$F."};
669
670 /*!
671 * ======== stackOverflow ========
672 * stackOverflow event code
673 *
674 * Used to log that a stack overflow was detected. (Event Level = CRITICAL)
675 * @a(Example)
676 * The following C code shows how to log an exception that identifies
677 * the file and line number that the exception occurred at as a UIA event.
678 * Comments in the code can then provide further explication of the error.
679 *
680 * @p(code)
681 * #include <xdc/runtime/Log.h>
682 * #include <ti/uia/events/UIAErr.h>
683 * ...
684 * Log_write2(UIAErr_stackOverflow,(IArg)__FILE__,__LINE__);
685 * ...
686 * @p The following text is an example of what will be displayed for the event:
687 * @p(code)
688 * "ERROR: Stack Overflow detected at demo.c line 1234."
689 * @param(__FILE__) The file that the exception occurred in
690 * @param(__LINE__) The line that the exception occurred at
691 */
692 config xdc.runtime.Log.Event stackOverflow = {
693 mask: Diags.STATUS,
694 level: Diags.CRITICAL,
695 msg: "ERROR: Stack Overflow detected at %$F."};
696
697 /*!
698 * ======== illegalInstruction ========
699 * illegalInstruction event code
700 *
701 * Used to log that an illegal instruction was executed
702 * @a(Example)
703 * The following C code shows how to log an exception that identifies
704 * the file and line number that the exception occurred at as a UIA event.
705 * Comments in the code can then provide further explication of the error.
706 *
707 * @p(code)
708 * #include <xdc/runtime/Log.h>
709 * #include <ti/uia/events/UIAErr.h>
710 * ...
711 * Log_write2(UIAErr_illegalInstruction,(IArg)__FILE__,__LINE__);
712 * ...
713 * @p The following text is an example of what will be displayed for the event:
714 * @p(code)
715 * "ERROR: Illegal Instruction executed at demo.c line 1234."
716 * @param(__FILE__) The file that the exception occurred in
717 * @param(__LINE__) The line that the exception occurred at
718 */
719 config xdc.runtime.Log.Event illegalInstruction = {
720 mask: Diags.STATUS,
721 level: Diags.ERROR,
722 msg: "ERROR: Illegal Instruction executed at %$F."};
723
724 /*!
725 * ======== entryPointNotFound ========
726 * entryPointNotFound event code
727 *
728 * Used to log that a module or DLL entry point was not found
729 * @a(Example)
730 * The following C code shows how to log an exception that identifies
731 * the file and line number that the exception occurred at as a UIA event.
732 * Comments in the code can then provide further explication of the error.
733 *
734 * @p(code)
735 * #include <xdc/runtime/Log.h>
736 * #include <ti/uia/events/UIAErr.h>
737 * ...
738 * Log_write2(UIAErr_entryPointNotFound,(IArg)__FILE__,__LINE__);
739 * ...
740 * @p The following text is an example of what will be displayed for the event:
741 * @p(code)
742 * "ERROR: Entry Point Not Found at demo.c line 1234."
743 * @param(__FILE__) The file that the exception occurred in
744 * @param(__LINE__) The line that the exception occurred at
745 */
746 config xdc.runtime.Log.Event entryPointNotFound = {
747 mask: Diags.STATUS,
748 level: Diags.ERROR,
749 msg: "ERROR: Entry Point Not Found at %$F."};
750
751 /*!
752 * ======== moduleNotFound ========
753 * moduleNotFound event code
754 *
755 * Used to log that a module was not found
756 * @a(Example)
757 * The following C code shows how to log an exception that identifies
758 * the file and line number that the exception occurred at as a UIA event.
759 * Comments in the code can then provide further explication of the error.
760 *
761 * @p(code)
762 * #include <xdc/runtime/Log.h>
763 * #include <ti/uia/events/UIAErr.h>
764 * ...
765 * Log_write3(UIAErr_moduleNotFound,(IArg)__FILE__,__LINE__,moduleIdThatWasNotFound);
766 * ...
767 * @p The following text is an example of what will be displayed for the event:
768 * @p(code)
769 * "ERROR: Module not found at demo.c line 1234. [MODULE_ID]0x32903"
770 * @param(__FILE__) The file that the exception occurred in
771 * @param(__LINE__) The line that the exception occurred at
772 * @param(moduleId) The Module ID of the module that was not found
773 */
774 config xdc.runtime.Log.Event moduleNotFound = {
775 mask: Diags.STATUS,
776 level: Diags.ERROR,
777 msg: "ERROR: Module not found at %$F. [MODULE_ID]0x%x."};
778
779 /*!
780 * ======== floatingPointError ========
781 * floatingPointError event code
782 *
783 * Used to log that a floating point error occurred
784 * @a(Example)
785 * The following C code shows how to log an exception that identifies
786 * the file and line number that the exception occurred at as a UIA event.
787 * Comments in the code can then provide further explication of the error.
788 *
789 * @p(code)
790 * #include <xdc/runtime/Log.h>
791 * #include <ti/uia/events/UIAErr.h>
792 * ...
793 * Log_write2(UIAErr_floatingPointError,(IArg)__FILE__,__LINE__);
794 * ...
795 * @p The following text is an example of what will be displayed for the event:
796 * @p(code)
797 * "ERROR: Floating Point Error at demo.c line 1234."
798 * @param(__FILE__) The file that the exception occurred in
799 * @param(__LINE__) The line that the exception occurred at
800 */
801 config xdc.runtime.Log.Event floatingPointError = {
802 mask: Diags.STATUS,
803 level: Diags.ERROR,
804 msg: "ERROR: Floating Point Error at %$F."};
805
806 /*!
807 * ======== invalidParameter ========
808 * invalidParameter event code
809 *
810 * Used to log that an invalid parameter was detected
811 * @a(Example)
812 * The following C code shows how to log an exception that identifies
813 * the file and line number that the exception occurred at as a UIA event.
814 * Comments in the code can then provide further explication of the error.
815 *
816 * @p(code)
817 * #include <xdc/runtime/Log.h>
818 * #include <ti/uia/events/UIAErr.h>
819 * ...
820 * Void myFunc(Int caseNumber){
821 * switch(caseNumber){
822 * ...
823 * break;
824 * default :
825 * Log_write4(UIAErr_floatingPointError,(IArg)__FILE__,__LINE__,1,caseNumber);
826 * }
827 * }
828 *
829 * @p The following text is an example of what will be displayed for the event:
830 * @p(code)
831 * "ERROR: Invalid Parameter at demo.c line 1234. [ParamNum]1 [ParamValue]0xFFFFFFFF"
832 * @param(__FILE__) The file that the exception occurred in
833 * @param(__LINE__) The line that the exception occurred at
834 * @param(paramNum) The parameter number in the function's signature that was invalid
835 * @param(paramValue) The invalid parameter value
836 */
837 config xdc.runtime.Log.Event invalidParameter = {
838 mask: Diags.STATUS,
839 level: Diags.ERROR,
840 msg: "ERROR: Invalid Parameter at %$F. [ParamNum]%d [ParamValue]0x%x"};
841
842 }


CHAPTER 40
THE YEAR 1997
The JAIC finally managed to complete their Report and publish the English version together with 2 Supplements on 3 December while the Swedish version took another year. Before the publication, however, many things happened which shall be explained in the following Subchapters.
40.1
The Development until May 1997January: Due to the illness of Börje Stenström the position of the technical head of the JAIC was apparently taken over by Tuomo Karppinen assisted by Mikael Huss and Klaus Rahka. Karppinen phoned on 17 January and reported the following:
- They are still making small changes to the report. They had the lugs of the Atlantic lock at VTT and have analysed the paint layers. They found some 7-8, grey, white, red, blue paint and are certain now that the lugs were on board for quite some time.
- They have also spoken to the Turku yard, who stated, never to have painted the forepeak deck area, thus it must have been the crew.
- Have told him about the change of shape and he said the lugs from board have the same shape as the von Tell drawing and as the mock-up during the break tests, which is correct except that the aft part is vertically cut off.
- He is unable to give an estimate when their report might be completed, a lot depends on the meeting next week.The JAIC met in Helsinki on 24/25 January and continued to discuss the final version of the Report. The protocol of the previous meeting on 16/17 December in Pårnu was distributed. It reveals that Kari Lethola had spoken to Edelmann/F.B.N. who had told him that there were two persons in the administration, who knew that there was a "problem" with accepting the bow ramp as upper extension of the collision bulkhead, but that it was common practice to do so.
This protocol further reveals that Tuomo Karppinen had contact to a Mr. Mäkälainen, who had stated that locking devices had been changed and that Uno Laur had demanded a written statement from this man. The person is unknown to this 'Group of Experts' and nothing about him is mentioned in the JAIC Report. This and other protocols finally reveal, that the Sjöfartsverket "observer" Sten Andersson actively participated in the drafting of the Final Report. He was obviously treated as a commission member and apparently did behave like that. Enn Neidre participated also.
From one of the relative organisations the information was received that the handling of the ESTONIA case by the Swedish Government had been moved away from the Ministry for Communication and Transport (Minister Inez Uzman) to the Ministry of Defence - "Department for Psychological Defence".February: The JAIC met again in Helsinki on 19/20 February. The discussion of the chapters of the final Report was continued and Enn Neidre attended again. On 21 February Tuomo Karppinen phoned again and reported about the results of the meeting:
- In principle they do agree on the contents of all the chapters - they however have to be proof-read.
- But they did not agree on the conclusions and recommendations. Therefore they will meet again on 12 March and remain together until everything is agreed.
- The conclusion will be that one wave impact broke the visor at 01.00 hours.
- All attachments including the hinges broke a few minutes after 01.00 hours.
- The first water on the car deck was at 01.10.12.
- Then it took about 10 minutes for the visor to cut through the deck beams and then the ramp was pulled open.
- 01.20/22 the main engines stopped, vessel started to drift, starboard side to the wind.
- Only two passengers have reported water in the 1st deck.
Note: Actually 9 survivors reported water on the 1st deck, of which two already before the big heel.
- At 01.30 hours ESTONIA was on the side.
On 25 February Klaus Rahka reported the following:
- He wanted the report from the Institute for all the break tests performed (was sent to him).
- He promised to send a copy of the final findings (which he never did).
- They ignored the passenger video - see Subchapter 39.3 - because the pictures are jumping too much. It was explained to him that the pictures did not jump on the copy which was jointly viewed in Helsinki, but he was not interested. His attention was drawn to the fact that the starboard hinge bolt was standing without bushing on the rail, which confirmed that the bushing cannot have been complete as otherwise it couldn't have fallen off the bolt and would have remained attached to the bolt as evidently the point bushing did. He was not interested, the decision had already been made jointly.
- They had come to the conclusion that the load on the visor was about 60 ts which was sufficient to break all the locks.
- He believes that the welding seams of the 1st mock-up had been 5 mm instead of 3 mm.
- Börje Stenström had now officially resigned from the case. Note: Börje Stenström passed away on 25 February.March: On 5 March Tuomo Karppinen faxed page 13 of the Draft Report and requested details about the communication between the yard/ BV/ von Tell, etc. which was complied with by sending the respective chapter of the Report of this 'Group of Experts'. From 12-16 March the JAIC met again to finalize the Report which failed, although - as stated above - it had been the intention to stay together until the last disputes were solved. On 17 March "DAGENS NYHETER" as well as "SVENSKA DAGBLADET" published articles about the internal disputes in the JAIC between Estonia on the one side and Sweden/Finland on the other concerning the behaviour of the crew, respectively how much blame was to be put on the crew. Furthermore, the attention of the public was drawn to the letter Stenström wrote at the beginning of December 1996 to Dr. Holtappels indicating that the JAIC would not point to Meyer Werft having installed the faulty locks by not excluding that the installations could have been changed after the vessel had left the yard.
April: At the beginning of this month the stowage plan showing the reconstruction of the condition on the car deck according to the cargo manifest was sent from Hamburg to Helsinki. In exchange, a copy of the KTH-Report about the examination of the hinge material was received.
During the second half of this month a contact to the Turku Repair Yard was established which resulted after some time in the receipt of very valuable documentation, i.e. the repair-specifications, -quotations and invoices concern-ing the time before, during and after the take-over of the ferry by N&T - see Subchapter 3.4.
Tuomo Karppinen phoned on 23 April and requested help with regard to
- the memo on magnetic limit switches (made up by the Estonian JAIC - see Enclosure 12.5.172);
- type of these switches, names/telephone numbers of the electricians having installed them;
all of which was sent to him.
In exchange he sent the Leif Bogren and the Hangö statements, which were received the following day.
He reported further that proof-reading and lay-out of the Report would not be completed before the end of May, i.e. the Report might be printed before midsummer, thus could be published just before the vacation season begins, which the JAIC would prefer.
At a meeting on 18 April with the Stockholm public relations company H&H the idea was developed to present the findings of this 'Group of Experts' to the Swedish public at an exhibition in Stockholm at the same time when the Report of the JAIC was presented and the media and the public could come to the exhibition and check, compare and discuss the results. This was decided during the following days and the time was set for the week before midsummer, which left two months for preparations.May: Tuomo Karppinen phoned on 6 May and stated that
- they were still proof-reading;
- they had planned some sort of seminar under the chairmanship of Prof. Rutgersson from KTH in Stockholm where they wanted to present their technical findings to raise the profile of the JAIC, however this can, of course, only be done after the publication of their final report, which will probably be during the week before midsummer.
On 16 May Karppinen phoned again and told that they were making good progress, about half of the Report was already in the printing house in Helsinki. The day before they had gone through part of the Report with their English language expert. It is most unlikely that they will attend the seminar. It is still under consideration between Kari Lethola, Uno Laur and Olof Forssberg whether this 'Group of Experts' will get the part of their Report dealing with Meyer Werft matters.
On 20 May journalist Anders Hellberg from DAGENS NYHETER reported that the seminar had been postponed.40.1.1
The Dismissal of Olof ForssbergOn 26 May the interview quote below by radio journalist Erik Ridderstolpe with Olof Forssberg was broadcasted in Swedish Radio:
Journalist (J), Olof Forssberg (OF)
"Speaker: The Swedish chairman of the JAIC has lied about a letter concerning important facts about why Estonia and other vessels were built in an incorrect way. Despite the fact that Olof Forssberg has been assigned by the government to lead the commission's work in trying to establish the truth behind the sinking of Estonia, he has repeatedly lied.J: So you have never seen this letter?
OF: No.
J: Never at all?
OF: No. It must have been delivered faulty. I will receive a new copy on Monday ... It wasn't today's mail.
J: Isn't that strange since the letter was sent to you a long time ago.
OF: These things happen. The post is not always reliable.
J: So you haven't seen what this letter contains at all?
OF: No.
Speaker Olof Forssberg is chairman of the JAIC. He is the one responsible for establishing the truth behind the catastrophe. He has already been heavily criticised for his way of handling the investigation. This time the issue is sensitive information about the Sjöfartsverket. It is information that shows that Sjöfartsverket for many years didn't control the placement of the very important collision bulkhead that shall prevent water from entering the car deck in an emergency situation. If Estonia's collision bulkhead had been placed in the right position, the vessel would never have sunk. Olof Forssberg has received and read the letter, but had not registered it. He has deliberately or non-deliberately misplaced the letter. At least one other occasion he has denied that he has received the letter, and he has asked the sender to sent the letter again just so that it would seem as if he had never received it.J: But I just can't understand why you are lying?
OF: I can't understand it either and I must say that I am ashamed over having lied. I have no explanation. I regret that I have been handling the truth carelessly. The reason I have asked you to come here today is partly that I want to explain that I have been lying and also apologise to you.
J: Is this common behaviour for the chairman of the JAIC?
OF: Absolutely not. It goes without saying that the answer to that question is no.
J: Is this the way you normally handle documents?
OF: Absolutely not. I always register documents very carefully. Actually I think that the reason for this omission, or rather consequence of, was the fact that the person who handles the Estonia file was on vacation.
J: How do you think this affects the credibility of the JAIC?
OF: This is what concerns me most. There have been a few occasions where I not even today can understand why I have acted with such a lack of judgement in certain situations.
J: The motive behind this is still not quite clear. Why did you lie about the letter?
OF: ..I...the..hm..I don't think that the motive is unclear. Quite simply this document was received or I read it through and I put it somewhere and then I didn't think anymore about it.
J: But it is one thing to do that, and quite another to deny the existence of the document. And also you don't have the document here in your office.
OF: ...n..ne...I...I don't know where it is right now, the letter has now been miscarried but that is not a problem since I have asked the sender to send the same letter once more.
J. That you did in order to look good and so that you could say that you had now received the letter.
OF: I have now explained the whole situation to you and I think that, well, that things are as they are."The subject of the discussion which subsequently turned out to be the reason for the dismissal of Olof Forssberg by Minister Inez Uzman is attached as Enclosure 2.2.3. It is a letter concerning a directors' meeting at Sjöfartsverket dated 07.04.59.
On 28 May Tuomo Karppinen phoned and reported the following:
- Ridderstolpe from Swedish Radio had phoned Forssberg and asked whether he had received a paper from 1959, of which he, Karppinen, also has a copy. Forssberg's answer was no, although he knew that he had the copy but could not find it. He asked Sjöfartsverket to send the letter again which was, however, delayed. So he told Ridderstolpe that he did not have it and never saw it and was subsequently proven to have lied. The first letter was not registered because it was considered unimportant. Ridderstolpe got a tip from somebody inside Sjöfartsverket.
- General Director of "Statens Havarie Kommission" (SHK) is a full time job. In case the Government should decide to put an outsider in this position, it will take several months and will cause further delay to the publication of the Report. Therefore it has to be assumed that it will be somebody from the Government administration.
- He has sent two more Chapters to the printing house.
- They are still of the opinion that it all started with the failure of the visor locking devices on course 287° and full speed, but some within the JAIC believe that it started with the hinges.Olof Forssberg was dismissed from his position as Chairman of the JAIC on 27 May and replaced by Ann-Louise Eksborg on 16 June. The lady had been working in the legal department of the Ministry of Defence before. Also on the same day Captain Olle Noord, nautical expert up to that time, was appointed member in replacement of Börje Stenström, i.e. now two master mariners were members (Rosengren and Noord). Naval architects were no more present in the JAIC, which, however, did not mean that more emphasis was put on the up to then widely neglected nautical aspects of the case. Olof Forssberg attended for the last time at a working meeting of the Swedish part of the JAIC on 4 June.
Note: Olof Forssberg was very soon appointed an appeal court judge. One wonders.40.2
The First Exhibition in Stockholm40.2.1
PreparationsThe investigation events were summarized in a brochure in English and Swedish languages - the English version is attached as Enclosure 40.2 - which were distributed to the visitors. In further preparation, two exhibition guides were acquainted with the investigation results, these were
- from Sweden, Captain Erland von Hofsten, 68 years old, retired Stena Line captain and Chairman of the Swedish Sailors Foundation, and
- from Finland, Captain Peter Jansson, 53 years old, maritime consultant and owner of Oy Mariners Assistance, Porvoo.
Both spent one week in Hamburg, read through the material, viewed the videos and discussed open questions with this 'Group of Experts'.
For the exhibition the history of the vessel from newbuilding to sinking was illustrated on big paper sheets. In addition, the topics of the investigation, e.g. the passenger video, the condition of the visor hinges, etc. were illustrated on separate sheets. Furthermore, one of the mock-ups of the Atlantic locks, broken at the break test, a model of the "VIKING SALLY", models of intact and damaged visor hinges, the hinge mock-up with the burning test, numerous drawings and other documentations of interest were shown at the exhibition which took place in the "Gamla Spårvägshallarna" on Birger Jarlsgatan in the centre of Stockholm.
While the preparations were in progress the chairman of the Swedish JAIC, Olof Forssberg, was dismissed, which triggered off a wave of speculations and, last but not least, caused a new delay of the publication of the JAIC Report. After careful consideration of all circumstances it was decided to continue with the preparations and to open the exhibition - as planned - on Thursday, 12 June, because it was possible by this exhibition to fill the gap which had doubtlessly been created by the new postponement of the publication of the JAIC Report.40.2.2
The ExhibitionThe Exhibition was opened on 12 June at 10.00 hours with a presentation for invited guests. Invitations had been sent to the JAIC chairman, members of the Government and of Parliament. About 30 persons of the invited persons appeared, among others:
- Lennart Berglund/Odd Lundqvist - SEA Relative Organisation
- Gunnar Benndreus/Henning Witte/Alve Wendt - DIS Relative Organisation
- Prosecutor Tomas Lindstrand
- Sjöfartsverket Director Johann Fransson
- Jörgen Almelöv - Lawyer of N&T
- Carl Romare - Skuld / Stockholm
- Lawyers from Skuld / Estline / ESCO
- one representative of Trygg Hansa - the leading Hull Underwriters of "ESTONIA"
- Pierre Frey of Bureau Veritas/Paris
- Bureau Veritas Stockholm - Lawyer Bengt-Åke Johnsson.No one from the JAIC, the Government or the Parliament appeared.
About 50 journalists attended the following press conference. They came mainly from Sweden, but also from Estonia, Finland, Denmark, Norway and Germany. Various TV and radio programs were present with own teams and a considerable number of interviews were made. On the next morning, however, there were only small articles in SVENSKA DAGBLADET and TT NEWS, while TV 1 and TV 4 mentioned the exhibition briefly in their evening news. The question arose why the Swedish media were suddenly so disinterested. Nevertheless the Swedish public, informed about the exhibition by various advertisements, had a different opinion and visited the exhibition in daily growing members while the media remained silent. Only in DAGENS NYHETER on the "Debate" page did one letter from the N&T lawyer, Jörgen Almelöv, appear, which was written in response to the letter of Dr. Holtappels having been published on the same page the day before the exhibition was opened. Among the daily increasing number of visitors were retired captains, pilots, professors from the Royal Technical High Schools in Stockholm and Gothenburg, but also relatives, survivors and previous passengers. Even the master, the chief mate and the chief engineer from "REGINA BALTICA", the ferry having replaced the ESTONIA, visited the exhibition twice and took information material with them.
The Finnish JAIC chairman Kari Lethola came with two assistants and stayed for 11/2 hours, the investigating public prosecutor Tomas Lindstrand came twice with criminal inspector Bo Wide. Both stayed for several hours. Also several employees of Sjöfartsverket appeared and very interesting discussions took place. Most important were the many statements taken from previous passengers, in particular truck drivers, which provided new and more detailed evidence about the disastrous condition of visor and bow ramp including hinges and locking devices, all of which were incorporated into the report of this 'Group of Experts'. See Subchapters 12.4.3 / 12.5.
On the last day the relatives organisation DIS held their press conference inside the exhibition to demonstrate their appreciation for the work of this 'Group of Experts' and its preparedness to show the results in Stockholm.
At the exit of the exhibition a black book had been waiting for entries by visitors about their impressions and feelings after having seen the exhibition and the result was overwhelming as demonstrated by the Swedish original and the English translation attached as Enclosures 40.2.480 / 40.2.480.1.
On Thursday, 19 June, the day before the Midsummer celebrations would commence, the exhibition was closed after having been open for 7 full days, during which approximately 1200 visitors saw the exhibition.
In summary it has to be concluded that the exhibition had been a great success, in spite of the silence of the media. The visitors appreciated the opportunity to study the history of the vessel from design/construction to the sinking, the many photos, drawings, the models and mock-up, all of which was explained to them, if they wished so. Many regretted what they thought was a too early closing, however, accepted the reasons, viz. that it would make little sense to kept he exhibition open through Midsummer. Many visitors urged the exhibition guides to request Mr. Bernard Meyer urgently to make sure that the exhibition would be made available again to the Swedish public once the JAIC would finally publish their report. Many visitors demanded a new diving investigation to establish the real truth of the catastrophe.
It became obvious that the Swedish public and in particular the relatives did realize that this 'Group of Experts' - contrary to all publications and assumptions - really had done their utmost to uncover the real facts and circumstances having led to the catastrophe, and still continues to do so as demonstrated at the exhibition. The message from many relatives and survivors, that it is of utmost importance to them to know, what really happened, was understood and, also, that they felt to be left absolutely alone by their authorities.
Furthermore, it was realised and accepted that there was serious and convincing evidence available indicating a much better and more logical casualty scenario than that published so far by the JAIC.
The visitors also understood that a substantial part of the responsibility for the catastrophe was resting with their own Sjöfartsverket and many did express their deep concern about it. The recent resignation of the Swedish JAIC chairman Olof Forssberg in this connection did increase the ill feelings of many visitors.
Basically it became clear to most visitors that the main blame was resting with the technical managers and part owners N&T, the crew managers and part owners ESCO and the classification society Bureau Veritas. Many visitors were shocked that the ferry in such condition could depart every 2nd day from a Swedish port with 1000 or more Swedes onboard, without any Swedish authority doing anything to prevent it.The Swedish Government, when faced with the facts shown at the exhibition, reacted as follows:
- The responsible Minister of Communication, Inez Uzman, remained silent and did not attend.
- The same refers to the members of the Swedish JAIC (only the expert Mikael Huss visited the exhibition in his own time).
- The only "officials" were Johan Fransson from Sjöfartsverket and prosecutor Tomas Lindstrand.


Test your knowledge of JavaScript with this timed quiz! The timer will start at 75 seconds, but if you pick the wrong answer, you will lose ten seconds! Complete all the questions before the time runs out.
Press the start button to begin.
Right!
Wrong!
Timer:
Your score is


Shipping Information
Name
Billing Address
State
District/Town
District/Town
Billing Information
Card Type
Type
Visa
American Express
Discover
Card Number
CVC
Expiration
Month
January
February
March
April
May
June
July
August
September
October
November
December
Receipt
Send Receipt To:
Saved Contacts
Jenny Hess
Elliot Fu
Stevie Feliciano
Christian
Matt
Justen Kitsune
Do not include a receipt in the package
Submit Order


Sign up for PK Mobile Action Alerts!
Sometimes, things in Washington can change really quickly. Our mobile alert system sends your a text message when your elected officals need to hear from you most. We will never share your information with anyone else and only use this system at critical junctures. After you have signed up, please invite your friends to do the same!
For more information on PIPA and SOPA, check out our issue page on Rouge Website Legislation.
*As you might expect, Public Knowledge will never give away your phone number and will only contact you when it is most urgent.


--- layout: page title: "The Archive and Packaging (arcp) URI scheme" description: "This specification proposes the Application and Packaging Pointer URI scheme \"arcp\". arcp URIs can be used to consume or reference hypermedia resources bundled inside a file archive or an application package, as well as to resolve URIs for archive resources within a programmatic framework. This URI scheme provides mechanisms to generate a unique base URI to represent the root of the archive, so that relative URI references in a bundled resource can be resolved within the archive without having to extract the archive content on the local file system. An arcp URI can be used for purposes of isolation (e.g. when consuming multiple archives), security constraints (avoiding \"climb out\" from the archive), or for externally identifying sub-resources referenced by hypermedia formats." ---
| Document Name: | Internet Draft soilandreyes-arcp |
|---|---|
| Document URI: |
urn:ietf:id:soilandreyes-arcp
|
| Online Version: |
https://datatracker.ietf.org/doc/html/draft-soilandreyes-arcp
|
| Organization: | Internet Engineering Task Force (IETF) |
| Series: | Internet Draft (I-D) |
| Abstract: | This specification proposes the Application and Packaging Pointer URI scheme "arcp". arcp URIs can be used to consume or reference hypermedia resources bundled inside a file archive or an application package, as well as to resolve URIs for archive resources within a programmatic framework. This URI scheme provides mechanisms to generate a unique base URI to represent the root of the archive, so that relative URI references in a bundled resource can be resolved within the archive without having to extract the archive content on the local file system. An arcp URI can be used for purposes of isolation (e.g. when consuming multiple archives), security constraints (avoiding "climb out" from the archive), or for externally identifying sub-resources referenced by hypermedia formats. |
arcp
Return to ( Series | Organization | all Specifications )


After creating the account, use the HTTP link in your email to validate the account. If you have not configured your email server connection, look in the project subfolder /nodejs-restify-mongodb/mailLog/testPreview
To create an Admin user you can change the Role in the database, or change the config.secureUserSignup to false and restart the server.


Flights Live Pricing API Test Harness
Api Key
From
To
Outbound
Inbound
Country
Locale
Currency
Adults
Children
Infants
Location Schema
Iata
GeoNameCode
GeoNameId
Rnid
Sky
Default
Cabin Class
Economy
PremiumEconomy
Business
First


{% extends "base.html" %} {% load static %} {% block main_content %}
Steps:
Has to Create a project first.
Create a task. Type and enter the project name and select the project while creating the task.
Created tasks can be seen in All tasks.
Filtering can be done using from and to dates. Tasks are filtered by created_at date.
Countdown counter counts from current time and up to end time of the task.
Backend:
Used jwt authentication.
Sent jwt through urls instead of sending through headers using client.
Used Django default sqlite as database and heroku for hosting.
{% endblock %}


飞翔的面包
Jun 29, 2020
Jun 25, 2020
Jun 21, 2020
Jun 01, 2020
May 31, 2020
May 25, 2020
May 24, 2020
May 20, 2020
Nov 03, 2019
Nov 02, 2019
Nov 01, 2019
Nov 01, 2019
Aug 29, 2019
Aug 28, 2019
Aug 28, 2019
Aug 27, 2019
Aug 26, 2019
Aug 25, 2019
Aug 24, 2019
Aug 24, 2019


{{ address }}
Warning: Do not send money to this address
Balance
:
loading...
USD Value
:
loading...
Related to the following scams
: {{ address.scams }}
View address on raiblocks.net
{{ disqus }}


Follow us for join our events
World Largest books and library center is here where you can study the latest trends of the education.If you want to build a successful business online, watch the promo video to see why 13,000+ students are using this online entrepreneurship course to learn.
Learn MoreOn the other hand, we denounce with elites righteous indignation. and men.
On the other hand, we denounce with elites righteous indignation. and men.
On the other hand, we denounce with elites righteous indignation. and men.
Over 500 students Enrolled Learn Skills
More than 300+ Online Courses Available
Learn Skills on any Devices anytime
More than 320 Instructors Available
Lorem Ipsum is simply dummy text of the printing and typesetting
Then one day he was shootinsome When the against him bubblin
Then one day he was shootinsome When the against him bubblin
Then one day he was shootinsome When the against him bubblin
Our creative and professional staffs
World Largest books and library center is here where you can study the latest trends of the education.If you want to build a successful business online, watch the promo video to see why 13,000+ students are using this online entrepreneurship course to learn.
Join thousand of instructors and earn money hassle free
Lorem Ipsum is simply dummy text of the printing and typesetting
Users reviews are the best indicator of our success.
Join thousand of instructors and earn money hassle free


module Ast:sig
..end
type
cmd =
| |
CheckSynth |
| |
Constraint of |
| |
DeclareVar of |
| |
InvConstraint of |
| |
SetFeature of |
| |
SynthFun of |
| |
SynthInv of |
| |
SmtCmd of |
type
smt_cmd =
| |
DeclareDatatype of |
| |
DeclareDatatypes of |
| |
DeclareSort of |
| |
DefineFun of |
| |
DefineSort of |
| |
SetLogic of |
| |
SetOption of |
type
term =
| |
Identifier of |
| |
Literal of |
| |
IdentifierTerms of |
| |
Exists of |
| |
Forall of |
| |
Let of |
type
bf_term =
| |
BfIdentifier of |
| |
BfLiteral of |
| |
BfIdentifierTerms of |
type
sorted_var =
| |
SortedVar of |
type
var_binding =
| |
VarBinding of |
type
identifier =
| |
SymbolIdentifier of |
| |
UnderbarIdentifier of |
type
symbol =
| |
Symbol of |
type
index =
| |
NumeralIndex of |
| |
SymbolIndex of |
type
sort =
| |
Sort of |
| |
SortWithSorts of |
type
feature =
| |
Grammars |
| |
FwdDecls |
| |
Recursion |
type
sort_decl =
| |
SortDeclaration of |
type
dt_dec =
| |
DTDec of |
type
dt_cond_dec =
| |
DTConsDec of |
type
grammar_def =
| |
GrammarDef of |
type
grouped_rule_list =
| |
GroupedRuleList of |
type
gterm =
| |
GTConstant of |
| |
GTVariable of |
| |
GTBfTerm of |
type
literal =
| |
Numeral of |
| |
Decimal of |
| |
BoolConst of |
| |
HexConst of |
| |
BinConst of |
| |
StringConst of |
typenumeral =
string
typeboolconst =
string


Claim
Contents
Error:
Tenant:
SecretKey:
User Exchange ID:
Authentication metadata URL:
Unique identifier:
Audience:
Issuer:
Certificate thumbprint:
Valid from:
Valid to:


I’m grateful to be part of the Google scholars community & proud of what we’ve done. #growwithgoogle #googleudacityscholars A post shared by Kyle Geary (@kylegeary) on Apr 7, 2018 at 2:04pm PDT
I’m grateful to be part of the Google scholars community & proud of what we’ve done. #growwithgoogle #googleudacityscholars
A post shared by Kyle Geary (@kylegeary) on Apr 7, 2018 at 2:04pm PDT


filmcritic.com presents a review from staff member Jeremiah Kipp. You can find the review with full credits at http://filmcritic.com/misc/emporium.nsf/60e74e041ca9cd6b8625626f0062219f/786e07986556523a88256967000409ea?OpenDocument
WAKING THE DEAD A film review by Jeremiah Kipp Copyright 2000 filmcritic.com filmcritic.com
Keith Gordon is one of the best filmmakers we have working today, and he's been quietly building a strong body of work which merits attention. His cult classic anti-war film, A Midnight Clear and his tour de force adaptation of Kurt Vonnegut's Mother Night were two of the 15 or 20 best American films to come out in the 1990s. Gordon is particularly good at visualizing internal landscapes, particularly slow collapses into paralyzing madness and terrible guilt.
It's difficult to say whether or not Waking the Dead is his best film, since it's one of those movies which seeps into you as you view it, then stays with you in the days that follow. It's certainly his most challenging in terms of tone, structure, and theme, deliberately convoluted and fragmented, moving back and forth between two different, contrasting eras (the idealistic '70s and the aggressively opportunistic '80s) and the evolution of its deeply troubled central character, Fielding Pierce (Billy Crudup).
Fielding has idealistic hopes in his youth to do some small good in the world within a liberal political system, but for much of the film he is caught between his personal ambition for success and those hopeful dreams of social change. He comes from a struggling blue-collar family and has worked enormously hard to get to where he is, but where is that place, and what is it he really wanted in the first place?
Gordon's theme is idealism, and that is closely connected with Fielding's spiritual love and connection with Sarah Williams (Jennifer Connelly,) a young hippie and political activist who works with Fielding's deadbeat brother (raspy Paul Hipp). The opening scenes in 1972 play out as colorful and a little goofy, and Gordon draws out a few silly moments between Fielding and his brother to the point where an audience may become a little restless, but stick with the film.
It's slow, methodical, economical -- it requires some patience because it's a movie with allows itself to breathe, easing slowly into a romantic story on par with Casablanca, a fine companion piece which was also more a story about struggles with idealism than true love. If you ask me, that makes the romance in these films all the more powerful and stirring.
This romance plays out against the backdrop of political change and social activism. They care for each other because they both want to make those changes to better society, but their approaches are wildly different. Fielding wants to change from the inside, administratively, first as a district attorney and, ultimately, as the president. Sarah moves in different circles, with protestors and radicals. The film could have easily become bogged down in moral postulating, but it keeps its message clear and direct.
Gordon is also particularly good at handling the sensual nature of their relationship, which is playful and sweet. When they're debating a hot issue, and Fielding is starting to go off on her, she starts kissing his stomach. "Hey, what are you doing? Stop that. I'm having a moment here." he says, laughing. "I had a point I was trying to make..."
The opening scene in the film clearly establishes the event which will haunt Fielding through the entire film, as he witnesses a car accident on television and learns that Sarah is dead. Throughout the rest of the film, whether in the flashbacks of the '70s or Fielding's campaign in the '80s, Sarah is ever present -- a ghost when not onscreen. He is convinced that she is there with him at all times, but what her purpose is will perhaps always remain unknown.
It sounds very complicated from the plot description -- a mix of political struggles and true love. While it is a rigorous story, moving in a non-linear mode which can be difficult to follow, the emotions are simple and clear, and the central relationship between Sarah and Fielding is the heart of this film, accessible and within the realm of understanding. It's one of the most accurate depictions of romantic love I've seen onscreen.
Keith Gordon has always had a great gift for working with actors, having once been an actor himself. Gary Sinise and Nick Nolte gave the best work of their careers in A Midnight Clear and Mother Night, respectively. Here, Billy Crudup establishes himself as a handsome leading man who can also act. He has a powerful scene late in the film where he's breaking down at a dinner table, repeating the same sentences over and over again.
Jennifer Connelly is a revelation -- an actress I've never found compelling or interesting before, yet wonderfully dynamic and funny here. There's just something about her performance, the way she tilts her head or says something, which rings true. When she says to Crudup, "It's infuriating how much I love you," after a fight, it's a moment we've felt before. The word I would keep coming back to is honesty in her work with Crudup. Gordon brought something out of her, something radiant and powerful, which hasn't been evident before.
There's also something of Kubrick in the austere visuals. Fielding sitting in a chair with a vast wall behind him, or the proximity of his face to Sarah's as they lay in bed together, or the slow, slow zooms in to Fielding's face as he begins to crack, amplified by the slow, brooding electronic score which runs through all of Gordon's films.
The deliberately disorienting movement of the story from past to present and dwelling on smaller beats in-between takes us through an emotional arc we're not used to in our expectation of a story. I wish more films adopted this collage approach, allowing each small piece to build until we have a vivid picture which throws a more accurate reflection of the life we know than the standard three act formula plot. Think about it: How our memories guide and define our actions today, and how the implications of our days past affect our moral choices now.
By the time Gordon has reached his penultimate scene, we've had a staggering journey through a person's life, and a small moment of clarity that may not be easy, or even what we want, but it sums up Sarah's point made earlier in the film. "Some people fulfill their dream, and that's a pity. Then there are some people who find what they're meant to do."

The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


There is no doubt that the recruitment business is busy all year round. Job seekers are looking for new opportunities constantly. However is there a specific time of the year where job hunting reaches its peak or downtime? How can this information be useful for recruitment agencies and help them better understand the recruitment cycle?
Continue ReadingBig data and predictive analytics is not only affecting the way businesses manage their customers, it is changing the way they look, find and recruit candidates. Or at least it will.
Continue ReadingListening to Dan White of Bureau Van Dijk while at Marketing Week Live recently threw up a number of questions about the importance of business intelligence and analytics to marketers and sales people.
Continue ReadingAbout 95% of UK internet companies have yet to comply with new data protection rules due to come into force in May. No real surprise, but you do need to act now.
Continue Reading


This package contains the datasets and a few functions for use with the practicals outlined in Appendix A of the book Statistical Models (Davison, 2003, Cambridge University Press). The practicals themselves can be found at http://statwww.epfl.ch/davison/SM/
| Version: | 1.4-2 |
| Depends: | R (≥ 1.14.0), ellipse |
| Imports: | MASS, nlme, survival |
| Published: | 2013-01-15 |
| Author: | Anthony Davison |
| Maintainer: | Anthony Davison <Anthony.Davison at epfl.ch> |
| License: | GPL-2 | GPL-3 [expanded from: GPL (≥ 2)] |
| URL: | http://statwww.epfl.ch/davison/SM/ |
| NeedsCompilation: | no |
| In views: | Survival |
| CRAN checks: | SMPracticals results |
| Reference manual: | SMPracticals.pdf |
| Package source: | SMPracticals_1.4-2.tar.gz |
| Windows binaries: | r-devel: SMPracticals_1.4-2.zip, r-release: SMPracticals_1.4-2.zip, r-oldrel: SMPracticals_1.4-2.zip |
| OS X binaries: | r-release: SMPracticals_1.4-2.tgz, r-oldrel: SMPracticals_1.4-2.tgz |
| Old sources: | SMPracticals archive |
| Reverse imports: | accrual |
Please use the canonical form https://CRAN.R-project.org/package=SMPracticals to link to this page.


Deals in all kinds of imported paper and board.
We deal in matte, gloss, chromo, sbs, lwc and Stocklot paper also. All sizes and all gsm are available.
1157, Khera Kala, Near Mohan Adda. Opposite Ara Machine, Delhi-110082
Raj Kumar Garg
Phone number- +91<PHONE_NUMBER>


Neymar Jr
Neymar da Silva Santos Júnior (born 5 February 1992), known as Neymar, is a Brazilian professional footballer who plays as a forward for Ligue 1 club Paris Saint-Germain and the Brazil national team.
Lionel Messi
Messi and Ronaldo have very similar trophy hauls, but Messi edges things when it comes to league titles, having won La Liga 10 times with Barcelona.
Cristiano Ronaldo
Cristiano Ronaldo Has Been Voted The Greatest Player Of All Time In Fan Tournament. ... The final inevitably ended up being Ronaldo vs longtime rival Lionel Messi with the Juventus forward
Paulo Dybala
Paulo Exequiel Dybala (born 15 November 1993) is an Argentine professional footballer whoplays as a forward for Serie A club Juventus and the Argentina
Mesut Ozil
Mesut Özil is a German professional footballer who plays as an attacking midfielder for Süper Lig club Fenerbahçe. Nicknamed "The Assist King".
Mauro Icardi
Mauro Emanuel Icardi (Spanish pronunciation: [ˈmawɾo emaˈnwel iˈkaɾði]; born 19 February 1993) is an Argentine professional footballer who plays as a stiker
Di Maria
Ángel Fabián Di María (born 14 February 1988) is an Argentine professional footballer who plays for Ligue 1 club Paris Saint-Germain and the Argentina
Kylian Mbappé
Kylian Mbappé Lottin (born 20 December 1998) is a French professional footballer who plays as aforward for Ligue 1 club Paris Saint-Germain and the France
Mohamed Salah
Mohamed Salah Hamed Mahrous Ghaly is an Egyptian professional footballer who plays as a forward for Premier League club Liverpool and captains the Egypt


Portfolio
Portfolio
Some quick example text to build on the card title and make up the bulk of the card's content.
Fresh-Dev
Fresh-Dev is a online platform for students to showcase their work and portfolios for recruiters and hiring managers to view and search for base on specific programming languages.
Food Service Log Manager
Some quick example text to build on the card title and make up the bulk of the card's content.
Coding Quiz
Some quick example text to build on the card title and make up the bulk of the card's content.
Weather App
Some quick example text to build on the card title and make up the bulk of the card's content.


Ocala events
-
rush limbaugh's charity work
Florida RV Parks & Campgrounds - Camping in Florida - RV Clubs
Directory of Florida RV Parks and Campgrounds for camping in Florida. RV Books, RV Accessories, RV . Carrabelle Beach Outdoor Destination - Carrabelle , FL Ho Hum RV Park . Pelican Palms RV Park - Milton, FL Emerald Beach RV Park .
http://www.rv-clubs.us/florida_rv_campgrounds.htmlCarrabelle Palms RV Resort Pet Policy
Dogs are allowed at Carrabelle Palms RV Resort, but they must be kept on a leash no longer than 6 feet when outside your vehicle. Other restrictions may apply.
http://www.bringfido.com/lodging/130157/Carrabelle Palms RV Resort & Park
Carrabelle Palms RV Resort & Park. 1843 Highway . RV ResortsRV oriented properties but can include park models. True RV . slip rentals. Yes - Onsite Store .
http://floridaparks.com/floridacampgrounds/carrabellepalmsrvresort.htm
raquel welch see through Upcoming events in Ocala
jeanette ashman powhatan va Hottest Tickets
-
Apr 11international law and salary
Amway Center -
Apr 28cotton fleece carcoal fabric
Amway Center -
Jun 25fair det collection act
Bob Carr Performing Arts Center -
Mar 30viagra find online pages edinburgh free
Amway Center -
Aug 27university of tasmania offshore program management
Amway Center -
Jun 21dr barbara hershey durham nc
Amway Center -
Sep 13choosing a heart monitors
Francis Field -
Mar 17uv decomposition of iron oxalate
St Augustine Amphitheatre -
Oct 8state track scoring michigan
Amway Center -
May 4pr blogger jenny lewis
Bob Carr Performing Arts Center
Ocala's best venues
-
Recreational Vehicle Parks and Campsites in Florida (FL)
Pitchford's By The Sea RV Park is an "old Florida" campground located along the Indian River in . rentals & charters at our private Carrabelle Boat Club, gift and convenience store, and more. . 5400 N Flagler Drive, West Palm Beach FL .
http://www.manta.com/mb_44_B7021_10/recreational_vehicle_parks_and_campsites/florida -
All RV Parks Florida | RV Parks In Florida Map - Allstays
RV parks in Florida have never been easier to find, thanks to the . Carrabelle - Carrabelle Beach an RVC Outdoor Destination . Citra - Royal Palms RV Park .
http://www.allstays.com/Campgrounds/Florida-campground-map.htm -
RV Dump Stations & Sani Dump Stations in Florida, United States of ...
1843 Highway 98 West Carrabelle FL. Carrabelle Palms RV Park location map Latitude: 29.83 Longitude: -84.692 water is available Water Available .
http://www.sanidumps.com/sanidumps_usa.php?id=23artists supplies manchester new hampshire
98 people's favorite
-
Florida Campgrounds and RV Parks - Keystone InfoTek
888-884-6486. Carrabelle Palms RV Resort & Park. Carrabelle Beach. 877-563- 1534. SEND E-MAIL. Rustic Sands Resort Campground. Mexico Beach .
http://www.keystonetek.com/campsamerica/FLTemplate.htm -
100+ Top Rated Good Sam RV Parks - Trailer Life Directory
Here is a list of 100+ Top rate GOOD SAM PARKS. Trailer Life .
http://www.trailerlifedirectory.com/plan/TopParks.aspx


one short line,
one giant leap for cross-browser compatibility
two turtledoves a partridge in a pear tree zero fencepost errors


{% extends 'foirequest/base.html' %} {% load i18n %} {% load static from staticfiles %} {% load compress %} {% block title %}{% blocktrans with name=attachment.name %}Redacting attachment {{ name }}{% endblocktrans %}{% endblock %} {% block body %}
{% blocktrans with name=SITE_NAME %}Go to each page of the PDF and locate the parts that need to be blacked out. Draw a rectangle over the area by clicking the mouse and dragging it. Be sure to also black out the email address of {{ name }} if it is visible.{% endblocktrans %}
{% blocktrans %}The original version of the document will still be available to you (but not to the public). If the document does not load correctly, cancel and inform a site moderator.{% endblocktrans %}
{% blocktrans %}Note: in order to redact documents an up-to-date version of a modern browser is required. Using Internet Explorer will likely not work.{% endblocktrans %}
{% trans "Loading PDF..." %}


I'm a Tokyo based full stack developer specializing in PaaS & logging technologies, as well as declarative approaches around the deployment of workloads.
In the past, I have participated in communities such as Google Summer of Code and the Recurse Center (formerly HackerSchool).
Originally from Guadalajara, Mexico (also known as the Engineering Hub from Mexico)
In October 2010, I moved to Tokyo to join Rakuten during its initial stages of globalization as part of the Rakuten Research team, where I had my first experience working in a completely Japanese environment.
Then in 2012, I moved on as one of the first members of Rakuten PaaS team to help in its launch. It was a Cloudfoundry based solution, and we needed persistent logs so I implemented its logging infrastructure using Fluentd.
I am proficient in Japanese (JLPT 2 - Business level), English & Spanish.
My editor is Emacs. Also, I really, really like Org mode, so if support in Github is broken please ping me.
You can find me at:


class: center, middle, inverse, title-slide # Deriving Causal Bounds with
causaloptim
## 🔨
EuroCIM 2020 ### Michael C Sachs, Erin E Gabriel, Arvid Sjölander ### 2020-04-22 --- # The Identification Problem is Solved Given a graph and a causal query, there are algorithms to determine whether that query is estimable. If so, the algorithm returns an estimand. # Pearl's recipe 1. Commit to a graph 2. Specify a query 3. Determine whether query is identified 4. If so, determine estimand 5. Specify statistical model for estimand 6. Fit the model If the query is not identified? Compute bounds! --- ## Previous work - Balke and Pearl (1994) demonstrate that the noncompliance graph implies an optimization problem with a linear objective and linear constraints - Balke implemented a general vertex enumeration algorithm to solve this symbolically to get bounds on a causal effect in terms of the observed probabilities ## Our contributions - Describe a class of problems (graphs plus causal queries) that are alway linear - Extend the concept of intervention sets to allow for arbitrarily complex counterfactual queries - Develop a general algorithm for translating the graph+query into a linear program - Prove that the resulting bounds are valid and tight - Implement it all in a user friendly R package --- # Response function representation ![g1](graph1.png) ![g2](graph2.png) These are equivalent representations of the assumptions. When `\(W_1, W_2, W_3\)` are binary, all possible values of the response function varibles can be enumerated. The values of the response function variables determine the manner in which the variables are determined from their parents. --- # Response functions Let `\(\mathbf{R} = (R_{w_1}, \ldots, R_{w_n})\)` represent the set of response-function random variables for all observed variables in the model. Given a particular value of `\(\mathbf{r}\)`, values of any variable `\(W_i \in \mathbf{W}\)` is functionally determined according to the recursive function: `$$w_i = f_{W_i}(\mathbf{r}) = f_{W_i}(f_{W_{i1}}(\mathbf{r}), \ldots, f_{W_{ik}}(\mathbf{r}), r_{W_i})$$` where `\(\{W_{i1}, \ldots, W_{ik}\}\)` are the parents of `\(W_i\)`. --- # Relating observed probabilities to the response variables Any observed probability can be related to the distribution of response function variables as follows: `$$P\{w_1=W_1; \ldots; W_{n}=w_{n}\} = \sum_{\mathbf{r}: \forall_{j \in 1,\ldots,n} [w_j = f_{W_j}(\mathbf{r})]} P\{\mathbf{R} = \mathbf{r}\}$$` That is, 1. cycle through all possible values of `\(\mathbf{r}\)`, 2. recursively evaluate the response functions, and 3. keep track of the values that match the outcomes in the probability statement --- # Incorporating interventions ![eg](poutgraph.png) Define sets of interventions `\(A\)` and a function `\(f^A\)` that can be recursively evaluated under those intervention sets. __Key extension__: Intervention sets depend on the full path from the potential outcome to the variable intervened upon. --- # Describing the causal query The functions `\(f\)` and `\(f^A\)` now give us the recipe for obtaining observations given `\(\mathbf{r}\)` and `\(A\)`. For any factual or counterfactual probabilities we have `$$P\{W_{i_1}(A_{w_{i_1}}) = w_1, \ldots, W_{i_p}(A_{i_p}) = w_{i_p}, W_{j_1} = w_{j_1}, \ldots, W_{j_o} = w_{j_o}\} = \sum_{\mathbf{r} \in \mathbf{\Gamma}} P(\mathbf{r}).$$` where `$$\mathbf{\Gamma} = \{\mathbf{r}: \forall_{j \in O} [w_j = f_{w_j}(\mathbf{r})] \mbox{ and } \forall_{i \in P} [w_i = f^A_{w_i}(\mathbf{r}, i)]\}.$$` --- # Recap - Every observed probability `\(p_j\)` can be written in terms of probabilities of the response function variables `\(P(\mathbf{R} = \mathbf{r})\)` - The causal query `\(Q\)` can also be written in terms of the `\(P(\mathbf{R} = \mathbf{r})\)` - The goal is to find the extremum of `\(Q\)` in terms of the `\(p_j\)` - When is this feasible? --- # Guaranteeing linearity ## The right side ![](leftright.png) - In graphs where all observed variables have a common unmeasured cause, we have `\(P(r_i, r_j) \neq P(r_i)P(r_j)\)` - Necessary to use `\(\prod_{i = 1} ^ n 2^{2^{k_i-1}}\)` parameters to specify the distribution of `\(\mathbf{R}\)`, say `\(\mathbf{q}\)` - This implies that the observed probabilities are linear functions of the response variables: `\(\mathbf{p} = \overline{P} \mathbf{q}\)` for some matrix `\(\overline{P}\)`. ## The left side - Unconfounded arrows from left to right, but no children of the intervention set `\(A\)` are on the left - Observed probabilities conditional on all variables on the left side suffice - This preserves the linearity of the constraints and the causal query. --- # The optimization problem now Minimize (maximize): `\(Q\)` Subject to: $$ `\begin{eqnarray*} \sum q_j &=& 1 \\ \overline{P} \mathbf{q} = \mathbf{p} \\ q_j, p_i & \geq & 0 \end{eqnarray*}` $$ and optionally some additional linear constraints specified by the user, e.g., monotonicity, there are no defiers of treatment assignment. --- Consider the objective `\(Q = p_1 q_1 + p_2 q_2\)`, and constraints `\(q_1, q_2 \geq 0\)`; `\(q_1 \leq 0.75\)`; `\(q_2 \leq -0.5 q_1 + 0.75\)`. ![](index_files/figure-html/unnamed-chunk-1-1.gif)<!-- --> --- # Conclusion Package and preprint at https://sachsmc.github.io/causaloptim and on CRAN/ArXiv - Preprint describes the approach formally and proves validity/tightness of bounds - Balke's program has been useful for statisticians - This project takes a few steps towards making it more broadly accessible and easier to use - Draw DAGs interactively, specify queries with text, get bounds as R functions and LaTeX code ![qr](qr.png) --- class: inverse, center, middle # Demo


Meghan Markle, Cardi B, Others Named Most Powerful Dressers Of 2019
by Akinwale AkinyoadeThanks to the ‘Meghan Effect’, the Duchess of Sussex , Meghan Markle has been crowned the most powerful dresser of 2019.
Markle takes the title from billionaire make-up mogul Kylie Jenner who comes in at number seven on this year’s list.
The 2019 Most Powerful Dressers list was released by Lyst in its Year in Fashion report. Each year, fashion search platform Lyst releases its Year in Fashion report where it outlines the top shopping trends for the year just gone, as well as the public figures who had the most impact on our wardrobes overall.
Using data from over 104 million shoppers, as well as page views, sales of six million products from 12,000 stores and media (both traditional and social) coverage, the site is able to determine the biggest fashion moments – and figures – from the year.
Markle topped the list as it is gathered she had a huge influence over shoppers, with her fashion choices leading to 216% increase in people Googling similar outfits every single time she steps out for a public engagement. The Club Monaco dress she wore when she and her husband, Prince Harry wore when they appeared with their baby, Archie saw a 570 per cent search increase. The dress also sold out within 24 hours of being identified. The black and white J. Crew skirt the Duchess wore for a private meeting with South African politicians, lawmakers and government officials was also super popular – searches for the brand rose 102 per cent as a result.
Timothee Chalamet came in second on the list. According to Lyst, the embellished Louis Vuitton bib he wore to the Golden Globes this year was the most impactful at the event. He followed this up with a sequin hoodie at the The King premiere in London which resulted in a 192 per cent increase in searches for men’s hoodies. Perhaps most impressively, after the actor wore a Haider Ackermann suit, searches for the brand spiked by a whopping 806 per cent in the following week.
Closing the top three was actress Zendaya. The Greatest Showman star brought a 54 per cent increase to Tommy Hilfiger with the real-life Cinderella huge blue gown from the brand. Her impact was also felt at the 2019 Emmys when she wore Vera Wang. The stunning green corset dress caught the attention of literally everyone, and created a 33 per cent increase in searches for the brand.
British singer, Billie Eilish and rapper, Cardi B placed fourth and fifth respectively.
Check out the full list below:
- Duchess of Sussex
- Timothee Chalamet
- Zendaya
- Billie Eilish
- Cardi B
- Lisa, Blackpink
- Kylie Jenner
- Lizzo
- Harry Styles
- Billy Porter


Most people complain about exceptions. They then proceed to complain that exceptions are the only way to error check if an object has failed, giving them the feeling of it being forced on them. It may be the best "best" but it's definitely not the only way. One of the most popular methods around this is two step construction.
1 2 3 4 5 6
class Example
{
Example();
bool Create();
bool bOkay;
};
I personally think it's counter intuitive. No matter though, it's applied in places where we may even want to use exceptions such as company code. You'll often have questions such as, "Is it beneficial in any other way?" or "Is there any time I'll want to do this over one step construction?". The answer to both is I don't know. Create does not allow for the optimization of a ctor initialization list where the ctor itself does. It always has basic function overhead since more calls are being made. One could argue that the overhead exceptions causes is greater than what is caused by a two step constructor. This is a valid argument. Exceptions are really heavy when it comes to throwing them. However, it's my belief that the benefits of exceptions outweigh the costs. I wouldn't actually know, I've never cared to count the cycles or benchmark it.
With today's hardware, I can't really see many performance-critical applications that using exceptions for is a deal-breaker. Most of the time, I think it comes down to personal preference.
Another option that I've seen a lot of people use is something like this:
1 2 3 4 5 6 7 8 9
class Example
{
public:
// Returns a null pointer if instantiation fails.
static Example* NewInstance(void);
private:
Example(void);
};
* Personally, I always use one-step construction. I don't like the idea of having my objects floating around "in limbo" between construction stages.
Connection c;
ErrorCode e;
e = c.Connect("myserver");
if(e != OK)
return ProcessError(e);
e = c.Login("myuser","mypassword");
if(e != OK)
return ProcessError(e);
Table t;
e = c.GetTable("Foo",t);
if(e != OK)
return ProcessError(e);
Record r;
e = t.GetRecord(t,"Desired Record",r);
if(e != OK)
return ProcessError(e);
r.ModifySomehow();
e = t.UpdateRector(t,"Desired Record",r);
if(e != OK)
return ProcessError(e);
Lots of C libs work this way. WinAPI and DirectX specifically force you to check error returns after damn near EVERYTHING, so your code ends up looking a lot like this.
The idea is that you can write code that assumes everything is working fine, without having to check your status after every little thing. In the event that something disruptive happens, it'll jump right to your error handling code.
I know and it's awesome. In C though, there's often macros that wrap around API functions like "APICHECK(myAPIFunction(structBlahblahblah));" This is done with OpenGL inside of SFML and various other areas in C.
helios, I understand your point but when someone says, "What do I do when my constructor fails?" most will say "Throw an exception." When they say, "What do I do if I can't throw an exception due to rules outside of C++?" then most would say, "Two step constructor".
In my opinion, the idea behind using exceptions is that in well-developed code, exceptions will rarely occur. This means that you have faster code from not checking for errors, and that even if an exception does cause some overhead, it should be rare enough that it doesn't even matter. Whereas for work-arounds and other nonsense methods, you have slower code and much more tedious programming work.
I would recommend to read C++ Coding Standards by Sutter/Alexandrescu. There, the authors claim that there are a couple of valid uses of exceptions:
1) To handle exceptional cases -- such as /bin/bash not being accessible/executable.
2) To propagate errors where C++ syntax provides no other means, such as from constructors and many of the operators.
They further say that exceptions should NOT be used if it is the expectation that the immediate caller will always handle the error. If this were the case, the programmer would end up littering his code with try-catch blocks that just increase the amount of code he has to write.
Yes, it is possible to implement operator+ such that the programmer needs to call an "Ok()" method on the resultant object to see if the operation succeeded, but doing so basically erases the benefit of the syntax provided by operator+. At that point, you may as well eschew the operator and write the method "bool add( Thing& result, const Thing& rhs ) const". At least in this way, you can get a compiler warning if the result of add() is ignored.
Two-step construction has the same problem: nothing forces the programmer to call the second function to complete initialization. As the implementor of the class, you have two options. Either claim GIGO in all your methods, and eschew any safety checks, leaving the user with weird crashes to debug, or provide checks in your methods to detect a partially initialized object and do something about it. Unfortunately these additional checks incur a runtime penalty, all in the name of protecting the user against himself.
But it can be worse than that: you may have to be very careful about destruction of the object. It's always best to provide a strong exception guarantee (in this case without actually throwing an exception) so that the object can be safely destroyed and any resources it holds can be released. This may mean making the destructor a little more complicated.
At least GCC provides you with a way to markup your function declaration so that if the user ignores the return code, you'll get a warning. Just try making a simple program that opens a file, does a write() on it and ignores the return code. With -Wall, you should get a warning.
[EDIT: You may need a "newer" GCC for this. Something in the 4.x series at least, if not 4.1+]
The idea is that you can write code that assumes everything is working fine, without having to check your status after every little thing. In the event that something disruptive happens, it'll jump right to your error handling code.
The theory is nice, but in practice if you coded this way, your code would be usually exception-unsafe - which means if it fires exception, you have 99 chances out of 100 that it leaks resources.
The main reason why companies (like Mozilla or Google) ban exceptions in C++ is manual memory management, not performance issues. If you use exceptions and you don't want to cause a memory leak, you have to make sure that:
1. The code for resource cleanup will be fired properly.
2. The resource cleanup won't fail.
3. The resource cleanup won't fail even if the object is partially constructed (if your constructors throw exceptions, this is quite easy to get into).
The first one can be achieved by RAII and smart pointers (and they are order of magnitude slower than builtin pointers), the third one can get really hairy, though, and there is no universal solution for this. So in reality, no, you cannot code with assumption everything works fine. You still have to take into account both scenarios - that everything works fine, and that an exception can be thrown out of nowhere :D
It is true that boost::shared_ptr is much slower than built-in pointers, however there are lighter-weight alternatives that may be better fits in many circumstances anyway. For example, boost::scoped_ptr, std::auto_ptr, and std::unique_ptr. shared_ptr should be used only when ownership must be shared.
2 and 3 are problems regardless of how you report errors.
It is always recommended to use managed pointer objects rather than raw pointers since doing so all but eliminates memory leaks, even in programs that don't use exceptions. This is why advocates of exceptions regard the argument of "many potential exit points of a function (due to exceptions being thrown) as moot.


Directed by Stephen Hopkins Screenplay by Akiva Goldsman Reviewed by Richard F. Dickson
WARNING: This review contains spoilers for those who have not yet seen the film.
The TV series Lost in Space will, to me, always be the Barney Fife to Star Trek's Andy Griffith. I always preferred the darker, more serious episodes at the beginning than the descent into camp the series eventually became. With this in mind, I really looked forward to the film version. Based on what I had seen, it seemed to have the more sinister tone of those early episodes, especially where Dr. Smith and the robot were concerned. Unfortunately, the film commits the cardinal sin of cinema: not good, not bad, just ... there. Once again, Akiva Goldsman proves that his theory of screenwriting is to throw as many plots in as he possibly can and hope one of them sticks. This failed in Batman and Robin and it fails here. Any one of these plots -- the initial launch and sabotage, the derelict ship, and the planet with the time vortex -- could have been fashioned into a tight, satisfying film, but instead we are forced to watch this story meander around through three terribly undeveloped acts. And he also falls prey to the time travel trap: he allows his hero to save the day by travelling back in time to before the Jupiter II is destroyed. Now, if this is possible, why not just go back in time and prevent Dr. Smith from sabotaging the ship in the first place? Yet it's lazy screenwriting like this that seems to dominate the market these days, writers being asked nothing more than to dream up a skeleton on which to hang a bunch of special effects. Not to mention the fact that this movie seems to be little more than a collection of variations on scenes from much better movies: Star Wars space battles, Blade Runner cityscapes, Alien monsters, etc, etc, etc, none of them done with any of the style or flair of the originals. And beyond the dazzling effects, the movie just sits there. Never once was I involved, excited, or stimulated. Gary Oldman's Dr. Smith is evil without any real motivation, simply there to provide a threat. The kids are all annoying, the parents stoic stereotypes. The only one who seems to be having any fun with his role -- and is therefore fun to watch -- is Matt LeBlanc's Major West. He seems to understand the idea that this is supposed to be an adventure, and does well as the dashing hero, despite the awful romantic dialog he's forced to share with Heather Graham. The sad thing is, this movie will probably be a hit. It has all the eye candy needed, plus a cutting edge techno soundtrack that will probably have the kids going back again and again. But if the series was Barney to Star Trek's Andy Griffith, this movie is definitely an Otis that should have remained locked up.
Richard F. Dickson "Time is an illusion. Lunchtime doubly so."
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews