-------
.. [1] "Preconditioner", Wikipedia, 
       https://en.wikipedia.org/wiki/Preconditioner
.. [2] "Biconjugate gradient method", Wikipedia, 
       https://en.wikipedia.org/wiki/Biconjugate_gradient_method

Examples
--------
>>> import numpy as np
>>> from scipy.sparse import csc_array
>>> from scipy.sparse.linalg import bicg
>>> A = csc_array([[3, 2, 0], [1, -1, 0], [0, 5, 1.]])
>>> b = np.array([2., 4., -1.])
>>> x, exitCode = bicg(A, b, atol=1e-5)
>>> print(exitCode)  # 0 indicates successful convergence
0
>>> np.allclose(A.dot(x), b)
True
r