MCPcopy Create free account
hub / github.com/pymupdf/PyMuPDF / util_invert_matrix

Function util_invert_matrix

src/__init__.py:24130–24166  ·  view source on GitHub ↗
(matrix)

Source from the content-addressed store, hash-verified

24128
24129
24130def util_invert_matrix(matrix):
24131 if 0:
24132 # Use MuPDF's fz_invert_matrix().
24133 if isinstance( matrix, (tuple, list)):
24134 matrix = mupdf.FzMatrix( *matrix)
24135 elif isinstance( matrix, mupdf.fz_matrix):
24136 matrix = mupdf.FzMatrix( matrix)
24137 elif isinstance( matrix, Matrix):
24138 matrix = mupdf.FzMatrix( matrix.a, matrix.b, matrix.c, matrix.d, matrix.e, matrix.f)
24139 assert isinstance( matrix, mupdf.FzMatrix), f'{type(matrix)=}: {matrix}'
24140 ret = mupdf.fz_invert_matrix( matrix)
24141 if ret == matrix and (0
24142 or abs( matrix.a - 1) >= sys.float_info.epsilon
24143 or abs( matrix.b - 0) >= sys.float_info.epsilon
24144 or abs( matrix.c - 0) >= sys.float_info.epsilon
24145 or abs( matrix.d - 1) >= sys.float_info.epsilon
24146 ):
24147 # Inversion not possible.
24148 return 1, ()
24149 return 0, (ret.a, ret.b, ret.c, ret.d, ret.e, ret.f)
24150 # Do inversion in python.
24151 src = JM_matrix_from_py(matrix)
24152 a = src.a
24153 det = a * src.d - src.b * src.c
24154 if det < -sys.float_info.epsilon or det > sys.float_info.epsilon:
24155 dst = mupdf.FzMatrix()
24156 rdet = 1 / det
24157 dst.a = src.d * rdet
24158 dst.b = -src.b * rdet
24159 dst.c = -src.c * rdet
24160 dst.d = a * rdet
24161 a = -src.e * dst.a - src.f * dst.c
24162 dst.f = -src.e * dst.b - src.f * dst.d
24163 dst.e = a
24164 return 0, (dst.a, dst.b, dst.c, dst.d, dst.e, dst.f)
24165
24166 return 1, ()
24167
24168
24169def util_measure_string( text, fontname, fontsize, encoding):

Callers 5

__truediv__Method · 0.85
invertMethod · 0.85
__truediv__Method · 0.85
__truediv__Method · 0.85
__truediv__Method · 0.85

Calls 1

JM_matrix_from_pyFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…