BrainJS / BrainJS/brain.js

Destructing the input array for smaller standalone sizes

Open
#809 0 comments 0 reactions 0 assignees View on GitHub
enhancement
Dominant language
TypeScript
Stars
14.9k
Forks
1.1k
PR merge metrics
No merged PRs in 30d

Description

## Summary

I think the length of the stringified standalone function can be shrunk down by destructing the input array.

### Basic example

For example I get the following standalone function for a toy model of mine:

```js
function anonymous(input
) {
return [1/(1+1/Math.exp((39.81937789916992+36.750797271728516*1/(1+1/Math.exp((-2.3562111854553223-36.78718566894531*(input[0]||0)+15.768372535705566*(input[1]||0)-36.100013732910156*(input[2]||0)+39.652122497558594*(input[3]||0)+11.332776069641113*(input[4]||0)-33.836517333984375*(input[5]||0)-10.100452423095703*(input[6]||0)+28.876731872558594*(input[7]||0)+13.271198272705078*(input[8]||0)+18.49395179748535*(input[9]||0)+0.9436571002006531*(input[10]||0)+6.865894317626953*(input[11]||0)+20.82369041442871*(input[12]||0)-24.97112464904785*(input[13]||0)-26.523296356201172*(input[14]||0)-43.427001953125*(input[15]||0)+3.031238079071045*(input[16]||0)-1.212550401687622*(input[17]||0)-17.371427536010742*(input[18]||0)-20.678842544555664*(input[19]||0)+51.5930061340332*(input[20]||0)-2.469085931777954*(input[21]||0)+35.399261474609375*(input[22]||0)+18.30061912536621*(input[23]||0)+15.324337005615234*(input[24]||0)-26.739240646362305*(input[25]||0)-7.28486442565918*(input[26]||0)-68.10311889648438*(input[27]||0)-25.33728790283203*(input[28]||0)-90.22299194335938*(input[29]||0)-11.902444839477539*(input[30]||0)-83.09700012207031*(input[31]||0)-8.623071670532227*(input[32]||0)-64.15044403076172*(input[33]||0)+10.765417098999023*(input[34]||0)-44.1068000793457*(input[35]||0)+21.40488624572754*(input[36]||0)-35.67505645751953*(input[37]||0)-0.24675746262073517*(input[38]||0)-22.853561401367188*(input[39]||0))))-27.082130432128906*1/(1+1/Math.exp((43.21043395996094+55.60905075073242*(input[0]||0)-30.349842071533203*(input[1]||0)+49.56303787231445*(input[2]||0)-82.03409576416016*(input[3]||0)+21.484638214111328*(input[4]||0)+1.2688355445861816*(input[5]||0)-13.554427146911621*(input[6]||0)-6.645017623901367*(input[7]||0)-1.6263360977172852*(input[8]||0)+16.92249870300293*(input[9]||0)-10.25234603881836*(input[10]||0)+18.078767776489258*(input[11]||0)-1.4499551057815552*(input[12]||0)+36.58906555175781*(input[13]||0)-50.93557357788086*(input[14]||0)+37.488487243652344*(input[15]||0)-6.5689802169799805*(input[16]||0)+5.584909439086914*(input[17]||0)-24.471023559570312*(input[18]||0)+5.724395751953125*(input[19]||0)+3.081162214279175*(input[20]||0)+15.698524475097656*(input[21]||0)+12.346517562866211*(input[22]||0)+11.10658073425293*(input[23]||0)-20.460920333862305*(input[24]||0)+10.514189720153809*(input[25]||0)-22.449487686157227*(input[26]||0)+43.707210540771484*(input[27]||0)-23.558334350585938*(input[28]||0)+36.483909606933594*(input[29]||0)-20.499589920043945*(input[30]||0)+56.62666320800781*(input[31]||0)-4.648667812347412*(input[32]||0)+52.38578796386719*(input[33]||0)-19.106544494628906*(input[34]||0)+43.4907341003418*(input[35]||0)+3.3386783599853516*(input[36]||0)+40.344364166259766*(input[37]||0)-10.088102340698242*(input[38]||0)+16.640377044677734*(input[39]||0))))-31.671995162963867*1/(1+1/Math.exp((7.0951457023620605+30.0834903717041*(input[0]||0)+3.4483516216278076*(input[1]||0)+11.792354583740234*(input[2]||0)-13.084308624267578*(input[3]||0)-63.03155517578125*(input[4]||0)+21.332082748413086*(input[5]||0)+10.505199432373047*(input[6]||0)+9.749051094055176*(input[7]||0)+3.9140255451202393*(input[8]||0)+3.0706799030303955*(input[9]||0)-46.09328079223633*(input[10]||0)+0.34250664710998535*(input[11]||0)+24.925556182861328*(input[12]||0)+17.421749114990234*(input[13]||0)+30.034879684448242*(input[14]||0)+37.78208923339844*(input[15]||0)-18.002187728881836*(input[16]||0)+38.947330474853516*(input[17]||0)-36.20073318481445*(input[18]||0)+20.468704223632812*(input[19]||0)+3.444467544555664*(input[20]||0)+17.233509063720703*(input[21]||0)+10.301203727722168*(input[22]||0)+14.377137184143066*(input[23]||0)+17.06806182861328*(input[24]||0)+22.356216430664062*(input[25]||0)+37.345848083496094*(input[26]||0)+28.453876495361328*(input[27]||0)-65.41097259521484*(input[28]||0)+11.073134422302246*(input[29]||0)-9.433616638183594*(input[30]||0)+28.588939666748047*(input[31]||0)-25.79983139038086*(input[32]||0)+25.694551467895508*(input[33]||0)+21.673582077026367*(input[34]||0)+20.94894790649414*(input[35]||0)+44.032814025878906*(input[36]||0)+19.994497299194336*(input[37]||0)-27.273710250854492*(input[38]||0)-10.485621452331543*(input[39]||0))))-30.96511459350586*1/(1+1/Math.exp((1.145188331604004-9.083396911621094*(input[0]||0)-32.212738037109375*(input[1]||0)+20.03789710998535*(input[2]||0)-38.70507049560547*(input[3]||0)+66.64431762695312*(input[4]||0)+29.688087463378906*(input[5]||0)-16.257596969604492*(input[6]||0)-4.9896345138549805*(input[7]||0)-6.523383140563965*(input[8]||0)+43.06372833251953*(input[9]||0)+51.18883514404297*(input[10]||0)+41.48089599609375*(input[11]||0)+20.79254150390625*(input[12]||0)+59.022544860839844*(input[13]||0)-35.89398956298828*(input[14]||0)+50.79129409790039*(input[15]||0)-19.720462799072266*(input[16]||0)+20.727319717407227*(input[17]||0)-11.693169593811035*(input[18]||0)+19.079975128173828*(input[19]||0)-32.60030746459961*(input[20]||0)-5.042130947113037*(input[21]||0)-2.4328391551971436*(input[22]||0)-17.980823516845703*(input[23]||0)-9.93130111694336*(input[24]||0)+3.7833878993988037*(input[25]||0)-62.7308464050293*(input[26]||0)+21.44015121459961*(input[27]||0)+55.39729309082031*(input[28]||0)+28.66678810119629*(input[29]||0)+1.808616280555725*(input[30]||0)+52.557350158691406*(input[31]||0)-15.707402229309082*(input[32]||0)+39.487632751464844*(input[33]||0)-18.584300994873047*(input[34]||0)+49.612876892089844*(input[35]||0)-20.778907775878906*(input[36]||0)+34.942806243896484*(input[37]||0)+14.664384841918945*(input[38]||0)-2.826779365539551*(input[39]||0))))))),1/(1+1/Math.exp((-39.819393157958984-36.75081253051758*1/(1+1/Math.exp((-2.3562111854553223-36.78718566894531*(input[0]||0)+15.768372535705566*(input[1]||0)-36.100013732910156*(input[2]||0)+39.652122497558594*(input[3]||0)+11.332776069641113*(input[4]||0)-33.836517333984375*(input[5]||0)-10.100452423095703*(input[6]||0)+28.876731872558594*(input[7]||0)+13.271198272705078*(input[8]||0)+18.49395179748535*(input[9]||0)+0.9436571002006531*(input[10]||0)+6.865894317626953*(input[11]||0)+20.82369041442871*(input[12]||0)-24.97112464904785*(input[13]||0)-26.523296356201172*(input[14]||0)-43.427001953125*(input[15]||0)+3.031238079071045*(input[16]||0)-1.212550401687622*(input[17]||0)-17.371427536010742*(input[18]||0)-20.678842544555664*(input[19]||0)+51.5930061340332*(input[20]||0)-2.469085931777954*(input[21]||0)+35.399261474609375*(input[22]||0)+18.30061912536621*(input[23]||0)+15.324337005615234*(input[24]||0)-26.739240646362305*(input[25]||0)-7.28486442565918*(input[26]||0)-68.10311889648438*(input[27]||0)-25.33728790283203*(input[28]||0)-90.22299194335938*(input[29]||0)-11.902444839477539*(input[30]||0)-83.09700012207031*(input[31]||0)-8.623071670532227*(input[32]||0)-64.15044403076172*(input[33]||0)+10.765417098999023*(input[34]||0)-44.1068000793457*(input[35]||0)+21.40488624572754*(input[36]||0)-35.67505645751953*(input[37]||0)-0.24675746262073517*(input[38]||0)-22.853561401367188*(input[39]||0))))+27.082141876220703*1/(1+1/Math.exp((43.21043395996094+55.60905075073242*(input[0]||0)-30.349842071533203*(input[1]||0)+49.56303787231445*(input[2]||0)-82.03409576416016*(input[3]||0)+21.484638214111328*(input[4]||0)+1.2688355445861816*(input[5]||0)-13.554427146911621*(input[6]||0)-6.645017623901367*(input[7]||0)-1.6263360977172852*(input[8]||0)+16.92249870300293*(input[9]||0)-10.25234603881836*(input[10]||0)+18.078767776489258*(input[11]||0)-1.4499551057815552*(input[12]||0)+36.58906555175781*(input[13]||0)-50.93557357788086*(input[14]||0)+37.488487243652344*(input[15]||0)-6.5689802169799805*(input[16]||0)+5.584909439086914*(input[17]||0)-24.471023559570312*(input[18]||0)+5.724395751953125*(input[19]||0)+3.081162214279175*(input[20]||0)+15.698524475097656*(input[21]||0)+12.346517562866211*(input[22]||0)+11.10658073425293*(input[23]||0)-20.460920333862305*(input[24]||0)+10.514189720153809*(input[25]||0)-22.449487686157227*(input[26]||0)+43.707210540771484*(input[27]||0)-23.558334350585938*(input[28]||0)+36.483909606933594*(input[29]||0)-20.499589920043945*(input[30]||0)+56.62666320800781*(input[31]||0)-4.648667812347412*(input[32]||0)+52.38578796386719*(input[33]||0)-19.106544494628906*(input[34]||0)+43.4907341003418*(input[35]||0)+3.3386783599853516*(input[36]||0)+40.344364166259766*(input[37]||0)-10.088102340698242*(input[38]||0)+16.640377044677734*(input[39]||0))))+31.672008514404297*1/(1+1/Math.exp((7.0951457023620605+30.0834903717041*(input[0]||0)+3.4483516216278076*(input[1]||0)+11.792354583740234*(input[2]||0)-13.084308624267578*(input[3]||0)-63.03155517578125*(input[4]||0)+21.332082748413086*(input[5]||0)+10.505199432373047*(input[6]||0)+9.749051094055176*(input[7]||0)+3.9140255451202393*(input[8]||0)+3.0706799030303955*(input[9]||0)-46.09328079223633*(input[10]||0)+0.34250664710998535*(input[11]||0)+24.925556182861328*(input[12]||0)+17.421749114990234*(input[13]||0)+30.034879684448242*(input[14]||0)+37.78208923339844*(input[15]||0)-18.002187728881836*(input[16]||0)+38.947330474853516*(input[17]||0)-36.20073318481445*(input[18]||0)+20.468704223632812*(input[19]||0)+3.444467544555664*(input[20]||0)+17.233509063720703*(input[21]||0)+10.301203727722168*(input[22]||0)+14.377137184143066*(input[23]||0)+17.06806182861328*(input[24]||0)+22.356216430664062*(input[25]||0)+37.345848083496094*(input[26]||0)+28.453876495361328*(input[27]||0)-65.41097259521484*(input[28]||0)+11.073134422302246*(input[29]||0)-9.433616638183594*(input[30]||0)+28.588939666748047*(input[31]||0)-25.79983139038086*(input[32]||0)+25.694551467895508*(input[33]||0)+21.673582077026367*(input[34]||0)+20.94894790649414*(input[35]||0)+44.032814025878906*(input[36]||0)+19.994497299194336*(input[37]||0)-27.273710250854492*(input[38]||0)-10.485621452331543*(input[39]||0))))+30.96512794494629*1/(1+1/Math.exp((1.145188331604004-9.083396911621094*(input[0]||0)-32.212738037109375*(input[1]||0)+20.03789710998535*(input[2]||0)-38.70507049560547*(input[3]||0)+66.64431762695312*(input[4]||0)+29.688087463378906*(input[5]||0)-16.257596969604492*(input[6]||0)-4.9896345138549805*(input[7]||0)-6.523383140563965*(input[8]||0)+43.06372833251953*(input[9]||0)+51.18883514404297*(input[10]||0)+41.48089599609375*(input[11]||0)+20.79254150390625*(input[12]||0)+59.022544860839844*(input[13]||0)-35.89398956298828*(input[14]||0)+50.79129409790039*(input[15]||0)-19.720462799072266*(input[16]||0)+20.727319717407227*(input[17]||0)-11.693169593811035*(input[18]||0)+19.079975128173828*(input[19]||0)-32.60030746459961*(input[20]||0)-5.042130947113037*(input[21]||0)-2.4328391551971436*(input[22]||0)-17.980823516845703*(input[23]||0)-9.93130111694336*(input[24]||0)+3.7833878993988037*(input[25]||0)-62.7308464050293*(input[26]||0)+21.44015121459961*(input[27]||0)+55.39729309082031*(input[28]||0)+28.66678810119629*(input[29]||0)+1.808616280555725*(input[30]||0)+52.557350158691406*(input[31]||0)-15.707402229309082*(input[32]||0)+39.487632751464844*(input[33]||0)-18.584300994873047*(input[34]||0)+49.612876892089844*(input[35]||0)-20.778907775878906*(input[36]||0)+34.942806243896484*(input[37]||0)+14.664384841918945*(input[38]||0)-2.826779365539551*(input[39]||0)))))))];
}
```

Basically every item in the input array is accessed individually, so for each of them there's `input[`, an index, and `]`. Instead I think we should take advantage of destructing, so to write something like:

```js
function anonymous ([ a, b, c, d ]) {
```

This replaces `inpud[`, the index (which is the one which may not compress great, and `]` with a single pretty short identifier.

### Motivation

The shorter the better.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.