| 182 | |
| 183 | |
| 184 | def build_err_msg(arrays, err_msg, header='Items are not equal:', |
| 185 | verbose=True, names=('ACTUAL', 'DESIRED'), precision=8): |
| 186 | msg = ['\n' + header] |
| 187 | if err_msg: |
| 188 | if err_msg.find('\n') == -1 and len(err_msg) < 79-len(header): |
| 189 | msg = [msg[0] + ' ' + err_msg] |
| 190 | else: |
| 191 | msg.append(err_msg) |
| 192 | if verbose: |
| 193 | for i, a in enumerate(arrays): |
| 194 | |
| 195 | if isinstance(a, ndarray): |
| 196 | # precision argument is only needed if the objects are ndarrays |
| 197 | r_func = partial(array_repr, precision=precision) |
| 198 | else: |
| 199 | r_func = repr |
| 200 | |
| 201 | try: |
| 202 | r = r_func(a) |
| 203 | except Exception as exc: |
| 204 | r = f'[repr failed for <{type(a).__name__}>: {exc}]' |
| 205 | if r.count('\n') > 3: |
| 206 | r = '\n'.join(r.splitlines()[:3]) |
| 207 | r += '...' |
| 208 | msg.append(f' {names[i]}: {r}') |
| 209 | return '\n'.join(msg) |
| 210 | |
| 211 | |
| 212 | def assert_equal(actual, desired, err_msg='', verbose=True): |