Skip to content

feat: add C implementation for @stdlib/stats/base/dists/lognormal/logpdf#10881

Open
rautelaKamal wants to merge 1 commit intostdlib-js:developfrom
rautelaKamal:feat/stats/base/dists/lognormal/logpdf-c-port
Open

feat: add C implementation for @stdlib/stats/base/dists/lognormal/logpdf#10881
rautelaKamal wants to merge 1 commit intostdlib-js:developfrom
rautelaKamal:feat/stats/base/dists/lognormal/logpdf-c-port

Conversation

@rautelaKamal
Copy link
Copy Markdown
Contributor

Description

What is the purpose of this pull request?

This pull request:

  • Adds a C implementation for evaluating the natural logarithm of the probability density function (PDF) of a lognormal distribution (@stdlib/stats/base/dists/lognormal/logpdf), and includes the corresponding native N-API bindings following the DDD_D pattern found in similar modules like arcsine/logpdf.

Related Issues

Does this pull request have any related issues?

This pull request has the following related issues:

Questions

Any questions for reviewers of this pull request?

No.

Other

Any other information relevant to this pull request? This may include screenshots, references, and/or implementation notes.

AI Assistance Disclosure

  • Yes
  • No

If yes, how was AI used?
I used an AI assistant to help stub out the initial C boilerplate (header files, build configurations) and to mirror the JS test suite into native tests, which I then carefully reviewed and validated against stdlib guidelines before submitting.

Checklist

Please ensure the following tasks are completed before submitting this pull request.

@stdlib-bot stdlib-bot added Statistics Issue or pull request related to statistical functionality. Needs Review A pull request which needs code review. Good First PR A pull request resolving a Good First Issue. labels Mar 11, 2026
@stdlib-bot
Copy link
Copy Markdown
Contributor

stdlib-bot commented Mar 11, 2026

Coverage Report

Package Statements Branches Functions Lines
array $\color{red}62639/84822$
$\color{green}+73.85%$
$\color{red}950/1002$
$\color{green}+94.81%$
$\color{red}43/894$
$\color{green}+4.81%$
$\color{red}62639/84822$
$\color{green}+73.85%$
array/base $\color{red}39008/51786$
$\color{green}+75.33%$
$\color{red}581/585$
$\color{green}+99.32%$
$\color{red}2/526$
$\color{green}+0.38%$
$\color{red}39008/51786$
$\color{green}+75.33%$
array $\color{red}62639/84822$
$\color{green}+73.85%$
$\color{red}950/1002$
$\color{green}+94.81%$
$\color{red}43/894$
$\color{green}+4.81%$
$\color{red}62639/84822$
$\color{green}+73.85%$
array/nans-like $\color{red}129/131$
$\color{green}+98.47%$
$\color{red}14/15$
$\color{green}+93.33%$
$\color{green}1/1$
$\color{green}+100.00%$
$\color{red}129/131$
$\color{green}+98.47%$
array/nans $\color{green}131/131$
$\color{green}+100.00%$
$\color{green}12/12$
$\color{green}+100.00%$
$\color{green}1/1$
$\color{green}+100.00%$
$\color{green}131/131$
$\color{green}+100.00%$
array/one-to-like $\color{green}107/107$
$\color{green}+100.00%$
$\color{green}7/7$
$\color{green}+100.00%$
$\color{green}1/1$
$\color{green}+100.00%$
$\color{green}107/107$
$\color{green}+100.00%$
array/ones-like $\color{green}125/125$
$\color{green}+100.00%$
$\color{green}12/12$
$\color{green}+100.00%$
$\color{green}1/1$
$\color{green}+100.00%$
$\color{green}125/125$
$\color{green}+100.00%$
array/ones $\color{green}123/123$
$\color{green}+100.00%$
$\color{green}9/9$
$\color{green}+100.00%$
$\color{green}1/1$
$\color{green}+100.00%$
$\color{green}123/123$
$\color{green}+100.00%$
array/zero-to-like $\color{green}107/107$
$\color{green}+100.00%$
$\color{green}7/7$
$\color{green}+100.00%$
$\color{green}1/1$
$\color{green}+100.00%$
$\color{green}107/107$
$\color{green}+100.00%$
array/zeros-like $\color{green}107/107$
$\color{green}+100.00%$
$\color{green}7/7$
$\color{green}+100.00%$
$\color{green}1/1$
$\color{green}+100.00%$
$\color{green}107/107$
$\color{green}+100.00%$
array/zeros $\color{green}124/124$
$\color{green}+100.00%$
$\color{green}12/12$
$\color{green}+100.00%$
$\color{green}1/1$
$\color{green}+100.00%$
$\color{green}124/124$
$\color{green}+100.00%$
assert/has-dataview-support $\color{green}141/141$
$\color{green}+100.00%$
$\color{red}12/13$
$\color{green}+92.31%$
$\color{green}1/1$
$\color{green}+100.00%$
$\color{green}141/141$
$\color{green}+100.00%$
blas/base/dgemm $\color{green}834/834$
$\color{green}+100.00%$
$\color{green}118/118$
$\color{green}+100.00%$
$\color{green}8/8$
$\color{green}+100.00%$
$\color{green}834/834$
$\color{green}+100.00%$
blas/base/diagonal-type-resolve-enum $\color{green}97/97$
$\color{green}+100.00%$
$\color{green}9/9$
$\color{green}+100.00%$
$\color{green}1/1$
$\color{green}+100.00%$
$\color{green}97/97$
$\color{green}+100.00%$
blas/base/diagonal-type-resolve-str $\color{green}96/96$
$\color{green}+100.00%$
$\color{green}9/9$
$\color{green}+100.00%$
$\color{green}1/1$
$\color{green}+100.00%$
$\color{green}96/96$
$\color{green}+100.00%$
blas/base $\color{red}27067/35190$
$\color{green}+76.92%$
$\color{red}487/544$
$\color{green}+89.52%$
$\color{red}12/281$
$\color{green}+4.27%$
$\color{red}27067/35190$
$\color{green}+76.92%$
blas/base/layout-resolve-str $\color{green}96/96$
$\color{green}+100.00%$
$\color{green}9/9$
$\color{green}+100.00%$
$\color{green}1/1$
$\color{green}+100.00%$
$\color{green}96/96$
$\color{green}+100.00%$
blas/base $\color{red}27067/35190$
$\color{green}+76.92%$
$\color{red}487/544$
$\color{green}+89.52%$
$\color{red}12/281$
$\color{green}+4.27%$
$\color{red}27067/35190$
$\color{green}+76.92%$
blas/base/matrix-orientation-resolve-str $\color{green}96/96$
$\color{green}+100.00%$
$\color{green}9/9$
$\color{green}+100.00%$
$\color{green}1/1$
$\color{green}+100.00%$
$\color{green}96/96$
$\color{green}+100.00%$
blas/base/matrix-triangle-resolve-str $\color{green}96/96$
$\color{green}+100.00%$
$\color{green}9/9$
$\color{green}+100.00%$
$\color{green}1/1$
$\color{green}+100.00%$
$\color{green}96/96$
$\color{green}+100.00%$
blas/base/ndarray/gdot $\color{green}106/106$
$\color{green}+100.00%$
$\color{green}3/3$
$\color{green}+100.00%$
$\color{green}1/1$
$\color{green}+100.00%$
$\color{green}106/106$
$\color{green}+100.00%$
blas/ext $\color{red}59239/71719$
$\color{green}+82.60%$
$\color{red}1044/1180$
$\color{green}+88.47%$
$\color{red}20/591$
$\color{green}+3.38%$
$\color{red}59239/71719$
$\color{green}+82.60%$
blas/ext/base $\color{red}55888/66895$
$\color{green}+83.55%$
$\color{red}1005/1141$
$\color{green}+88.08%$
$\color{red}20/568$
$\color{green}+3.52%$
$\color{red}55888/66895$
$\color{green}+83.55%$
blas/ext/base/dindex-of $\color{green}357/357$
$\color{green}+100.00%$
$\color{green}19/19$
$\color{green}+100.00%$
$\color{green}4/4$
$\color{green}+100.00%$
$\color{green}357/357$
$\color{green}+100.00%$
blas/ext/base/dlast-index-of $\color{green}364/364$
$\color{green}+100.00%$
$\color{green}17/17$
$\color{green}+100.00%$
$\color{green}4/4$
$\color{green}+100.00%$
$\color{green}364/364$
$\color{green}+100.00%$
blas/ext/base/gindex-of-row $\color{red}471/555$
$\color{green}+84.86%$
$\color{red}39/40$
$\color{green}+97.50%$
$\color{red}3/4$
$\color{green}+75.00%$
$\color{red}471/555$
$\color{green}+84.86%$
blas/ext/base $\color{red}55990/67001$
$\color{green}+83.57%$
$\color{red}1007/1143$
$\color{green}+88.10%$
$\color{red}20/570$
$\color{green}+3.51%$
$\color{red}55990/67001$
$\color{green}+83.57%$
blas/ext/base/ndarray $\color{red}8325/8909$
$\color{green}+93.44%$
$\color{red}143/145$
$\color{green}+98.62%$
$\color{red}0/72$
$\color{green}+0.00%$
$\color{red}8325/8909$
$\color{green}+93.44%$
blas/ext/base/ndarray/gsort $\color{green}121/121$
$\color{green}+100.00%$
$\color{green}3/3$
$\color{green}+100.00%$
$\color{green}1/1$
$\color{green}+100.00%$
$\color{green}121/121$
$\color{green}+100.00%$
blas/ext/base/ndarray $\color{red}8325/8909$
$\color{green}+93.44%$
$\color{red}143/145$
$\color{green}+98.62%$
$\color{red}0/72$
$\color{green}+0.00%$
$\color{red}8325/8909$
$\color{green}+93.44%$
blas/ext/base/ndarray/scircshift $\color{green}117/117$
$\color{green}+100.00%$
$\color{green}3/3$
$\color{green}+100.00%$
$\color{green}1/1$
$\color{green}+100.00%$
$\color{green}117/117$
$\color{green}+100.00%$
blas/ext/base/sindex-of $\color{green}357/357$
$\color{green}+100.00%$
$\color{green}19/19$
$\color{green}+100.00%$
$\color{green}4/4$
$\color{green}+100.00%$
$\color{green}357/357$
$\color{green}+100.00%$
blas/ext/base/slast-index-of $\color{green}364/364$
$\color{green}+100.00%$
$\color{green}17/17$
$\color{green}+100.00%$
$\color{green}4/4$
$\color{green}+100.00%$
$\color{green}364/364$
$\color{green}+100.00%$
blas/ext/find-index $\color{green}500/500$
$\color{green}+100.00%$
$\color{green}54/54$
$\color{green}+100.00%$
$\color{green}2/2$
$\color{green}+100.00%$
$\color{green}500/500$
$\color{green}+100.00%$
blas/ext/find-last-index $\color{green}500/500$
$\color{green}+100.00%$
$\color{green}54/54$
$\color{green}+100.00%$
$\color{green}2/2$
$\color{green}+100.00%$
$\color{green}500/500$
$\color{green}+100.00%$
blas/ext/index-of $\color{green}625/625$
$\color{green}+100.00%$
$\color{green}76/76$
$\color{green}+100.00%$
$\color{green}2/2$
$\color{green}+100.00%$
$\color{green}625/625$
$\color{green}+100.00%$
blas/ext/last-index-of $\color{green}625/625$
$\color{green}+100.00%$
$\color{green}76/76$
$\color{green}+100.00%$
$\color{green}2/2$
$\color{green}+100.00%$
$\color{green}625/625$
$\color{green}+100.00%$
blas/ext $\color{red}59443/71931$
$\color{green}+82.64%$
$\color{red}1048/1184$
$\color{green}+88.51%$
$\color{red}20/595$
$\color{green}+3.36%$
$\color{red}59443/71931$
$\color{green}+82.64%$
math/base/special/cos $\color{green}236/236$
$\color{green}+100.00%$
$\color{green}14/14$
$\color{green}+100.00%$
$\color{green}2/2$
$\color{green}+100.00%$
$\color{green}236/236$
$\color{green}+100.00%$
math/base/tools/normhermitepolyf $\color{green}230/230$
$\color{green}+100.00%$
$\color{green}27/27$
$\color{green}+100.00%$
$\color{green}3/3$
$\color{green}+100.00%$
$\color{green}230/230$
$\color{green}+100.00%$
ndarray $\color{red}201637/381219$
$\color{green}+52.89%$
$\color{red}2274/2314$
$\color{green}+98.27%$
$\color{red}48/1965$
$\color{green}+2.44%$
$\color{red}201637/381219$
$\color{green}+52.89%$
ndarray/base $\color{red}174294/344524$
$\color{green}+50.59%$
$\color{red}1858/1887$
$\color{green}+98.46%$
$\color{red}20/1686$
$\color{green}+1.19%$
$\color{red}174294/344524$
$\color{green}+50.59%$
ndarray/base/fliplr $\color{green}128/128$
$\color{green}+100.00%$
$\color{green}5/5$
$\color{green}+100.00%$
$\color{green}1/1$
$\color{green}+100.00%$
$\color{green}128/128$
$\color{green}+100.00%$
ndarray/base/from-scalar-like $\color{green}140/140$
$\color{green}+100.00%$
$\color{green}12/12$
$\color{green}+100.00%$
$\color{green}1/1$
$\color{green}+100.00%$
$\color{green}140/140$
$\color{green}+100.00%$
ndarray/base/maybe-broadcast-array $\color{green}180/180$
$\color{green}+100.00%$
$\color{green}8/8$
$\color{green}+100.00%$
$\color{green}1/1$
$\color{green}+100.00%$
$\color{green}180/180$
$\color{green}+100.00%$
ndarray/base/maybe-broadcast-arrays $\color{green}217/217$
$\color{green}+100.00%$
$\color{green}8/8$
$\color{green}+100.00%$
$\color{green}1/1$
$\color{green}+100.00%$
$\color{green}217/217$
$\color{green}+100.00%$
ndarray/base/meta-data-props $\color{green}171/171$
$\color{green}+100.00%$
$\color{green}4/4$
$\color{green}+100.00%$
$\color{green}2/2$
$\color{green}+100.00%$
$\color{green}171/171$
$\color{green}+100.00%$
ndarray/base/min-signed-integer-dtype $\color{green}118/118$
$\color{green}+100.00%$
$\color{green}16/16$
$\color{green}+100.00%$
$\color{green}1/1$
$\color{green}+100.00%$
$\color{green}118/118$
$\color{green}+100.00%$
ndarray/base/min-unsigned-integer-dtype $\color{green}103/103$
$\color{green}+100.00%$
$\color{green}9/9$
$\color{green}+100.00%$
$\color{green}1/1$
$\color{green}+100.00%$
$\color{green}103/103$
$\color{green}+100.00%$
ndarray/base/ndarraylike2ndarray $\color{green}110/110$
$\color{green}+100.00%$
$\color{red}3/4$
$\color{green}+75.00%$
$\color{green}1/1$
$\color{green}+100.00%$
$\color{green}110/110$
$\color{green}+100.00%$
ndarray/base/prepend-singleton-dimensions $\color{green}127/127$
$\color{green}+100.00%$
$\color{green}5/5$
$\color{green}+100.00%$
$\color{green}1/1$
$\color{green}+100.00%$
$\color{green}127/127$
$\color{green}+100.00%$
ndarray/base/remove-singleton-dimensions $\color{green}131/131$
$\color{green}+100.00%$
$\color{green}5/5$
$\color{green}+100.00%$
$\color{green}1/1$
$\color{green}+100.00%$
$\color{green}131/131$
$\color{green}+100.00%$
ndarray/base/reverse-dimension $\color{green}165/165$
$\color{green}+100.00%$
$\color{green}9/9$
$\color{green}+100.00%$
$\color{green}1/1$
$\color{green}+100.00%$
$\color{green}165/165$
$\color{green}+100.00%$
ndarray/base/serialize-meta-data $\color{green}507/507$
$\color{green}+100.00%$
$\color{red}29/31$
$\color{green}+93.55%$
$\color{green}2/2$
$\color{green}+100.00%$
$\color{green}507/507$
$\color{green}+100.00%$
ndarray/base/spread-dimensions $\color{green}224/224$
$\color{green}+100.00%$
$\color{green}24/24$
$\color{green}+100.00%$
$\color{green}1/1$
$\color{green}+100.00%$
$\color{green}224/224$
$\color{green}+100.00%$
ndarray/base/unary-strided1d-dispatch-factory $\color{red}214/280$
$\color{green}+76.43%$
$\color{green}2/2$
$\color{green}+100.00%$
$\color{red}0/1$
$\color{green}+0.00%$
$\color{red}214/280$
$\color{green}+76.43%$
ndarray/base/unary-strided1d-dispatch $\color{red}346/618$
$\color{green}+55.99%$
$\color{green}3/3$
$\color{green}+100.00%$
$\color{red}0/4$
$\color{green}+0.00%$
$\color{red}346/618$
$\color{green}+55.99%$
ndarray/spread-dimensions $\color{green}124/124$
$\color{green}+100.00%$
$\color{green}9/9$
$\color{green}+100.00%$
$\color{green}1/1$
$\color{green}+100.00%$
$\color{green}124/124$
$\color{green}+100.00%$
stats/base/dists/lognormal/logpdf $\color{green}323/323$
$\color{green}+0.00%$
$\color{green}23/23$
$\color{green}+0.00%$
$\color{green}4/4$
$\color{green}+0.00%$
$\color{green}323/323$
$\color{green}+0.00%$
stats/cumax $\color{green}167/167$
$\color{green}+100.00%$
$\color{green}2/2$
$\color{green}+100.00%$
$\color{green}0/0$
$\color{green}+100.00%$
$\color{green}167/167$
$\color{green}+100.00%$
stats/cumin $\color{green}167/167$
$\color{green}+100.00%$
$\color{green}2/2$
$\color{green}+100.00%$
$\color{green}0/0$
$\color{green}+100.00%$
$\color{green}167/167$
$\color{green}+100.00%$
stats/incr/wmean $\color{green}174/174$
$\color{green}+100.00%$
$\color{green}7/7$
$\color{green}+100.00%$
$\color{green}2/2$
$\color{green}+100.00%$
$\color{green}174/174$
$\color{green}+100.00%$
stats/ztest2 $\color{green}393/393$
$\color{green}+100.00%$
$\color{green}61/61$
$\color{green}+100.00%$
$\color{green}3/3$
$\color{green}+100.00%$
$\color{green}393/393$
$\color{green}+100.00%$
strided/base/zmap $\color{green}226/226$
$\color{green}+100.00%$
$\color{green}9/9$
$\color{green}+100.00%$
$\color{green}2/2$
$\color{green}+100.00%$
$\color{green}226/226$
$\color{green}+100.00%$
utils/async/try-then $\color{green}199/199$
$\color{green}+100.00%$
$\color{green}21/21$
$\color{green}+100.00%$
$\color{green}3/3$
$\color{green}+100.00%$
$\color{green}199/199$
$\color{green}+100.00%$

The above coverage report was generated for the changes in this PR.

@rautelaKamal rautelaKamal marked this pull request as draft March 12, 2026 00:41
@stdlib-bot stdlib-bot removed the Needs Review A pull request which needs code review. label Mar 12, 2026
@rautelaKamal rautelaKamal force-pushed the feat/stats/base/dists/lognormal/logpdf-c-port branch from 6f8590a to da83153 Compare March 12, 2026 11:38
@rautelaKamal rautelaKamal marked this pull request as ready for review March 12, 2026 15:32
@stdlib-bot stdlib-bot added the Needs Review A pull request which needs code review. label Mar 12, 2026
@rautelaKamal rautelaKamal force-pushed the feat/stats/base/dists/lognormal/logpdf-c-port branch 4 times, most recently from 7ba861c to 49ba171 Compare April 1, 2026 18:24
@github-actions github-actions bot mentioned this pull request Apr 1, 2026
@rautelaKamal rautelaKamal force-pushed the feat/stats/base/dists/lognormal/logpdf-c-port branch 2 times, most recently from 67491f7 to 55771c2 Compare April 4, 2026 08:38
@rautelaKamal rautelaKamal force-pushed the feat/stats/base/dists/lognormal/logpdf-c-port branch from 7ab1cb6 to ae3b11a Compare April 5, 2026 18:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Good First PR A pull request resolving a Good First Issue. Needs Review A pull request which needs code review. Statistics Issue or pull request related to statistical functionality.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants