mlib-mat.lmt /size: 11 Kb    last modification: 2021-10-28 13:51
1if not modules then modules = { } end modules ['mlib-mat'] = {
2    version   = 1.001,
3    comment   = "companion to mlib-ctx.mkiv",
4    author    = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
5    copyright = "PRAGMA ADE / ConTeXt Development Team",
6    license   = "see context related readme files",
7}
8
9local scanners       = mp.scan
10local injectors      = mp.inject
11
12local scannumeric    = scanners.numeric
13local scanpair       = scanners.pair
14local scancolor      = scanners.color
15
16local mppair         = injectors.pair or mp.pair
17
18local registerscript = metapost.registerscript
19local registerdirect = metapost.registerdirect
20
21local m = xmath
22local c = xcomplex
23
24local m_acos      = m.acos      registerdirect("m_acos",      function() return m_acos     (scannumeric()) end)
25local m_acosh     = m.acosh     registerdirect("m_acosh",     function() return m_acosh    (scannumeric()) end)
26local m_asin      = m.asin      registerdirect("m_asin",      function() return m_asin     (scannumeric()) end)
27local m_asinh     = m.asinh     registerdirect("m_asinh",     function() return m_asinh    (scannumeric()) end)
28local m_atan      = m.atan      registerdirect("m_atan",      function() return m_atan     (scannumeric()) end)
29local m_atan2     = m.atan2     registerdirect("m_atan2",     function() return m_atan2    (scanpair   ()) end)
30local m_atanh     = m.atanh     registerdirect("m_atanh",     function() return m_atanh    (scannumeric()) end)
31local m_cbrt      = m.cbrt      registerdirect("m_cbrt",      function() return m_cbrt     (scannumeric()) end)
32local m_ceil      = m.ceil      registerdirect("m_ceil",      function() return m_ceil     (scannumeric()) end)
33local m_copysign  = m.copysign  registerdirect("m_copysign",  function() return m_copysign (scanpair   ()) end)
34local m_cos       = m.cos       registerdirect("m_cos",       function() return m_cos      (scannumeric()) end)
35local m_cosh      = m.cosh      registerdirect("m_cosh",      function() return m_cosh     (scannumeric()) end)
36local m_deg       = m.deg       registerdirect("m_deg",       function() return m_deg      (scannumeric()) end)
37local m_erf       = m.erf       registerdirect("m_erf",       function() return m_erf      (scannumeric()) end)
38local m_erfc      = m.erfc      registerdirect("m_erfc",      function() return m_erfc     (scannumeric()) end)
39local m_exp       = m.exp       registerdirect("m_exp",       function() return m_exp      (scannumeric()) end)
40local m_exp2      = m.exp2      registerdirect("m_exp2",      function() return m_exp2     (scannumeric()) end)
41local m_expm1     = m.expm1     registerdirect("m_expm1",     function() return m_expm1    (scannumeric()) end)
42local m_fabs      = m.fabs      registerdirect("m_fabs",      function() return m_fabs     (scannumeric()) end)
43local m_fdim      = m.fdim      registerdirect("m_fdim",      function() return m_fdim     (scanpair   ()) end)
44local m_floor     = m.floor     registerdirect("m_floor",     function() return m_floor    (scannumeric()) end)
45local m_fma       = m.fma       registerdirect("m_fma",       function() return m_fma      (scancolor  ()) end)
46local m_fmax      = m.fmax      registerdirect("m_fmax",      function() return m_fmax     (scannumeric()) end)
47local m_fmin      = m.fmin      registerdirect("m_fmin",      function() return m_fmin     (scannumeric()) end)
48local m_fmod      = m.fmod      registerdirect("m_fmod",      function() return m_fmod     (scanpair   ()) end)
49local m_frexp     = m.frexp     registerdirect("m_frexp",     function() return m_frexp    (scannumeric()) end)
50local m_gamma     = m.gamma     registerdirect("m_gamma",     function() return m_gamma    (scannumeric()) end)
51local m_hypot     = m.hypot     registerdirect("m_hypot",     function() return m_hypot    (scanpair   ()) end)
52local m_isfinite  = m.isfinite  registerdirect("m_isfinite",  function() return m_isfinite (scannumeric()) end)
53local m_isinf     = m.isinf     registerdirect("m_isinf",     function() return m_isinf    (scannumeric()) end)
54local m_isnan     = m.isnan     registerdirect("m_isnan",     function() return m_isnan    (scannumeric()) end)
55local m_isnormal  = m.isnormal  registerdirect("m_isnormal",  function() return m_isnormal (scannumeric()) end)
56local m_j0        = m.j0        registerdirect("m_j0",        function() return m_j0       (scannumeric()) end)
57local m_j1        = m.j1        registerdirect("m_j1",        function() return m_j1       (scannumeric()) end)
58local m_jn        = m.jn        registerdirect("m_jn",        function() return m_jn       (scanpair   ()) end)
59local m_ldexp     = m.ldexp     registerdirect("m_ldexp",     function() return m_ldexp    (scanpair   ()) end)
60local m_lgamma    = m.lgamma    registerdirect("m_lgamma",    function() return m_lgamma   (scannumeric()) end)
61local m_log       = m.log       registerdirect("m_log",       function() return m_log      (scannumeric()) end)
62local m_log10     = m.log10     registerdirect("m_log10",     function() return m_log10    (scannumeric()) end)
63local m_log1p     = m.log1p     registerdirect("m_log1p",     function() return m_log1p    (scannumeric()) end)
64local m_log2      = m.log2      registerdirect("m_log2",      function() return m_log2     (scannumeric()) end)
65local m_logb      = m.logb      registerdirect("m_logb",      function() return m_logb     (scannumeric()) end)
66local m_modf      = m.modf      registerdirect("m_modf",      function() return m_modf     (scannumeric()) end)
67local m_nearbyint = m.nearbyint registerdirect("m_nearbyint", function() return m_nearbyint(scannumeric()) end)
68local m_nextafter = m.nextafter registerdirect("m_nextafter", function() return m_nextafter(scanpair   ()) end)
69local m_pow       = m.pow       registerdirect("m_pow",       function() return m_pow      (scanpair   ()) end)
70local m_rad       = m.rad       registerdirect("m_rad",       function() return m_rad      (scannumeric()) end)
71local m_remainder = m.remainder registerdirect("m_remainder", function() return m_remainder(scanpair   ()) end)
72local m_remquo    = m.remquo    registerdirect("m_remquo",    function() return m_remquo   (scannumeric()) end)
73local m_round     = m.round     registerdirect("m_round",     function() return m_round    (scannumeric()) end)
74local m_scalbn    = m.scalbn    registerdirect("m_scalbn",    function() return m_scalbn   (scanpair   ()) end)
75local m_sin       = m.sin       registerdirect("m_sin",       function() return m_sin      (scannumeric()) end)
76local m_sinh      = m.sinh      registerdirect("m_sinh",      function() return m_sinh     (scannumeric()) end)
77local m_sqrt      = m.sqrt      registerdirect("m_sqrt",      function() return m_sqrt     (scannumeric()) end)
78local m_tan       = m.tan       registerdirect("m_tan",       function() return m_tan      (scannumeric()) end)
79local m_tanh      = m.tanh      registerdirect("m_tanh",      function() return m_tanh     (scannumeric()) end)
80local m_tgamma    = m.tgamma    registerdirect("m_tgamma",    function() return m_tgamma   (scannumeric()) end)
81local m_trunc     = m.trunc     registerdirect("m_trunc",     function() return m_trunc    (scannumeric()) end)
82local m_y0        = m.y0        registerdirect("m_y0",        function() return m_y0       (scannumeric()) end)
83local m_y1        = m.y1        registerdirect("m_y1",        function() return m_y1       (scannumeric()) end)
84local m_yn        = m.yn        registerdirect("m_yn",        function() return m_yn       (scanpair   ()) end)
85
86if not (c and c.sin) then
87    return
88end
89
90local c_topair  = c.topair
91local c_totable = c.totable
92local c_new     = c.new
93
94----- c_sin    = c.sin    registerdirect("c_sin",    function() return c_totable(c_sin   (c_new(scanpair()))) end)
95
96local c_sin    = c.sin    registerscript("c_sin",    function() return mppair(c_topair(c_sin   (c_new(scanpair())))) end)
97local c_cos    = c.cos    registerscript("c_cos",    function() return mppair(c_topair(c_cos   (c_new(scanpair())))) end)
98local c_tan    = c.tan    registerscript("c_tan",    function() return mppair(c_topair(c_tan   (c_new(scanpair())))) end)
99local c_sinh   = c.sinh   registerscript("c_sinh",   function() return mppair(c_topair(c_sinh  (c_new(scanpair())))) end)
100local c_cosh   = c.cosh   registerscript("c_cosh",   function() return mppair(c_topair(c_cosh  (c_new(scanpair())))) end)
101local c_tanh   = c.tanh   registerscript("c_tanh",   function() return mppair(c_topair(c_tanh  (c_new(scanpair())))) end)
102
103local c_asin   = c.asin   registerscript("c_asin",   function() return mppair(c_topair(c_sin   (c_new(scanpair())))) end)
104local c_acos   = c.acos   registerscript("c_acos",   function() return mppair(c_topair(c_cos   (c_new(scanpair())))) end)
105local c_atan   = c.atan   registerscript("c_atan",   function() return mppair(c_topair(c_tan   (c_new(scanpair())))) end)
106local c_asinh  = c.asinh  registerscript("c_asinh",  function() return mppair(c_topair(c_sinh  (c_new(scanpair())))) end)
107local c_acosh  = c.acosh  registerscript("c_acosh",  function() return mppair(c_topair(c_cosh  (c_new(scanpair())))) end)
108local c_atanh  = c.atanh  registerscript("c_atanh",  function() return mppair(c_topair(c_tanh  (c_new(scanpair())))) end)
109
110local c_sqrt   = c.sqrt   registerscript("c_sqrt",   function() return mppair(c_topair(c_sqrt  (c_new(scanpair())))) end)
111local c_abs    = c.abs    registerscript("c_abs",    function() return        c_topair(c_abs   (c_new(scanpair())))  end)
112local c_arg    = c.arg    registerscript("c_arg",    function() return        c_topair(c_arg   (c_new(scanpair())))  end)
113local c_conj   = c.conj   registerscript("c_conj",   function() return mppair(c_topair(c_conj  (c_new(scanpair())))) end)
114local c_exp    = c.exp    registerscript("c_exp",    function() return mppair(c_topair(c_exp   (c_new(scanpair())))) end)
115local c_log    = c.log    registerscript("c_log",    function() return mppair(c_topair(c_log   (c_new(scanpair())))) end)
116local c_proj   = c.proj   registerscript("c_proj",   function() return mppair(c_topair(c_proj  (c_new(scanpair())))) end)
117
118local c_erf    = c.erf    registerscript("c_erf",    function() return mppair(c_topair(c_erf   (c_new(scanpair())))) end)
119local c_erfc   = c.erfc   registerscript("c_erfc",   function() return mppair(c_topair(c_erfc  (c_new(scanpair())))) end)
120local c_erfcx  = c.erfcx  registerscript("c_erfcx",  function() return mppair(c_topair(c_erfcx (c_new(scanpair())))) end)
121local c_erfi   = c.erfi   registerscript("c_erfi",   function() return mppair(c_topair(c_erfi  (c_new(scanpair())))) end)
122local c_dawson = c.dawson registerscript("c_dawson", function() return mppair(c_topair(c_dawson(c_new(scanpair())))) end)
123
124local c_voigt      = c.voigt
125local c_voigt_hwhm = c.voigt_hwhm
126
127registerscript("c_voigt", function()
128    return mppair(c_topair(c_voigt(c_new(scanpair()),c_new(scanpair()),c_new(scanpair()))))
129end)
130
131registerscript("c_voigt_hwhm", function()
132    return mppair(c_topair(c_voigt_hwhm(c_new(scanpair()),c_new(scanpair()))))
133end)
134
135local c_pow = c.pow registerscript("c_pow", function() return mppair(c_topair(c_pow(c_new(scanpair()),c_new(scanpair())))) end)
136local c_add = c.add registerscript("c_add", function() return mppair(c_topair(c_add(c_new(scanpair()),c_new(scanpair())))) end)
137local c_sub = c.sub registerscript("c_sub", function() return mppair(c_topair(c_sub(c_new(scanpair()),c_new(scanpair())))) end)
138local c_mul = c.mul registerscript("c_mul", function() return mppair(c_topair(c_mul(c_new(scanpair()),c_new(scanpair())))) end)
139local c_div = c.div registerscript("c_div", function() return mppair(c_topair(c_div(c_new(scanpair()),c_new(scanpair())))) end)
140
141local c_imag = c.imag registerscript("c_imag", function() return c_topair(c_imag(c_new(scanpair()))) end)
142local c_real = c.real registerscript("c_real", function() return c_topair(c_real(c_new(scanpair()))) end)
143local c_neg  = c.neg  registerscript("c_new",  function() return c_topair(c_neg (c_new(scanpair()))) end)
144