General object display with type and structure
Displays an arbitrary q object, revealing its type, rank, and shape in a nested format.
Name and Syntax | Description |
---|---|
dpy x |
Displays the specified object. dpy is defined in the global namespace |
dpy
uses standard Q type characters to represent type, with uppercase indicating a nonscalar value (e.g. a vector or higher-dimensional
array). This set is augmented with the following additional type characters:
l
,L
: Scalar or array enumerated valueA
: Keyed or unkeyed tableY
: Dictionary#
: Heterogeneous array:
: Function or operator
q)dpy 3 4
.---.
|3 4|
'J--'
q)dpy enlist 3 4
.-----.
|.---.|
||3 4||
|'J--'|
'#----'
q)dpy("yellow";1011000011b)
.------------.
|.------. |
||yellow| |
|'C-----' |
|.----------.|
||1011000011||
|'B---------'|
'#-----------'
q)dpy enlist enlist "abc"
.-------.
|.-----.|
||.---.||
|||abc|||
||'C--'||
|'#----'|
'#------'
q)dpy dpy
.-------------------------.
|{-1 .dpy.trt .dpy.fmt x;}|
':------------------------'
q)dpy(((2 3 4;1011000011b);"howdy");2 3#3)
.----------------.
|.--------------.|
||.------------.||
|||.-----. |||
||||2 3 4| |||
|||'J----' |||
|||.----------.|||
||||1011000011||||
|||'B---------'|||
||'#-----------'||
||.-----. ||
|||howdy| ||
||'C----' ||
|'#-------------'|
|.-----. |
||3 3 3| |
||3 3 3| |
|'J----' |
'#---------------'
q)dpy parse"select event from tbl where t>0"
.--------------.
|.-. |
||?| |
|':' |
| |
|`tbl |
|s |
|.-------. |
||.-----.| |
|||.---.|| |
||||.-.||| |
|||||>|||| |
||||':'||| |
|||| ||| |
||||`t ||| |
||||s ||| |
|||| ||| |
||||0 ||| |
||||j ||| |
|||'#--'|| |
||'#----'| |
|'#------' |
| |
|0 |
|b |
|.------------.|
||event| event||
|'Y-----------'|
'#-------------'
Under Windows, the display would look different. (This won't be accurate unless you're viewing this page on a Windows machine, or have chosen an output encoding such as "Western (DOS Latin 1)". This encoding may not be in your default list.)
q)dpy 3 4
┌───┐
│3 4│
└J──┘
q)dpy enlist 3 4
┌─────┐
│┌───┐│
││3 4││
│└J──┘│
└#────┘
q)dpy("yellow";1011000011b)
┌────────────┐
│┌──────┐ │
││yellow│ │
│└C─────┘ │
│┌──────────┐│
││1011000011││
│└B─────────┘│
└#───────────┘
q)dpy enlist enlist "abc"
┌───────┐
│┌─────┐│
││┌───┐││
│││abc│││
││└C──┘││
│└#────┘│
└#──────┘
q)dpy dpy
┌─────────────────────────┐
│{-1 .dpy.trt .dpy.fmt x;}│
└:────────────────────────┘
q)dpy(((2 3 4;1011000011b);"howdy");2 3#3)
┌────────────────┐
│┌──────────────┐│
││┌────────────┐││
│││┌─────┐ │││
││││2 3 4│ │││
│││└J────┘ │││
│││┌──────────┐│││
││││1011000011││││
│││└B─────────┘│││
││└#───────────┘││
││┌─────┐ ││
│││howdy│ ││
││└C────┘ ││
│└#─────────────┘│
│┌─────┐ │
││3 3 3│ │
││3 3 3│ │
│└J────┘ │
└#───────────────┘
q)dpy parse"select event from tbl where t>0"
┌──────────────┐
│┌─┐ │
││?│ │
│└:┘ │
│ │
│`tbl │
│s │
│┌───────┐ │
││┌─────┐│ │
│││┌───┐││ │
││││┌─┐│││ │
│││││>││││ │
││││└:┘│││ │
││││ │││ │
││││`t │││ │
││││s │││ │
││││ │││ │
││││0 │││ │
││││j │││ │
│││└#──┘││ │
││└#────┘│ │
│└#──────┘ │
│ │
│0 │
│b │
│┌────────────┐│
││event| event││
│└Y───────────┘│
└#─────────────┘
Higher-dimensional arrays are represented through leading axis indicators, with additional blank lines separating hyperplanes.
q)dpy 2 3 4#til 24
..-----------.
||0 1 2 3 |
||4 5 6 7 |
||8 9 10 11|
|| |
||12 13 14 15|
||16 17 18 19|
||20 21 22 23|
''J----------'
q)dpy 2 3 4 5#til 120
...-------------------.
|||0 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 37 38 39 |
||| |
|||40 41 42 43 44 |
|||45 46 47 48 49 |
|||50 51 52 53 54 |
|||55 56 57 58 59 |
||| |
||| |
|||60 61 62 63 64 |
|||65 66 67 68 69 |
|||70 71 72 73 74 |
|||75 76 77 78 79 |
||| |
|||80 81 82 83 84 |
|||85 86 87 88 89 |
|||90 91 92 93 94 |
|||95 96 97 98 99 |
||| |
|||100 101 102 103 104|
|||105 106 107 108 109|
|||110 111 112 113 114|
|||115 116 117 118 119|
'''J------------------'
An at-sign (@
) on the top of an array indicates that the associated axis is empty.
q)dpy 0#0i
.@.
| |
'I'
q)dpy 2 1 0#0
..@.
|| |
|| |
|| |
''J'
On Windows, this would look as follows:
q)dpy 0#0i
┌@┐
│ │
└I┘
q)dpy 2 1 0#0
┌┌@┐
││ │
││ │
││ │
└└J┘
The following functions can be used to control the displayed output:
Name and Syntax | Description |
---|---|
.dpy.setc n |
Sets the corner and side box drawing characters. Use 0 for ASCII characters, 1 for Windows graphic characters, and 2 for post-processing via .dpy.trt (see the section entitled "Custom Output Translation" for additional information). The default is 1 under Windows and 0 otherwise |
.dpy.trt x |
Defines arbitrary character translations to be applied to the output prior to display. This can, for example, be used to illustrate object nesting through colo[u]r; see below for details |
dpy can be wired into the d
namespace by adding the following lines to your q.q
file:
\l dpy.q
.d.e:('[dpy;value])
Then, invoke from the Q command prompt via:
q)d)2 3#til 6
.-----.
|0 1 2|
|3 4 5|
'J----'
You can use .dpy.trt
to customize the output that is rendered to your display device. The following example shows how the box drawing
characters can be displayed in a specific colour.
//
// Bash support for dpy to draw boxes in a configured colour.
//
\d .dpy
setc 2 / Enable character post-processing mode
PC:.dpy`tl`tr`bl`br`vl`vr`ht`hb / Placeholder output characters configured in <.dpy.setc>
//
// @desc Modifies `.dpy.trt`'s default behaviour by replacing box drawing
// characters with semi-graphic character escape sequences.
//
// @param bc {string} Specifies bash colour (see <bces> above).
// @param l {string} Specifies a list of strings that will be remapped.
//
// @example:
// q)\l dpy.q
// q).dpy.setc 2
// q).dpy.trt:clrtrt["1;35";] / Light purple boxes
//
clrtrt:{[bc;l]
bbd:{bces[x] "\033(0",y,"\033(B"}[bc;] each "\154\153\155\152\170\170\161\161";
rbdc[;bbd] each l
}
//
// @desc Wraps a string with a Bash colour escape sequence.
//
// The following colours are supported:
//
// 0;30 - Black 0;31 - Red 1;30 - Dark Gray 1;31 - Light Red
// 0;34 - Blue 0;35 - Purple 1;34 - Light Blue 1;35 - Light Purple
// 0;32 - Green 0;33 - Brown 1;32 - Light Green 1;33 - Yellow
// 0;36 - Cyan 0;37 - Light Gray 1;36 - Light Cyan 1;37 - White
//
// @param bc {string} Specifies bash colour.
// @param s {string} Specifies string to wrap in colour esacpe sequence.
//
// @return {string} The wrapped string.
//
bces:{[bc;s] "\033[",bc,"m",s,"\033[0m"} / Bash colour escape sequence
//
// @desc Replaces single-character box drawing characters with Unix semi-grpahic
// characters.
//
// @param s {string} Specifies string to modify.
// @param bdc {string} Specifies the table of escape sequences to draw semi-
// graphic characters.
//
rbdc:{[s;bdc]
j:where b|-1_1b,b:s in PC;
t:j _ s;t[where b@j]:bdc[PC?s where b];(,/)t
}
//
// Sample <clrtrt> projections.
//
redtrt:clrtrt["0;31";] / Make boxes red
cyantrt:clrtrt["1;36";] / Make boxes cyan
trt:cyantrt
\d .
As a variant, the next example shows how the box drawing characters can be augmented through the use of colour to reinforce nesting level visually.
//
// Bash support for dpy to reinforce nesting level through colour.
//
\d .dpy
setc 2 / Enable character post-processing mode
NC:("0;34";"0;36";"0;37";"0;31";"1;33";"1;32") / Change to suit preferences
PC:.dpy`tl`tr`bl`br`vl`vr`ht`hb / Placeholder output characters configured in <.dpy.setc>
EB:"\154\153\155\152\170\170\161\161" / Escaped box drawing characters
//
// @desc Modifies `.dpy.trt`'s default behaviour by replacing box drawing
// characters with semi-graphic escape sequences and colourizing each nesting
// level in a different colour.
//
// @param s {string} String to modify.
//
// @example:
// q)\l dpy.q
// q).dpy.trt:.dpy.nsttrt each
//
nsttrt:{[s]
d:(sums s in "\332\263\300")-
-1_0i,sums s in "\277\272\331"; / Determine nesting depth by looking for left and right characters
j:where b|-1_1b,b:s in PC;
t:j _ s;
t[where b@j]:{"\033[",(x`col),"m\033(0",(x`bdc),"\033(B\033[0m"} each
flip `col`bdc!(NC[mod[-1+d where b;count NC]];EB[PC?s where b]);
(,/)t
}
trt:nsttrt each
\d .
Thanks to Hugh Hyndman and Fadel Al-Jaifi of First Derivatives for the Bash output customization ideas and logic.
Leslie Goldsmith, First Derivatives