[Question]
  [
## Background
Inspired by [I'm a palindrome. Are you?](https://codegolf.stackexchange.com/questions/110582/im-a-palindrome-are-you), where it is presented the [shocking](https://www.reddit.com/r/Showerthoughts/comments/5vkrg5/) fact that “`()()` is not a palindrome, but `())(`”, I asked myself what instead is `()()` and the answer is simply: it is a string with a vertical symmetry axis!
### The task
Write a program or function that takes a string S (or the appropriate equivalent in your language) as input, checks for symmetry along the vertical axis, and returns a [truthy or falsy](http://meta.codegolf.stackexchange.com/a/2194) value accordingly. You can use [any reasonable means](http://meta.codegolf.stackexchange.com/questions/2447/default-for-code-golf-input-output-methods) to take the input and provide the output.
### Reflectional symmetry
Reflectional symmetry around a vertical axis (or left-right symmetry) means that if you put a mirror vertically at the exact center of the string, the reflected image of the first half of the string is identical to the second half of the string.
For example, the following strings are reflectional symmetric around a vertical axis:
```
()()
()()()
[A + A]
WOW ! WOW
OH-AH_wx'xw_HA-HO
(<<[[[T*T]]]>>)
(:)
)-(
())(()
qpqp
```
while the following are not:
```
())(
((B))
11
+-*+-
WOW ! wow
(;)
qppq
```
### Rules of the contest
• Your program or function will receive only printable ASCII characters. You can include or not the empty string, (which is symmetric, of course!) as legal input, which is better for you.
• The ASCII characters that can be considered symmetric with respect to the vertical axes are the following (note the initial space, and the difference between uppercase and lowercase letters):
```
 !"'+*-.:=AHIMOTUVWXY^_ovwx|
```
The ASCII characters that can be considered “mirrored” and their corresponding characters are:
```
()<>[]{}qpbd/\
```
Note that, since they are mirrored, you can have both `()` as well as `)(`, `/\` and `\/`, etc.
All the other ASCII printable characters must be considered asymmetric and without a mirrored corresponding character.
• This is a [code-golf](/questions/tagged/code-golf "show questions tagged 'code-golf'") challenge: the shorter your program is, measured in bytes, the better, in any programming language.
• Kudos to people that will produce a symmetric program!
**Note**: this question is not a duplicate of ["Convenient Palindrome”](https://codegolf.stackexchange.com/questions/28190/convenient-palindrome-checker), that requires to check for palindromic strings in which parentheses are flipped. This question is different for two reasons:
1) it is a restriction of the other question for what concerns non-parentheses characters, since only symmetric characters can appear in reverse order.
2) Since it is based on the concept of symmetry, and not on a concept of “convenient palindrome”, mirrored characters can appear in both order, i.e. `[]` and `][`, and this makes the program to solve it different from programs that solve the other problem.
  
[Answer]
## JavaScript (ES6), ~~130~~ ~~125~~ 113 bytes
```
f=
s=>s==[...s].reverse(s=`()<>[]{}qpbd/\\`).map(c=>s[s.indexOf(c)^1]||/[- !"'+*.:=AHIMOT-Y^_ovwx|]/.exec(c)).join``
```
```
<input oninput=o.textContent=f(this.value)><pre id=o>
```
Edit: Saved 5 bytes thanks to @Arnauld. Saved a further 11 bytes thanks to @YairRand.
[Answer]
# [Jelly](https://github.com/DennisMitchell/jelly),  ~~69~~  62 bytes
```
“(<[{qb/“ !"'+*-.:=AHIMOTUVWXY^_ovwx|“)>]}pd\”,Ṛ$F©f@ð®œs2¤yU⁼
```
[Try it online!](https://tio.run/##y0rNyan8//9RwxwNm@jqwiR9IEtBUUldW0tXz8rW0cPT1z8kNCw8IjIuPr@svKIGKK1pF1tbkBLzqGGuzsOds1TcDq1Mczi84dC6o5OLjQ4tqQx91Ljn/8PdWw63P2pa8/@/hqaGJheIAFLRjgraCo6xXOH@4QqKCkCSy99D19EjvrxCvaI83sNR18OfS8PGJjo6OkQrJDY21s4OqNVKk0tTVwNohKYG0AhdXV2uwoLCAjCfS0PDSVOTy9CQS1tXS1sXam55fjmXhrUmUFlBIZeVCwA "Jelly – Try It Online")
[All test cases](https://tio.run/##y0rNyan8//9RwxwNm@jqwiR9IEtBUUldW0tXz8rW0cPT1z8kNCw8IjIuPr@svKIGKK1pF1tbkBLzqGGuzsOds1TcDq1Mczi84dC6o5OLjQ4tqQx91Ljn/8PdWw63P2pa8/@/hqaGJheIAFLRjgraCo6xXOH@4QqKCkCSy99D19EjvrxCvaI83sNR18OfS8PGJjo6OkQrJDY21s4OqNVKk0tTVwNohKYG0AhdXV2uwoLCAjCfS0PDSVOTy9CQS1tXS1sXam55fjmXhrUmUFlBIZeVCwA "Jelly – Try It Online")
*-7 bytes thanks to @JonathanAllan*
**How it Works**
```
“(<[{qb/“ !"'+*-.:=AHIMOTUVWXY^_ovwx|“)>]}pd\”,Ṛ$F©f@ð®œs2¤yU⁼  main link
“(<[{qb/“ !"'+*-.:=AHIMOTUVWXY^_ovwx|“)>]}pd\”  The literal list of strings  ['(<[{qb/', ' !"\'+*-.:=AHIMOTUVWXY^_ovwx|', ')>]}pd\\']
               $                 Last two links (if not part of an LCC) as a monad 
            Ṛ                    Reverse array Does not vectorize.
           ,                     Pair; return [x, y].
                 ©               Copy link result to register (® atom to retrieve). 
              F                  Flatten list.
                  f              Filter; remove the elements from x that are not in y.
                   @             Swaps operands. 
                    ð            Start a new dyadic chain
                         ¤       Nilad followed by links as a nilad. 
                      2          The literal integer 2
                   ®             Restore; retrieve the value of the register. Initially 0.
                    œs           Split x into y chunks of similar lengths.
                          y      Translate the elements of y according to the mapping in x.
                           U     Upend; reverse an array.
                            ⁼    Equals. Does not vectorize.
```
[Answer]
# Python 3, ~~211~~ ~~208~~ 195 bytes
```
lambda S,p="()<>[]{}qpbd\/",s=" !\"'+*-.:=AHIMOTUVWXY^_ovwx|":(S==S.translate({ord(s[2*x]):s[2*x+1]for s in(p,p[::-1])for x in range(7)})[::-1])*(~len(S)%2*s[len(S)//2]in s)*(not set(S)-set(p+s))
```
Saved 13 bytes thanks to Jonathan Allan.
[Answer]
# [SOGL V0.12](https://github.com/dzaima/SOGL), 88 [bytes](https://github.com/dzaima/SOGL/blob/master/chartable.md)
```
"el²┘N!←8mYdDm⁵╔C⅛┌6▼ģη⁷fņ‘;W‽0←}C
l»{Kα}lalh=‽;KCø;{:↔³↔=?"qpbd”⁴²+:GW:2%«H+W}:h=?:CΚ}=
```
[Try it Here!](https://dzaima.github.io/SOGLOnline/?code=JTIyZWwlQjIldTI1MThOJTIxJXUyMTkwOG1ZZERtJXUyMDc1JXUyNTU0QyV1MjE1QiV1MjUwQzYldTI1QkMldTAxMjMldTAzQjcldTIwNzdmJXUwMTQ2JXUyMDE4JTNCVyV1MjAzRDAldTIxOTAlN0RDJTBBbCVCQiU3QksldTAzQjElN0RsYWxoJTNEJXUyMDNEJTNCS0MlRjglM0IlN0IlM0EldTIxOTQlQjMldTIxOTQlM0QlM0YlMjJxcGJkJXUyMDFEJXUyMDc0JUIyKyUzQUdXJTNBMiUyNSVBQkgrVyU3RCUzQWglM0QlM0YlM0FDJXUwMzlBJTdEJTNE,inputs=JTI4JTI5JTI5)
~24 bytes to add `qpbd` mirroring and 6 bytes for `(x-1 XOR 1) + 1` :/
[Answer]
# [Kotlin](https://kotlinlang.org) 1.1, ~~201~~ 199 bytes
```
{var R="(<[{qb/\\dp}]>)"
var m=HashMap<Any,Any>()
"\"!'+*-.:=AHIMOTUVWXY^_ovwx| ".map{m[it]=it}
R.indices.map{m[R[it]]=R[R.length-(it+1)]}
it.zip(it.reversed()).filter{m[it.first]!=it.second}.none()}
```
## Beautified
```
{
    var R = "(<[{qb/\\dp}]>)"
    var m = HashMap<Any, Any>()
    "\"!'+*-.:=AHIMOTUVWXY^_ovwx| ".map { m[it] = it }
    R.indices.map { m[R[it]] = R[R.length - (it + 1)] }
    it.zip(it.reversed()).filter { m[it.first] != it.second }.none()
}
```
## Test
```
var i:(String)->Boolean =
{var R="(<[{qb/\\dp}]>)"
var m=HashMap<Any,Any>()
"\"!'+*-.:=AHIMOTUVWXY^_ovwx| ".map{m[it]=it}
R.indices.map{m[R[it]]=R[R.length-(it+1)]}
it.zip(it.reversed()).filter{m[it.first]!=it.second}.none()}
fun main(args: Array<String>) {
    var GOOD = listOf("()()",
            "()()()",
            "[A + A]",
            "WOW ! WOW",
            "OH-AH_wx'xw_HA-HO",
            "(<<[[[T*T]]]>>)",
            "(:)",
            ")-(",
            "())(()",
            "qpqp")
    var BAD = listOf("())(",
            "((B))",
            "11",
            "+-*+-",
            "WOW ! wow",
            "(;)",
            "qppq")
    GOOD.filterNot { i(it) }.forEach { throw AssertionError(it) }
    BAD.filter { i(it) }.forEach { throw AssertionError(it) }
    println("Test Passed")
}
```
**Can't run on TIO because 1.1 is not supported**
[Answer]
# [Python 2](https://docs.python.org/2/), ~~182~~ ~~167~~ ~~163~~ ~~162~~ ~~160~~ 158 bytes
```
lambda s:s[::-1]==s.translate(m(t+w,w+t),m("","").translate(None," !\"'+*-.:=AHIMOTUVWXY^_ovwx|"+t+w))
from string import*
m=maketrans
t=")>[{/qd"
w="(<]}\pb"
```
[Try it online!](https://tio.run/##XY9NT8MwDIbv/RWeL0uaZmgcyzKpnMoBehkM1IWp01qYWJq2icgQ8NtLP5CY8MF@Lft9ZFcf9lWXl20hNu0xU7t9BiY0aRjyuRTCzGyTleaY2ZwoYpkLHLM0UAQxQKRn0ztd5gHCZINT5vNZKKL45jZZ3T@sH5@et/rdnb6QdQBKvaLRCoxtDuULHFSlG@t7SqjsLR9wnhVIl@nnRb1HzwkkC/m9qXbYFroBA4cSUiSUUAxgqKNKI2AQyV6ukzVMoMt9k8Q8irfuND25bRzxOBlsi0Wapit/JaVcLkdSOBTKycilZOTWVV2hDD3oIjMmbywUxHRPnB9DRxO5poNnPu8z4z7jf/c47Yalq19sVf/DlnpEtz8 "Python 2 – Try It Online")
*Saved 2 bytes thanks to Jonathan Allan* 
**Explanation**
First, we need to build the list of all chars that don't have a symmetric (the char itself : `A`, ... or another char `(` for `)`, ...):
* `m("","")` returns a string with all the available chars.
* `m("","").translate(None," \t!\"'+*-.:=AHIMOTUVWXY^_ovwx|"+t+w))` removes from all the available chars the chars that have a symmetric.
Then, we map every char to its symmetric char and remove the chars that don't have a symmetric with `s.translate(m(t+w,w+t),<chars that don't have a symmetric>)`
If the result equals to the reversed string, we have a symmetric string.
[Answer]
# [Perl 5](https://www.perl.org/), 102 + 1 (-p) = 103 bytes
```
$_=!/[^ !"'+*.:=AHIMOT-Y^_ovwx|()<>[\]{}qpbd\/\\-]/&&$_ eq reverse y|()<>[]{}qpbd/\\|)(><][}{pqdb\\/|r
```
[Try it online!](https://tio.run/##K0gtyjH9/18l3lZRPzpOQVFJXVtLz8rW0cPT1z9ENzIuPr@svKJGQ9PGLjomtrq2sCApJUY/JkY3Vl9NTSVeIbVQoSi1LLWoOFWhEqIKqgiopkZTw84mNrq2uqAwJSkmRr@m6P//rOiC/MLYrH/5BSWZ@XnF/3ULAA "Perl 5 – Try It Online")
[Answer]
# [Scala](http://www.scala-lang.org/), 140 bytes
```
s.zip(s.reverse).forall(c=>(" !\"'+*-.:=AHIMOTUVWXY^_ovwx|".flatMap(x=>x+""+x)+"()<>[]{}qpbd/\\\\/dbpq}{][><)(").indexOf(c._1+""+c._2)%2==0)
```
[Try it online!](https://tio.run/##RZHBToNAEIbP9Cmmm5rudoXaHiuQ4EU8VBKtoqFIKCwJhsDCkoIiz44LTXQPM3OY@f75d0QUZuFQnD5ZVMM@THNgbc3yWIDFOXQz5Rxm8MUEGPDMSowwwQRdT2kqPAsoWL6sXMeFOcgoa8dWLTto2mXbBLal2s44ouue5x1WB9/3TXOC7MZIVDwBCZ6AJS85IhfdvPiXJVMXviNj02YjA1VXVP0TbopmbLi9MHgpGTMlKSrAAnR1skCpJJLR1ESvJbwbhPadciy0ip1ZJRjR5EyYZTgyTIxgfkRLulK1nWHZD3vn8PLqvr1/BMW5aX@QlmRhvQ85bg2zpQjRllC5qW56fteX/BSvj/Kt4xMv@873TF16IFqax6x1EhxpwWYcknlLrraGcUMGRenlcrxK8zrLsUALAaoJixrwoksTwNKFFhV5Le8ksCBgGFATQFFRVfJ@CFgmGCD3yXm8n6OejP/Yz/rhFw "Scala – Try It Online")
]