Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Read model type from R (attempt number 2) [PLT-1174] #5857

Merged
merged 31 commits into from
Apr 11, 2024

Conversation

kwxm
Copy link
Contributor

@kwxm kwxm commented Mar 26, 2024

This is a continuation of #5841. It

  • Improves R/Haskell interface in the code that generates the cost model, simplifying things considerably.
  • Moves the memory cost models into a separate file.
  • Removes some hard-coded numbers from the Haskell code and generates them in the R code instead.
  • Generalises the costing function infrastructure a bit: for example a number of models involved special types that were really the coeffcients of linear functions but I've now replaced those all with a single type of linear function. This should make it easier to change the model type if we need to, for example by replacing a linear function with a logarithmic one. This has led to some more nesting in the costing function types which could possibly slow things down a bit. I'll run the benchmarks to check.
  • The changes above have also changed the JSON nesting, but they haven't changed the order of the parameters, so cost model updates shouldn't be affected.

These changes will lead to some small differences in the numbers in the JSON file, but I haven't updated it yet. It's probably better to wait for a full cost model update to do that. The one exception is the cost model for verifyEd25519Signature, which was based on the wrong variable. I've taken the opportunity to correct that. The function is very fast anyway, so the differences weren't very significant: the correction has actually made the benchmarks cheaper. [This change has now been reverted until some other pending PRs which improve configurability have been merged.].

I have some more improvements in mind for the core costing function code, but those will probably change the order of the cost model parameters so I'll leave it for a later PR.

@kwxm kwxm added the Costing Anything relating to costs, fees, gas, etc. label Mar 26, 2024
@kwxm
Copy link
Contributor Author

kwxm commented Mar 27, 2024

/benchmark validation

Copy link
Contributor

Click here to check the status of your benchmark.

Copy link
Contributor

Comparing benchmark results of 'nofib' on '902cfa3ac' (base) and 'd77e0f56c' (PR)

Results table
Script 902cfa3 d77e0f5 Change
clausify/formula1 3.935 ms 3.775 ms -4.1%
clausify/formula2 5.180 ms 4.984 ms -3.8%
clausify/formula3 14.07 ms 13.54 ms -3.8%
clausify/formula4 28.87 ms 27.98 ms -3.1%
clausify/formula5 68.04 ms 65.41 ms -3.9%
knights/4x4 18.35 ms 17.70 ms -3.5%
knights/6x6 48.56 ms 46.78 ms -3.7%
knights/8x8 85.36 ms 82.27 ms -3.6%
primetest/05digits 9.148 ms 8.758 ms -4.3%
primetest/08digits 14.74 ms 14.08 ms -4.5%
primetest/10digits 17.60 ms 16.93 ms -3.8%
primetest/20digits 35.34 ms 34.16 ms -3.3%
primetest/30digits 54.21 ms 52.07 ms -3.9%
primetest/40digits 73.19 ms 70.54 ms -3.6%
primetest/50digits 89.37 ms 85.13 ms -4.7%
queens4x4/bt 5.738 ms 5.554 ms -3.2%
queens4x4/bm 7.440 ms 7.217 ms -3.0%
queens4x4/bjbt1 7.079 ms 6.873 ms -2.9%
queens4x4/bjbt2 6.561 ms 6.358 ms -3.1%
queens4x4/fc 15.36 ms 14.93 ms -2.8%
queens5x5/bt 76.50 ms 74.02 ms -3.2%
queens5x5/bm 83.13 ms 80.80 ms -2.8%
queens5x5/bjbt1 90.19 ms 87.63 ms -2.8%
queens5x5/bjbt2 87.22 ms 84.49 ms -3.1%
queens5x5/fc 194.4 ms 189.0 ms -2.8%

Copy link
Contributor

Click here to check the status of your benchmark.

Copy link
Contributor

Comparing benchmark results of 'validation' on '902cfa3ac' (base) and 'd77e0f56c' (PR)

Results table
Script 902cfa3 d77e0f5 Change
auction_1-1 170.9 μs 171.2 μs +0.2%
auction_1-2 626.2 μs 625.7 μs -0.1%
auction_1-3 622.9 μs 623.4 μs +0.1%
auction_1-4 221.8 μs 223.4 μs +0.7%
auction_2-1 170.7 μs 172.5 μs +1.1%
auction_2-2 627.9 μs 627.5 μs -0.1%
auction_2-3 821.8 μs 820.0 μs -0.2%
auction_2-4 623.8 μs 625.3 μs +0.2%
auction_2-5 222.9 μs 224.3 μs +0.6%
crowdfunding-success-1 201.3 μs 201.7 μs +0.2%
crowdfunding-success-2 201.2 μs 201.4 μs +0.1%
crowdfunding-success-3 200.9 μs 200.9 μs 0.0%
currency-1 243.8 μs 243.6 μs -0.1%
escrow-redeem_1-1 338.8 μs 340.1 μs +0.4%
escrow-redeem_1-2 339.4 μs 340.6 μs +0.4%
escrow-redeem_2-1 391.5 μs 394.4 μs +0.7%
escrow-redeem_2-2 392.3 μs 394.9 μs +0.7%
escrow-redeem_2-3 392.2 μs 395.0 μs +0.7%
escrow-refund-1 148.4 μs 148.7 μs +0.2%
future-increase-margin-1 244.8 μs 245.6 μs +0.3%
future-increase-margin-2 525.8 μs 527.1 μs +0.2%
future-increase-margin-3 528.3 μs 532.0 μs +0.7%
future-increase-margin-4 478.7 μs 481.4 μs +0.6%
future-increase-margin-5 799.4 μs 797.9 μs -0.2%
future-pay-out-1 244.4 μs 244.6 μs +0.1%
future-pay-out-2 526.5 μs 534.7 μs +1.6%
future-pay-out-3 526.9 μs 526.3 μs -0.1%
future-pay-out-4 794.6 μs 800.3 μs +0.7%
future-settle-early-1 243.3 μs 244.8 μs +0.6%
future-settle-early-2 525.6 μs 528.6 μs +0.6%
future-settle-early-3 526.6 μs 530.3 μs +0.7%
future-settle-early-4 595.9 μs 598.8 μs +0.5%
game-sm-success_1-1 374.4 μs 376.2 μs +0.5%
game-sm-success_1-2 190.9 μs 190.9 μs 0.0%
game-sm-success_1-3 628.4 μs 629.2 μs +0.1%
game-sm-success_1-4 215.7 μs 215.8 μs +0.0%
game-sm-success_2-1 375.8 μs 376.0 μs +0.1%
game-sm-success_2-2 191.0 μs 190.6 μs -0.2%
game-sm-success_2-3 626.7 μs 628.7 μs +0.3%
game-sm-success_2-4 214.6 μs 216.7 μs +1.0%
game-sm-success_2-5 628.7 μs 627.8 μs -0.1%
game-sm-success_2-6 214.5 μs 216.6 μs +1.0%
multisig-sm-1 379.7 μs 385.3 μs +1.5%
multisig-sm-2 372.0 μs 373.0 μs +0.3%
multisig-sm-3 376.0 μs 377.2 μs +0.3%
multisig-sm-4 379.7 μs 382.3 μs +0.7%
multisig-sm-5 539.9 μs 546.0 μs +1.1%
multisig-sm-6 382.7 μs 384.6 μs +0.5%
multisig-sm-7 371.2 μs 373.9 μs +0.7%
multisig-sm-8 374.5 μs 379.3 μs +1.3%
multisig-sm-9 381.2 μs 382.2 μs +0.3%
multisig-sm-10 541.5 μs 545.2 μs +0.7%
ping-pong-1 320.4 μs 319.0 μs -0.4%
ping-pong-2 320.0 μs 320.2 μs +0.1%
ping-pong_2-1 194.2 μs 194.6 μs +0.2%
prism-1 162.0 μs 162.6 μs +0.4%
prism-2 399.3 μs 400.6 μs +0.3%
prism-3 360.0 μs 360.8 μs +0.2%
pubkey-1 136.0 μs 136.8 μs +0.6%
stablecoin_1-1 887.5 μs 887.8 μs +0.0%
stablecoin_1-2 186.7 μs 187.0 μs +0.2%
stablecoin_1-3 1.021 ms 1.022 ms +0.1%
stablecoin_1-4 197.4 μs 196.5 μs -0.5%
stablecoin_1-5 1.313 ms 1.317 ms +0.3%
stablecoin_1-6 245.1 μs 244.7 μs -0.2%
stablecoin_2-1 887.7 μs 888.3 μs +0.1%
stablecoin_2-2 186.3 μs 187.3 μs +0.5%
stablecoin_2-3 1.022 ms 1.022 ms 0.0%
stablecoin_2-4 197.1 μs 196.9 μs -0.1%
token-account-1 183.9 μs 184.3 μs +0.2%
token-account-2 323.3 μs 325.5 μs +0.7%
uniswap-1 405.3 μs 407.5 μs +0.5%
uniswap-2 213.1 μs 213.5 μs +0.2%
uniswap-3 1.715 ms 1.716 ms +0.1%
uniswap-4 323.6 μs 321.7 μs -0.6%
uniswap-5 1.122 ms 1.126 ms +0.4%
uniswap-6 307.5 μs 306.4 μs -0.4%
vesting-1 337.8 μs 338.7 μs +0.3%

@kwxm kwxm mentioned this pull request Mar 27, 2024
@kwxm
Copy link
Contributor Author

kwxm commented Mar 27, 2024

/benchmark validation

@kwxm
Copy link
Contributor Author

kwxm commented Mar 27, 2024

/benchmark nofib

@kwxm kwxm changed the title Kwxm/costing/read model type from r 2 Kwxm/costing/read model type from R 2 Mar 27, 2024
@kwxm kwxm changed the title Kwxm/costing/read model type from R 2 Read model type from R (attempt number 2) Mar 27, 2024
@kwxm
Copy link
Contributor Author

kwxm commented Mar 27, 2024

I was mystified by the apparent speedup in nofib, but #5869 suggests that the faster results are also what happens in master. Presumably some previous PR sped things up and I merged that into this branch at some point.

Copy link
Contributor

Click here to check the status of your benchmark.

Copy link
Contributor

Comparing benchmark results of 'validation' on '902cfa3ac' (base) and 'd77e0f56c' (PR)

Results table
Script 902cfa3 d77e0f5 Change
auction_1-1 171.2 μs 172.2 μs +0.6%
auction_1-2 625.5 μs 626.9 μs +0.2%
auction_1-3 624.5 μs 624.6 μs +0.0%
auction_1-4 223.2 μs 225.2 μs +0.9%
auction_2-1 171.4 μs 173.6 μs +1.3%
auction_2-2 626.6 μs 625.2 μs -0.2%
auction_2-3 822.0 μs 823.6 μs +0.2%
auction_2-4 625.1 μs 624.7 μs -0.1%
auction_2-5 223.0 μs 224.6 μs +0.7%
crowdfunding-success-1 202.0 μs 202.1 μs +0.0%
crowdfunding-success-2 201.9 μs 201.9 μs 0.0%
crowdfunding-success-3 202.5 μs 202.2 μs -0.1%
currency-1 244.2 μs 244.5 μs +0.1%
escrow-redeem_1-1 341.5 μs 342.4 μs +0.3%
escrow-redeem_1-2 340.4 μs 341.9 μs +0.4%
escrow-redeem_2-1 392.6 μs 394.9 μs +0.6%
escrow-redeem_2-2 393.2 μs 397.6 μs +1.1%
escrow-redeem_2-3 394.7 μs 397.3 μs +0.7%
escrow-refund-1 149.0 μs 149.7 μs +0.5%
future-increase-margin-1 245.0 μs 245.5 μs +0.2%
future-increase-margin-2 528.6 μs 527.7 μs -0.2%
future-increase-margin-3 528.4 μs 530.9 μs +0.5%
future-increase-margin-4 480.5 μs 481.2 μs +0.1%
future-increase-margin-5 798.2 μs 798.0 μs -0.0%
future-pay-out-1 245.2 μs 246.7 μs +0.6%
future-pay-out-2 529.6 μs 527.6 μs -0.4%
future-pay-out-3 527.5 μs 529.8 μs +0.4%
future-pay-out-4 798.1 μs 798.4 μs +0.0%
future-settle-early-1 244.9 μs 246.2 μs +0.5%
future-settle-early-2 530.1 μs 528.0 μs -0.4%
future-settle-early-3 529.1 μs 528.4 μs -0.1%
future-settle-early-4 598.3 μs 599.5 μs +0.2%
game-sm-success_1-1 376.1 μs 377.7 μs +0.4%
game-sm-success_1-2 192.0 μs 191.0 μs -0.5%
game-sm-success_1-3 630.3 μs 629.8 μs -0.1%
game-sm-success_1-4 215.3 μs 217.6 μs +1.1%
game-sm-success_2-1 376.9 μs 379.0 μs +0.6%
game-sm-success_2-2 192.2 μs 191.2 μs -0.5%
game-sm-success_2-3 630.9 μs 631.9 μs +0.2%
game-sm-success_2-4 215.6 μs 217.7 μs +1.0%
game-sm-success_2-5 628.7 μs 631.5 μs +0.4%
game-sm-success_2-6 215.4 μs 217.3 μs +0.9%
multisig-sm-1 383.9 μs 386.0 μs +0.5%
multisig-sm-2 371.7 μs 376.2 μs +1.2%
multisig-sm-3 378.1 μs 379.4 μs +0.3%
multisig-sm-4 381.3 μs 385.1 μs +1.0%
multisig-sm-5 543.3 μs 546.1 μs +0.5%
multisig-sm-6 383.0 μs 386.4 μs +0.9%
multisig-sm-7 372.5 μs 375.3 μs +0.8%
multisig-sm-8 375.7 μs 379.5 μs +1.0%
multisig-sm-9 382.9 μs 383.7 μs +0.2%
multisig-sm-10 543.7 μs 545.5 μs +0.3%
ping-pong-1 320.3 μs 320.5 μs +0.1%
ping-pong-2 321.2 μs 322.4 μs +0.4%
ping-pong_2-1 195.1 μs 194.9 μs -0.1%
prism-1 163.0 μs 163.2 μs +0.1%
prism-2 400.8 μs 398.4 μs -0.6%
prism-3 361.3 μs 360.2 μs -0.3%
pubkey-1 136.6 μs 137.6 μs +0.7%
stablecoin_1-1 888.0 μs 889.6 μs +0.2%
stablecoin_1-2 187.5 μs 187.5 μs 0.0%
stablecoin_1-3 1.021 ms 1.024 ms +0.3%
stablecoin_1-4 198.5 μs 197.1 μs -0.7%
stablecoin_1-5 1.313 ms 1.314 ms +0.1%
stablecoin_1-6 244.8 μs 244.9 μs +0.0%
stablecoin_2-1 887.6 μs 890.6 μs +0.3%
stablecoin_2-2 186.8 μs 187.9 μs +0.6%
stablecoin_2-3 1.023 ms 1.023 ms 0.0%
stablecoin_2-4 198.2 μs 197.9 μs -0.2%
token-account-1 184.0 μs 185.0 μs +0.5%
token-account-2 324.3 μs 327.1 μs +0.9%
uniswap-1 405.9 μs 407.7 μs +0.4%
uniswap-2 213.7 μs 214.6 μs +0.4%
uniswap-3 1.719 ms 1.715 ms -0.2%
uniswap-4 326.0 μs 324.4 μs -0.5%
uniswap-5 1.128 ms 1.129 ms +0.1%
uniswap-6 309.5 μs 306.6 μs -0.9%
vesting-1 337.2 μs 339.9 μs +0.8%

Copy link
Contributor

Click here to check the status of your benchmark.

Copy link
Contributor

Comparing benchmark results of 'nofib' on '902cfa3ac' (base) and 'd77e0f56c' (PR)

Results table
Script 902cfa3 d77e0f5 Change
clausify/formula1 3.938 ms 3.760 ms -4.5%
clausify/formula2 5.194 ms 4.960 ms -4.5%
clausify/formula3 14.08 ms 13.45 ms -4.5%
clausify/formula4 28.83 ms 27.87 ms -3.3%
clausify/formula5 68.04 ms 64.99 ms -4.5%
knights/4x4 18.37 ms 17.60 ms -4.2%
knights/6x6 48.63 ms 46.55 ms -4.3%
knights/8x8 85.12 ms 81.81 ms -3.9%
primetest/05digits 9.145 ms 8.753 ms -4.3%
primetest/08digits 14.72 ms 14.10 ms -4.2%
primetest/10digits 17.63 ms 17.56 ms -0.4%
primetest/20digits 35.30 ms 34.06 ms -3.5%
primetest/30digits 54.05 ms 52.02 ms -3.8%
primetest/40digits 73.27 ms 70.61 ms -3.6%
primetest/50digits 88.97 ms 85.19 ms -4.2%
queens4x4/bt 5.739 ms 5.546 ms -3.4%
queens4x4/bm 7.443 ms 7.219 ms -3.0%
queens4x4/bjbt1 7.078 ms 6.860 ms -3.1%
queens4x4/bjbt2 6.564 ms 6.346 ms -3.3%
queens4x4/fc 15.35 ms 14.91 ms -2.9%
queens5x5/bt 76.67 ms 73.88 ms -3.6%
queens5x5/bm 83.22 ms 80.59 ms -3.2%
queens5x5/bjbt1 90.38 ms 87.13 ms -3.6%
queens5x5/bjbt2 87.46 ms 84.32 ms -3.6%
queens5x5/fc 194.4 ms 188.9 ms -2.8%

Copy link
Contributor

@effectfully effectfully left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A lot of that is above my head, but here are some comments.

Generally, I think we're moving in the opposite direction of what I consider to be the right approach: making static info (shapes of costing functions) into static code inside of builtins where it's more convenient to review, maintain etc and where it would be faster too.

Is it in theory possible to supply R code with the shapes of costing functions and parse it there as opposed to doing it the opposite way?

-- FIXME: we could use ModelConstantOrOneArgument for
-- ModelTwoArgumentsSubtractedSizes instead, but that would change the order of
-- the cost model parameters since the minimum value would come first instead of
-- last.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, instead of all those ModelAddedSizes, ModelSubtractedSizes etc we should've just introduced "anonymous" SlopeAndIntercept, SlopeInterceptAndConstant etc. Or even just completely remove those model types? Does anything relies on them existing as opposed to being inlined in ModelOneArgument, ModelTwoArguments etc?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does anything relies on them existing?

I think not, and I'd like to generalise all of this stuff, but as it says that would change the order of the cost model parameters and we don't want to do that at the moment. We have to worry about backwards compatibility as well. In this PR I'm trying to improve things as much as I can without breaking anything else. Once we have more configurability wrt PVs and so on we can start to make some other changes.

-> R s (CostingFun model)
getParams readCF param = do
let memModel = getId $ param builtinMemoryModels
cpuModel <- readCF $ getConst $ param cpuModels
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So we hardcode memory models, but not CPU models, if I'm reading it right? Why?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's the way it's always been, and that's been OK because memory models don't change too much. Also we're not doing any analysis to infer the memory models, just making them up based on what we know about the implemenations of the builtins. What we could do is have a separate (versioned) JSON file for the memory models and read them from there: you'd have to write the JSON by hand though, which might be a bit fragile. Maybe we could use some other format (which is essentially what we have in the Haskell now anyway). Actually maybe it's better just to keep them in buikltinCostModel.json anyway since if we eventually have mulitple versions of that it'd be easier to manage things if the memory models are in the same place as the CPU models.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was fixing something else in the Agda code and trimmed lots of trailing whitespace while I was at it.

@kwxm
Copy link
Contributor Author

kwxm commented Apr 3, 2024

Is it in theory possible to supply R code with the shapes of costing functions and parse it there as opposed to doing it the opposite way?

I think not. The R code does quite a lot of other stuff, like selecting subsets of the data to fit a model to. We'd have to tell it all that as well and then we're moving towards a full-scale DSL for interacting with R. I think we'd end up translating much of the R code into more complicated Haskell.

@effectfully
Copy link
Contributor

We'd have to tell it all that as well and then we're moving towards a full-scale DSL for interacting with R. I think we'd end up translating much of the R code into more complicated Haskell.

Perhaps I'm misunderstanding it, but I think all I need is for R to take a string or whatever and parse it, so that this:

    bls12_381_G2_negModel            <- constantModel ("Bls12_381_G2_neg")
    bls12_381_G2_scalarMulModel      <- linearInX     ("Bls12_381_G2_scalarMul")
    bls12_381_G2_equalModel          <- constantModel ("Bls12_381_G2_equal")
    bls12_381_G2_hashToGroupModel    <- linearInX     ("Bls12_381_G2_hashToGroup")
    bls12_381_G2_compressModel       <- constantModel ("Bls12_381_G2_compress")

doesn't have constantModel, linearInX etc hardcoded and instead I can hardcode them in the Haskell code and provide the R code with a string representing the name of the model. All I want is to be able to choose the appropriate shape of the costing function for each builtin right in the code for builtins where all the versioning logic is.

I'm not at all confident that would work on the Haskell side, so I'm asking if it can work on the R side, 'cause if not, then I should just give up on that dream (or consider returning the kind of double-hardcoding that you just removed, which you probably wouldn't approve of haha).

So basically the question is: do you think it's not possible for the Haskell code to know that bls12_381_G2_equal has a constantModel? I don't care about any coefficients, it's fine to supply those dynamically, or how the data is filtered etc, I just wanna to be able to tell GHC "depending on the protocol version the costing function here is either constant or linear".

@kwxm
Copy link
Contributor Author

kwxm commented Apr 4, 2024

So basically the question is: do you think it's not possible for the Haskell code to know that bls12_381_G2_equal has a constantModel? I don't care about any coefficients, it's fine to supply those dynamically, or how the data is filtered etc, I just wanna to be able to tell GHC "depending on the protocol version the costing function here is either constant or linear".

That seems a bit tricky. We could probably do it for constant models, but the problem is that many of the models are quite precisely tailored to a particular builtin: you'd end up with things like

  divideIntegerModel <- constantAboveDiagonalMultipliedSizesBelowOrOnDiagonalModel ("DivideInteger")

Maybe we could make the type nested or something, but then we're kind of back to the DSL.

I'm also keen to keep the use of inline-r to a minimum: I'm not sure how well it's maintained and there may be a danger that it'll stop working altogether at some point. I think we already got stuck with some patched version for a long time. It seems better to let R do all of the stuff that it's good at and return a single object to Haskell that you query to extract the stuff you need. Coming up with a cost model in the first place can be quite an interactive process where you work with the data inside R and fit different kinds of models to it and see how well they compare with reality, and having all the code be self-contained is helpful with that. I even considered going completely in the other direction from what you're asking and just getting the R code to write the JSON file directly, which I think wouldn't be too hard. Anyway, I'm not particularly inclined to embark on a major reworking of all this stuff at the moment: this PR's an attempt to make things a little more flexible, with more to come when we have more freedom to move parameters about. The code in CreateCostModel used to have the costing function shapes hard-coded into it and the shapes would have to coincide with those defined in the R code: now R returns the shape to Haskell so that that hard coding is removed, and that was one of the main things I was trying to achieve here. Ultimately the shapes have to be hard coded somewhere (we can't infer them automatically from the benchmarking results) and it seemed best to only do that in one place and I chose to do it in R since that seemed most sensible.

The way I was thinking about having models that depend on the PV was to create a JSON file with the correct cost model types and coefficients for that PV and then commit it and leave it unchanged forever. If at a later date we decided to change the shape of a costing function then we'd rewrite the R code to include new modelling a modelling code and probably discard the old code: we wouldn;t need it any more because we would never need to regenerate the JSON files for previous PVs: they're fixed forever and contain all of the information you need recreate the costing function in Haskell. Maybe there's something bad about that plan that hasn't occurred to me though.

@michaelpj
Copy link
Contributor

I'm also keen to keep the use of inline-r to a minimum: I'm not sure how well it's maintained and there may be a danger that it'll stop working altogether at some point. I think we already got stuck with some patched version for a long time.

It's moderately well-maintained, since it's a Tweag project. e.g. it has had commits in the last week. There was a period where it hadn't been updated for a while, though.

@kwxm kwxm changed the title Read model type from R (attempt number 2) Read model type from R (attempt number 2) [PLT-1174] Apr 8, 2024
@kwxm
Copy link
Contributor Author

kwxm commented Apr 11, 2024

Can I merge this? The important thing is that increases the flexibility of the Haskell models. It also reworks the R/Haskell interface, but that's only used during cost model generation; it removes some hard-coded numbers that have been annoying me for a while. We can revisit that part later if need be.

@michaelpj
Copy link
Contributor

Sorry, I haven't got around to it, but if you and Roman are happy it's going in the right direction then go for it!

@effectfully
Copy link
Contributor

Can I merge this?

image

@michaelpj michaelpj merged commit 47e3d15 into master Apr 11, 2024
27 checks passed
@michaelpj michaelpj deleted the kwxm/costing/read-model-type-from-R-2 branch April 11, 2024 09:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Costing Anything relating to costs, fees, gas, etc.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants