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

Add PlutusTx Map backed by Data #5927

Merged
merged 44 commits into from
May 21, 2024
Merged

Add PlutusTx Map backed by Data #5927

merged 44 commits into from
May 21, 2024

Conversation

ana-pantilie
Copy link
Contributor

@ana-pantilie ana-pantilie commented Apr 29, 2024

Fixes #5929

Needs #5971

Introduces a BuiltinData backed implementation of a map, PlutusTx.Data.AssocMap.Map, based on #5701.

This implementation should have the following properties:

  • the conversion between PlutusTx.Data.AssocMap.Map and BuiltinData should take constant time
  • it has exactly the same BuiltinData encoding as PlutusTx.AssocMap.Map
  • its operations mirror the ones on AssocMap.Map and they have the same behavior
  • it is as efficient as a PlutusTx map can be

In order to be able to reason effectively about the impact of using Data.AssocMap.Map in our integration tests, I am suggesting to first get this PR merged and start using the type in subsequent PRs. This incremental approach has already proven to be more productive since in this PR I was able to identify a few issues which were hidden in the other bigger PRs.

Pre-submit checklist:

  • Branch
    • Tests are provided (if possible)
    • Commit sequence broadly makes sense
    • Key commits have useful messages
    • Changelog fragments have been written (if appropriate)
    • Relevant tickets are mentioned in commit messages
    • Formatting, PNG optimization, etc. are updated
  • PR
    • (For external contributions) Corresponding issue exists and is linked in the description
    • Targeting master unless this is a cherry-pick backport
    • Self-reviewed the diff
    • Useful pull request description
    • Reviewer requested

Co-authored-by: Ziyang Liu <[email protected]>
Signed-off-by: Ana Pantilie <[email protected]>
Signed-off-by: Ana Pantilie <[email protected]>
Signed-off-by: Ana Pantilie <[email protected]>
Signed-off-by: Ana Pantilie <[email protected]>
Signed-off-by: Ana Pantilie <[email protected]>
Signed-off-by: Ana Pantilie <[email protected]>
Signed-off-by: Ana Pantilie <[email protected]>
Signed-off-by: Ana Pantilie <[email protected]>
@ana-pantilie ana-pantilie marked this pull request as ready for review April 29, 2024 15:00
@ana-pantilie ana-pantilie requested a review from a team April 29, 2024 15:01
Copy link
Member

@zliu41 zliu41 left a comment

Choose a reason for hiding this comment

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

Why do you call it AssocList instead of Map? An association list typically supports O(1) insertion.

@ana-pantilie
Copy link
Contributor Author

@zliu41 I did so based on your comments from the original PR. Does a typical association list support O(1) insertion because it doesn't check for duplicates? In any case, I really don't know which name is better, then. I think calling it a map is more confusing, it's a very bad implementation of a map. Since we also have uncons it's also a leaky abstraction.

@zliu41
Copy link
Member

zliu41 commented Apr 29, 2024

Previously our AssocMap was a mixture of map and association list. Then in #5838 we marked all the operations that can introduce duplicate keys unsafe, so now it should be called a map - if it was an association list, then there would be nothing unsafe about unsafeFromList.

If the data-backed variant adopts a similar API then it should also be called a map.

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.

Haven't looked into the tests and the union* functions. Otherwise seems good, but perhaps could be insignificantly optimized.

import Data.Maybe (fromJust)
import Hedgehog (Gen, MonadTest, Property, Range, forAll, property, (===))
import Hedgehog.Gen qualified as Gen
import Hedgehog.Range qualified as Range
Copy link
Contributor

Choose a reason for hiding this comment

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

Oh no no no no, I wish I knew you were going to use hedgehog, so that I could try to talk you out of that. Wait, or was it @zliu41 who authored the tests?

Copy link
Contributor Author

@ana-pantilie ana-pantilie Apr 30, 2024

Choose a reason for hiding this comment

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

@effectfully The property tests were added by me. So why shouldn't I use hedgehog? You also mentioned this on Slack, so what should I be doing here instead?

Copy link
Contributor

Choose a reason for hiding this comment

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

Eek, forgot to hit "send".

So why shouldn't I use hedgehog?

It's not that you shouldn't, I just think it's generally not optimal:

  1. shrinking in hedgehog is convenient in trivial cases and a nightmare for non-trivial ones
  2. we have some really good QuickCheck generators (here's one example, here's another one, here's another another one) and plenty of infrastructure for that, you don't really want to reinvent that wheel and implementing generators naively will likely give you poor coverage with exponential outputs

We certainly don't want to double our investments in property-based testing, so it makes sense to stick to a single library and QuickCheck in my opinion is clearly superior for our use cases. Good luck implementing anything like this in hedgehog.

plutus-tx-plugin/test/AssocList/Spec.hs Outdated Show resolved Hide resolved
plutus-tx/src/PlutusTx/These.hs Outdated Show resolved Hide resolved
toBuiltinData (AssocList d) = d

instance P.FromData (AssocList k a) where
fromBuiltinData = Just . AssocList
Copy link
Contributor

Choose a reason for hiding this comment

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

Maybe we should have another class to save on those unnecessary Justs.

plutus-tx/src/PlutusTx/Data/AssocList.hs Outdated Show resolved Hide resolved
plutus-tx/src/PlutusTx/Data/AssocList.hs Outdated Show resolved Hide resolved
plutus-tx/src/PlutusTx/Data/AssocList.hs Outdated Show resolved Hide resolved
plutus-tx/src/PlutusTx/Data/AssocList.hs Outdated Show resolved Hide resolved
AssocList k a ->
AssocList k b ->
AssocList k (These a b)
union (toBuiltinList -> ls) (toBuiltinList -> rs) = unsafeFromBuiltinList res
Copy link
Contributor

Choose a reason for hiding this comment

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

I'll review this one later.

AssocList k a ->
AssocList k a ->
AssocList k a
unionWith f (toBuiltinList -> ls) (toBuiltinList -> rs) =
Copy link
Contributor

Choose a reason for hiding this comment

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

And this one.

@ana-pantilie
Copy link
Contributor Author

ana-pantilie commented Apr 30, 2024

Previously our AssocMap was a mixture of map and association list. Then in #5838 we marked all the operations that can introduce duplicate keys unsafe, so now it should be called a map - if it was an association list, then there would be nothing unsafe about unsafeFromList.

If the data-backed variant adopts a similar API then it should also be called a map.

@zliu41 I would also expect a map to have efficient lookup, and our "maps" definitely don't. If I were a new PlutusTx user and I'd see a Map in the standard library then I'd immediately expect it to have "map-specific" behaviour. I think that just modifying the docs and marking some function as safe/unsafe is not enough; I have #5921 open for PlutusTx.AssocMap.Map.

In this case, the biggest issue I see is that we have uncons as part of the API. This assumes a list representation, so it should have "list" as part of the name. We can say that this data structure is an association list with a no-duplicate keys invariant. Calling it a map is just wrong IMO.

Signed-off-by: Ana Pantilie <[email protected]>
@zliu41
Copy link
Member

zliu41 commented Apr 30, 2024

I still prefer calling it a Map.

  • Neither name is perfect, but Map is a lot shorter than AssocList; it is consistent with the Map constructor of Data, and it has been called Map for a long time.
  • A map has the no-duplicate invariant, an association list does not, so it's just more natural to call it a Map. If we have a List with the no-duplicate invariant, it would be much more natural to call it a Set than ListWithNoDuplicates.
  • A map usually has constant or logarithmic time operations, but there's no law enforcing this. And association list has the same problem: it usually has constant time insertion, which is not the case for our implentation.
  • As to your biggest concern, I think if we have both a data-encoded Map and a data-encoded List, converting from Map to List should be very cheap (i.e., ListData . UnMapData), so Map won't need an uncons operation.

@zliu41
Copy link
Member

zliu41 commented Apr 30, 2024

I think if we have both a data-encoded Map and a data-encoded List, converting from Map to List should be very cheap

Acutally I don't think this is true - we may still need uncons for the map, unless we provide some higher level APIs around BuiltinList.

But I think your concern also applies to AssocList - how do we specify the behavior of uncons for AssocList? Our insert operation does not prepend to the list, so we can't say "uncons returns the last element you inserted", which is arguably an even bigger problem for AssocList, because one would expect that it is the case.

@ana-pantilie
Copy link
Contributor Author

@zliu41 oh that's a very good point about uncons. Hmm, this is very tricky. I need to look into why we even need uncons in the first place.

@zliu41
Copy link
Member

zliu41 commented May 1, 2024

I need to look into why we even need uncons in the first place.

Because people often want to operate on the underlying list. After all there are more list operations than map operations. For the regular Map, converting it to a list is a no-op since it is a newtype wrapper around a list. So there's no need to have uncons for the regular map: one can just convert it to a list and do uncons on the list.

For DataMap, converting it to a non-builtin list (whether regular list or DataList) is linear, which is bad. However, converting DataMap to a BuiltinList is cheap: it's just UnMapData. So we can provide more list operations for BuiltinList. I think that's better than providing uncons for DataMap, since uncons is just one operation, and people may want more such operations.

Signed-off-by: Ana Pantilie <[email protected]>
@ana-pantilie ana-pantilie changed the title Add AssocList backed by Data Add PlutusTx Map backed by Data May 7, 2024
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE ViewPatterns #-}

module Util.Common
Copy link
Contributor Author

Choose a reason for hiding this comment

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

This module is a partial copy of the one from plutus-benchmark. What would be the best solution to avoid this code duplication? Do we have other cases of duplicated functions across packages? Should we create a new package plutus-test-util or something?

Copy link
Contributor

Choose a reason for hiding this comment

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

I suppose we could simply import benchmarks stuff from here or indeed create a separate package, that would be even better. I most definitely don't want us to duplicate it as we've already got it wrong several times.

@kwxm do you have an opinion?

Copy link
Contributor

Choose a reason for hiding this comment

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

I just reviewed the file, I don't think the duplication should be a blocker for this PR, so please just create an issue to remove the duplication.

@ana-pantilie
Copy link
Contributor Author

@zliu41 @effectfully @Unisay : this should be ready for re-review.

If you agree, I will deal with the following issues in follow-up PRs:

  • use QuickCheck instead of Hedgehog
  • remove duplication of common test utility functions (see comment above)
  • investigate implementing try functions (thank you @colll78 for the suggestion!)

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.

I'll probably review the tests once they're QuickCheckified if you're going to do that. Didn't review the union functions.

Comments are mostly suggestions on how to speed things up a tiny bit, feel free to merge the PR without addressing those. I'm confused about indexing of the These constructors starting with 1 though.

(\(ds : Unit) ->
let
!hd : pair data data = headList {pair data data} xs
!tl : list (pair data data) = tailList {pair data data} xs
Copy link
Contributor

Choose a reason for hiding this comment

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

Inlining tl instead of giving it a name would probably be a tiny bit faster. Not important.

d
{pair data data}
(\(d : data) (d : data) -> mkPairData d d))
(`$fToBuiltinListBuiltinList_$ctoBuiltin` ds))
Copy link
Contributor

Choose a reason for hiding this comment

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

You need to merge master in and replace calls to toBuiltin with calls to toOpaque, toBuiltin isn't gonna fly anymore.

UPD: hm, I don't see you using toBuiltin anywhere. I can't find any inappropriate usages on master either. Do you know where that `$fToBuiltinListBuiltinList_$ctoBuiltin` thingy is from?

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 forgot to regenerate the tests that's why it was still there.

Copy link
Contributor

Choose a reason for hiding this comment

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

Good thing I looked into it anyway, 'cause I did find an inappropriate usage of toBuiltin elsewhere in the end.

Copy link
Contributor

Choose a reason for hiding this comment

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

I don't personally find it very valuable to have a 340 lines long golden file, who's gonna read it? I don't find having it troubling either though.

{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE ViewPatterns #-}

module Util.Common
Copy link
Contributor

Choose a reason for hiding this comment

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

I suppose we could simply import benchmarks stuff from here or indeed create a separate package, that would be even better. I most definitely don't want us to duplicate it as we've already got it wrong several times.

@kwxm do you have an opinion?

unsafeRunTermCek =
unsafeExtractEvaluationResult
. (\(res, _, _) -> res)
. runCekDeBruijn PLC.defaultCekParameters Cek.restrictingEnormous Cek.noEmitter
Copy link
Contributor

Choose a reason for hiding this comment

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

Also it's exactly the wrong defaultCekParameters stuff that would be very problematic for benchmarks (but is OK for tests).

let k' = BI.fst hd
in if P.equalsData k k'
then tl
else BI.mkCons hd (delete' k tl)
Copy link
Contributor

Choose a reason for hiding this comment

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

Should be go rather than delete' k?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Thank you for noticing this!

Map
. toOpaque
. PlutusTx.Prelude.map (\(k, a) -> (P.toBuiltinData k, P.toBuiltinData a))
. foldr (uncurry go) []
Copy link
Contributor

Choose a reason for hiding this comment

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

Fuse map and foldr to avoid reprocessing and reallocating the whole list?

{-# INLINEABLE null #-}
-- | Check if the `Map` is empty.
null :: forall k a. Map k a -> Bool
null (Map m) = P.null m
Copy link
Contributor

Choose a reason for hiding this comment

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

Could be defined using coerce too, to avoid binding m causing pointless allocations at runtime.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

So for some reason the coercing doesn't compile but I'll try to fix that separately.

Copy link
Contributor

Choose a reason for hiding this comment

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

Weird. It type checks but doesn't compile?

unsafeFromList =
Map
. toOpaque
. PlutusTx.Prelude.map (\(k, a) -> (P.toBuiltinData k, P.toBuiltinData a))
Copy link
Contributor

Choose a reason for hiding this comment

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

map is going to process the list and toOpaque is going to process the list, perhaps we should have toOpaqueListWith or something to do it in one fell swoop.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Good idea, I'll look into it in one of the follow-ups.

{-# INLINEABLE toBuiltinList #-}
-- | Convert the `Map` to a `P.BuiltinList` of key-value pairs. This operation is O(1).
toBuiltinList :: Map k a -> BI.BuiltinList (BI.BuiltinPair BuiltinData BuiltinData)
toBuiltinList (Map d) = d
Copy link
Contributor

Choose a reason for hiding this comment

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

Why not just

newtype Map k a = Map
  { toBuiltinList :: BI.BuiltinList (BI.BuiltinPair BuiltinData BuiltinData))
  }

? You're probably going to get a speedup just by making this function a field selector. Don't quote me on that though, maybe it always gets inlined.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

For the tests that we currently have it doesn't make any difference. I was thinking it'd be nice to have it as a separate function because it's easier document this way but maybe that doesn't make sense. In any case I can tweak this in one of the follow-up PRs.

Copy link
Member

@zliu41 zliu41 left a comment

Choose a reason for hiding this comment

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

Other than the tests this looks good to me. Feel free to merge once the tests are updated.

Signed-off-by: Ana Pantilie <[email protected]>
Signed-off-by: Ana Pantilie <[email protected]>
Signed-off-by: Ana Pantilie <[email protected]>
Signed-off-by: Ana Pantilie <[email protected]>
Signed-off-by: Ana Pantilie <[email protected]>
@ana-pantilie ana-pantilie merged commit acdaeb2 into master May 21, 2024
7 checks passed
@ana-pantilie ana-pantilie deleted the ana/data-assoclist branch May 21, 2024 17:15
ramsay-t added a commit that referenced this pull request Aug 6, 2024
* Trace removal re-implemented as a IR rewrite rule (#5907)

* refactor: Internal module for RewriteRules, Monoid Instance

* Trace removal re-implemented as a IR rewrite rule

* Test case for an impure trace message, added note.

* CIP-0057 Howto: exporting a Plutus contract blueprint (#5817)

* Howto: exporting a Plutus contract blueprint

* howto/exporting-a-blueprint uses literal includes

* Changelog record

* Paragraph about `deriveArgumentBlueprint` / `deriveParameterBlueprint`

* Include plutus.json literally

* [Release] 1.26.0.0 (#5914)

Signed-off-by: Ana Pantilie <[email protected]>

* A quick isabelle experiment. (#5913)

* PLT-8171: Combine PIR, PLC, and UPLC into a single executable (#5699)

Acked-by: Nikolaos Bezirgiannis <[email protected]>

Co-authored-by: Nikolaos Bezirgiannis <[email protected]>

* chore(deps): bump slackapi/slack-github-action from 1.25.0 to 1.26.0 (#5915)

Bumps [slackapi/slack-github-action](https://github.com/slackapi/slack-github-action) from 1.25.0 to 1.26.0.
- [Release notes](https://github.com/slackapi/slack-github-action/releases)
- [Commits](slackapi/slack-github-action@v1.25.0...v1.26.0)

---
updated-dependencies:
- dependency-name: slackapi/slack-github-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Kwxm/plc spec/bitwise conversions (#5911)

* Intial text for bitwise conversions

* Intial text for bitwise conversions

* Updates

* Tidying up

* Tidying up

* Deal with edge cases more concisely

* More tidying up

* Rearrange some cases

* Almost done

* More clarification

* Update specification date

* Some clarification after PR comments

* Use Int64 in CostModelParams (#5920)

* Change CMTooFewParamsError to a warning (#5912)

* [Costing] Provide support for multiple 'CostModel's (#5851)

* CaseOfCase kind mismatch error fix (#5923)

* Fix issue #5922

* test_extractTyArgs

* CaseOfCase: cover types with two type args

* Fix some Notes so they pass the check (#5930)

* Restore old cost model param names (#5932)

* Tidy up SimpleJSON.hs (#5936)

* chore: formatting (#5937)

* 1.27.0.0 (#5938)

* Do not build the plutus executable if GHC <9.6 (#5940)

* Update CONTRIBUTING.adoc (#5950)

* Add 'Note [Table of all possible ledger's states w.r.t. cost model parameters update]' (#5935)

* Remove annoying error message (#5956)

* Add plutus-tx-template Release Instructions and GH Workflow (#5952)

* [StdLib] Strictify 'fix' (#5939)


This makes `fix` stricter so that the body of the function that it takes always gets forced regardless of whether the necessary argument is provided or not.

Resolves #5961.

---------

Co-authored-by: Yura Lazaryev <[email protected]>

* [PIR] Don't generate 'fixBy' if you don't need to (#5954)

Removes unnecessary generation of `fixBy` when we only need `fix`.

* Chore: formatting, imports, pragmas. (#5965)

* CaseOfCase UPLC transformation tests. (#5960)

* Avoid evaluating `nilCase` strictly in `matchList`, and rename the original `matchList` to `matchList'` (#5901)

* Improvements to plutus-metatheory site (#5959)

* Improvements to plutus-metatheory site

* Added markdown titles to markdown files so they get built properly. Not all of the titles are very interesting.

---------

Co-authored-by: Ramsay Taylor <[email protected]>

* chore(deps): bump nixbuild/nix-quick-install-action from 27 to 28 (#5951)

Bumps [nixbuild/nix-quick-install-action](https://github.com/nixbuild/nix-quick-install-action) from 27 to 28.
- [Release notes](https://github.com/nixbuild/nix-quick-install-action/releases)
- [Changelog](https://github.com/nixbuild/nix-quick-install-action/blob/master/RELEASE)
- [Commits](nixbuild/nix-quick-install-action@v27...v28)

---
updated-dependencies:
- dependency-name: nixbuild/nix-quick-install-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* [Build] Remove the doctests runner of 'prettyprinter-configurable' (#5974)

* Kwxm/mainnet script budgets (#5973)

* Mainnet script budget analysis

* Comment

* Add a comment

* Release 1.28.0.0 (#5975)

* [PlutusTx] [Builtins] Split 'FromBuiltin' and 'ToBuiltin' (#5971)

This addresses the [inconsistencies](#5547 (comment)) that we got from using the now retired `FromBuiltin`/`ToBuiltin` classes for two mutually exclusive purposes. Now we have two versions of those classes: one is used for converting builtins to Plutus Tx types and back, while the other one is for making builtins transparent/opaque within Plutus Tx. These two purposes are very similar, but also subtly different and that is explained in the docs.

* Update README.md (#5997)

* chore(deps): bump cachix/install-nix-action from 26 to 27 (#5999)

Bumps [cachix/install-nix-action](https://github.com/cachix/install-nix-action) from 26 to 27.
- [Release notes](https://github.com/cachix/install-nix-action/releases)
- [Commits](cachix/install-nix-action@v26...V27)

---
updated-dependencies:
- dependency-name: cachix/install-nix-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Script to prepare binary executables for uploading to the github release page. (#6015)

* Kwxm/mainnet script budgets 2 (#6057)

* Get the script analysis executable to print out actual execution costs

* Tidying up

* Empty comment

* Dot

* Output evaluation status too

* Oops

* Add integerToByteString and byteStringToInteger to PlutusV2 at PV10 (#6056)

* [Refactoring] Remove 'UnknownBuiltin' and 'UnknownBuiltinType' (#6064)

* Conditionally add 'triage' label to new issues (#6061)

* Add triage label only when the issue does not have any of the 'Internal' labels

* Fix bug in add-triage-label.yml (#6067)

* chore(deps): bump benchmark-action/github-action-benchmark (#6058)

Bumps [benchmark-action/github-action-benchmark](https://github.com/benchmark-action/github-action-benchmark) from 1.19.3 to 1.20.3.
- [Release notes](https://github.com/benchmark-action/github-action-benchmark/releases)
- [Changelog](https://github.com/benchmark-action/github-action-benchmark/blob/master/CHANGELOG.md)
- [Commits](benchmark-action/github-action-benchmark@v1.19.3...v1.20.3)

---
updated-dependencies:
- dependency-name: benchmark-action/github-action-benchmark
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Add integerToByteString and byteStringToInteger to V2.ParamName (#6065)

* Add PlutusTx Map backed by Data (#5927)

Co-authored-by: Ziyang Liu <[email protected]>
Signed-off-by: Ana Pantilie <[email protected]>

* Let nightly.yml accept hedgehog-tests input (#6062)

* Let nightly.yml accept hedgehog-tests input
* Default tests from 10k to 50k

* Remove obsolete defer-plugin-errors flag (#6080)

* Add a Plutus Tx test utility package (#6086)

Signed-off-by: Ana Pantilie <[email protected]>

* [Errors] polish evaluation errors (#6043)

We have this distinction of "user" vs "internal" errors that made some sense when TPLC was what was evaluated, but now that it's UPLC, all of those are "user" errors. So I was going to remove the distinction entirely just to realize that it in fact still makes sense, it's just now "operational" vs "structural". This PR clarifies this.

I've also tweaked errors a bit while I was here, plus removed a bunch of unsafe functions from the CEK machine API (they were convenient when they were exposed from a single module, but now that we have several of them, it's no longer worth the trouble, plus we really should use some different approach to calling the CEK machine in the benchmarks, but that's not within the scope of this PR).

* [Test] Add do-notation support for 'TestNested' (#5948)

This refactors the `TestNested` machinery, so that

1. it supports listing tests in a `do`-block, which is something that I need in a different PR to update a huge `do`-block so that some of the tests there become golden
2. the API is more granular and pushes the user in the right direction

I've also improved some of the tests while I was there and unified the formatting. Most of the tests we have use 4 spaces instead of 2, so I preserved that, we're probably going to run `fourmolu` over all the files eventually anyway and that'll make the indentation 2-space-based.

* Run nightly tests on plutus-benchmark (#6091)

* [Exe] Generalize 'withL' to 'withLangGeneral' (#5918)

* Kwxm/provisional conway cost model (#6087)

* Rename semantics variants

* Change some names

* Get uplc to use correct cost model for semvar

* Dumping cost models

* Dumping cost models

* Tidy up exports and tests

* Move a function

* More updates

* Fix some typos

* Update models.R

* Add updated cost models

* Add updated cost models

* Update test results

* Remove obsolete entries from V3.ParamName

* Fix cost model interface test

* Fix (sort of) plutus-ledger-api tests

* Various small fixes

* Forgot to update parameters

* Add changelog entries

* Fix the changelog entries

* Address PR review comments

* Add costs for new builtins to V1 and V2 cost model files

* Fix some dependencies in plutus-benchmark

* Fix partial reversion of #6086 caused by merge

* Remove old cost model files

* Update/rename benchmark CSV files

* Update issue templates (#6037)

* Remove reference to benching.csv in plutus-core.cabal (#6149)

* PlutusV3: Datum/Redeemer in ScriptContext, Datum Optional, Unified Script Type (#5934)

* Kwxm/costing/reduce CEK CPU step costs B (#6153)

* Make CEK step costs for models B anc C identical

* Add changelog entry

* Add changelog entry

* [Test] Dump UPLC for 'strictLetRec' (#5963)

* Use the most recent evaluation context for most of the benchmarks (#6152)

* [Builtins] Polish handling of integral types (#6036)

This

- adds support for throwing operational unlifting errors in the builtins machinery, which allows us to attach a message to an unlifting failure. Unfortunately this is still not enough to propagate proper error messages to the user, because they get erased by the evaluation machinery down the line, this is our 2018's legacy of the stupid idea to have raw evaluation failures that don't carry any content
- makes handling of integral types in `PlutusCore.Default.Universe` uniform (it was a mess before with a weird partial set of instances and morally the same instances being implemented differently)

* Tests for the `preserve-logging` flag. (#6162)

* Require PlutusV3 scripts to evaluate to BuiltinUnit (#6159)

* Quadratic costing for integer division functions (#6161)

* Quadratic costing for integer division functions

* Correct some typos

* Agda typo

* Fix V2's costModelParamsForTesting (#6166)

* Release 1.29.0.0 (#6170)

* Update update-version.sh to match package names less greedily (#6174)

* Update update-version.sh to match package names less greedily

* Allow whitespace after comma

* Allow whitespace after comma

* Clarify comment

* More error checking (#6179)

* Reorganized Plutus user guide on the Docusaurus platform initial deployment (#6177)

* Initial Docusaurus Setup

* uploaded docs files and images

* added code files and images

* cleaned up mermaid diagrams for platform page

* committed yarn.lock file

* Add markdown link styling

* Update Plutus styling and add GA plugin

* updating yarn.lock file

* CSV Rendering component

* adding cost model parameters page that imports CSV files

* Fix gradient overflow on tables for dark mode

* changing title to Plutus user guide

* Update favicon and social card assets

* Remove landing page and set /docs to base path

* Update literal include roots

* Rename Haddock workflow and update to include Docusaurus build

* Update docusaurus/README.md

Co-authored-by: olgahryniuk <[email protected]>

* Update docusaurus/docs/adr/adr-index.md

Co-authored-by: olgahryniuk <[email protected]>

* Update docusaurus/docs/adr/adr-index.md

Co-authored-by: olgahryniuk <[email protected]>

* Update docusaurus/docs/adr/adr-index.md

Co-authored-by: olgahryniuk <[email protected]>

* Update docusaurus/docs/adr/adr1.md

Co-authored-by: olgahryniuk <[email protected]>

* Update docusaurus/docs/adr/adr2.md

Co-authored-by: olgahryniuk <[email protected]>

* Update docusaurus/docs/essential-concepts/language-versions.md

Co-authored-by: olgahryniuk <[email protected]>

* Update docusaurus/docs/essential-concepts/language-versions.md

Co-authored-by: olgahryniuk <[email protected]>

* Update docusaurus/docs/essential-concepts/language-versions.md

Co-authored-by: olgahryniuk <[email protected]>

* Update docusaurus/docs/essential-concepts/language-versions.md

Co-authored-by: olgahryniuk <[email protected]>

* Update docusaurus/docs/adr/adr1.md

Co-authored-by: olgahryniuk <[email protected]>

* Update docusaurus/docs/adr/adr1.md

Co-authored-by: olgahryniuk <[email protected]>

* Update docusaurus/docs/adr/adr1.md

Co-authored-by: olgahryniuk <[email protected]>

* Update docusaurus/docs/adr/adr1.md

Co-authored-by: olgahryniuk <[email protected]>

* Update docusaurus/docs/adr/adr1.md

Co-authored-by: olgahryniuk <[email protected]>

* Update docusaurus/docs/adr/adr1.md

Co-authored-by: olgahryniuk <[email protected]>

* Update docusaurus/docs/adr/adr1.md

Co-authored-by: olgahryniuk <[email protected]>

* Update docusaurus/docs/adr/adr1.md

Co-authored-by: olgahryniuk <[email protected]>

* Update docusaurus/docs/adr/adr1.md

Co-authored-by: olgahryniuk <[email protected]>

* Update docusaurus/docs/adr/adr1.md

Co-authored-by: olgahryniuk <[email protected]>

* Update docusaurus/docs/adr/adr1.md

Co-authored-by: olgahryniuk <[email protected]>

* Update docusaurus/docs/adr/adr1.md

Co-authored-by: olgahryniuk <[email protected]>

* committing after running pre-commit run --all-files command to fix build errors

---------

Co-authored-by: ianhanssoniohk <[email protected]>
Co-authored-by: olgahryniuk <[email protected]>

* Initial version of new combined-haddock.yml workflow (#6182)

* [Builtins] Make 'BuiltinSuccess' the first constructor (#5885)

This makes `BuiltinSuccess` the first constructor of `BuiltinResult`, see the comment there of why we want that.

See [this](#5885 (comment)) comment for the very ambiguous benchmarking results.

* [PlutusLedgerApi] [Refactoring] Polish imports and exports (#6178)

This

- resolves #6098
- moves a bunch of stuff shared among `V1`/`V2`/`V3` into `Common` (see the PR review)
- makes all imports in the `Common`/`V1`/`V2`/`V3` modules qualified so that it's clear where definitions come from and whether they are inherited from `Common` or an earlier ledger language
- fixes some formatting, adds a definition for consistency etc

* Adding link to Haddock documentation to index.md (#6187)

* removing outdated and incorrect content from the Plutus platform page (#6188)

* Add `Data.Value` to `PlutusLedgerAPI` (#6143)

Signed-off-by: Ana Pantilie <[email protected]>

* added the term Haddock where the public Plutus code libraries are mentioned since it is a term likely to be used in searches (#6190)

* Refactored Serialise/Flat-Via. Fixes #6083 (#6144)

Co-authored-by: Nikolaos Bezirgiannis <[email protected]>

* Add Redeemer to V3 ScriptContext Pretty instance (#6191)

* Logical operations (#5970)

* Initial port of logical ops

* Add PlutusTx correspondents to the new builtins

* Tests for logical operations

* Rest of tests

* Formatting of denotations

* Rename byteStringReplicate to replicateByteString

* Correct references to CIP-121

* Changelogs, document tests

* Note commutativity for new operations

* Properly rename replicate builtin, add to plutus-tx-plugin

* Make new logical builtins available in V3

* Fix links to CIP-122, use toOpaque and fromOpaque instead

* Correct all references to CIP-122

* Rename bitwise builtins, use proper costing

* Bitwise primops will not be in Conway

* Rename tests to suit new primop names

* Combined Haddock Generation (#6146)

* Run nightly tests on plutus-shared instead of plutus-benchmark (#6195)

* Run combined-haddock.yml workflow on plutus-shared instead of plutus-runner (#6196)

* Fix combined_haddock.sh script (#6199)

* [Test] [Builtins] Add golden tests with unlifting errors (#6189)

This refactors a file with tests so that unit tests that are supposed to result in evaluation failure also become golden tests with the error message printed to a golden file. Need it to demonstrate that #6181 does indeed allow us to preserve operational unlifting errors.

* Changed the term "Documentation" to "User guide" in the upper left area of the docs site (#6200)

* Styling updates to docusaurus site

* Changed the term Documentation to User guide in the upper left corner of the docs site next to the PLUTUS wordmark logo.

* Add .yarn to .gitignore

---------

Co-authored-by: ianhanssoniohk <[email protected]>

* Update Alert Message in longitudinal-benchmark.yml (#6201)

* [Test] Add missing bitwise builtins golden files (#6204)

* [Errors] Preserve operational unlifting errors (#6181)

* Docs raise visibility code libraries (#6203)

* added more visibility to Haddock Plutus code libraries on index.md page

* adding new Haddock documentation page under the Reference nav menu

* updated Reference top-level page description

* minor style edit update docusaurus/docs/index.md

Co-authored-by: olgahryniuk <[email protected]>

* style edits update docusaurus/docs/reference/haddock-documentation.md

Co-authored-by: olgahryniuk <[email protected]>

---------

Co-authored-by: olgahryniuk <[email protected]>

* [Test] [Builtin] Polish 'MakeRead' tests (#6202)

* Remove AssocMap comparison instances (#6173)



Signed-off-by: Ana Pantilie <[email protected]>

* Update README.adoc (#6206)

Updated the link in README to point to the Plutus docs site on the docusaurus platform instead of Read the docs.

* Remove PyF as it depends on GHC and causes depenecy conflicts downstream. (#6208)

* Bitwise operations (#6090)

* Initial bitwise primitives

* Wire up new builtins

* Tests

* Changelogs

* Fix failing goldens

* Fix cost model for tests

* Bitwise primitives are not in Conway

* Finish shift tests

* Fix goldens

* Rest of tests

* Rename operations

* Note about split composition for shift property

* Explain bitwise tests in comments, remove AND and OR tests for finding and counting bits

* Goldens for bitwise primops

* Chop down property test running times a bit

* Add test for finding first in zero byte string, rename some tests for clarity

* Clarify implementation choices in the comments

* Tidy up helpers for property tests

* Consolidate all bitwise ops, retarget links to CIPs

* Reduce coverage limits for signature verification tests (#6209)

* moved the Getting Started page to immediately follow the Introduction page (#6211)

* Haskell Eq for AssocMap (#6213)



Signed-off-by: Ana Pantilie <[email protected]>

* Shorten some filenames in the conformance tests (#6214)

Shorten some file names

* MK-5422 move getting started page fixing link (#6215)

* moved the Getting Started page to immediately follow the Introduction page

* fixed broken link

* [Evaluation] Move stuff under `enterComputeCek` (#6156)

This polishes the structure of the CEK machine code a little: moves definitions having CEK-specific constraints around (as per `Note [Compilation peculiarities]`), removes outdated comments and moves pragmas around.

* Release 1.30.0.0 (#6216)

* plutus-ir: fix redundant imports (#6218)

* Fix incorrect Note reference (#6217)

* Add documentation to `Data.Value` (#6220)

* [Builtins] Replace 'EvaluationResult' with 'BuiltinResult' (#5926)

This replaces several `Emitter (EvaluationResult a)` occurrences with `BuiltinResult`, something that I missed the last [time](#5728).

In addition to that, it also replaces `EvaluationResult` with `BuiltinResult` in general. It doesn't matter performance-wise (modulo a regression that we didn't notice some time ago), but `BuiltinResult`, unlike `EvaluationResult`, allows one to attach an error message to a failure, which we do in this PR as well, meaning we now get better error messages. And we also now respect the operational vs structural evaluation errors distinction.

The PR also replaces `Emitter` with `BuiltinResult`. And makes the GHC Core of builtins smaller by making error-throwing functions (not) inline (see `Note [INLINE and OPAQUE on error-related definitions]` for details).

* New `./scripts/combined-haddock.sh` (#6205)

* Add workflow for publishing Agda Metatheory site (#6223)

* Add workflow for publishing AGDA metatheory site

* wip

* wip

* Fixes to `metatheory-site.yml` workflow (#6228)

* Final changes to `metatheory-site.yml` workflow (#6229)

* Update RELEASE.adoc with instructions to delete unused branches and tags (#6230)

* Complete Migration from RDT to Docusaurus (#6227)

- Delete the contents of doc/read-the-docs-site, only keeping the README with a migration notice.
- Move docusaurus folder into doc folder.
- Update the GH workflows for publishing the haddock site and docusaurus site.
- Delete GH web hook and update redirects on RTD site.
- Remove mentions of read-the-docs and combined-haddock from nix code
- Update release process, mentioning how to publish Docusaurus and the Haddock site
- Update links in Docusaurus mentioning the new haddock site

* Fix broken links in docusaurus docs (#6232)

* Add flake.nix for doc/docusaurus (#6233)

* New shell for Docusaurus
* Fix broken links

* making a spelling correction on the doc/docusaurus README file (#6235)

* [Builtins] Remove 'Emitter' and 'MonadEmitter' (#6224)

* Refactor GitHub Workflows (#6124)

* Fix & simplify SOP encoding example comment (#6231)

Here's a small fix for the comment:

- use one variable for the type everywhere
- fix ordering of `constr` arguments

Additionally,

- align the corresponding parts in the text

* Update github-action-benchmark version (#6238)

* Make it build with ghc 9.10 (#6079)

* Make it build with ghc 9.10
* Nix updates
* Disable failing test (cseExpensive test in untyped-plutus-core-test suite)
* plutus-tx-plugin-tests: Accept some CSE golden changes

* Update version of github-action-benchmark to v1.20.3 (#6240)

* Update version of github-action-benchmark to v1.20.3

* Fix bug in triage-label.yml

* Add workflows to check broken links and deploy papers to GH Pages (#6236)

* Add workflows to check broken links and deploy papers to GH Pages

* Publish papers and specs on push to master only (#6246)

* Cabal project to compile docusaurus examples. (#6239)

* Added cardano-constitution package (#6234)

* Added cardano-constitution package

* Remove cardano-constitution checks from CI

* Restrist x-compiling

---------

Co-authored-by: Nikolaos Bezirgiannis <[email protected]>
Co-authored-by: zeme <[email protected]>

* [Test] Turn off CSE for problematic tests (#6249)

* [Test] Turn off CSE for the 'patternMatching' test (#6251)

* [Optimization] Remove case-of-case (#6248)

* Spec that verifies various script sizes (#6247)

* Add cardano-constitution-tests and slack-message-broker workflows (#6253)

* Updates to slack-message-broker.yml (#6258)

* Update slackapi/slack-github-action version -> v1.26.0 (#6259)

* Improve messages in slack-message-broker.yml (#6260)

* Fix error message in slack-message-broker.yml (#6261)

* Fix another error in slack-message-broker.yml (#6262)

* Fix "un-rolling" a list type. (#6165)

* Fix "un-rolling" a list type.

* Un-roll other general types: [], Maybe, (,), BuiltinUnit, BuiltinPair

* constitution: Add executable that creates json envelope (#6267)

Co-authored-by: Jamie Bertram <[email protected]>

* Fix bug in ./script/combined-haddock.sh (#6263)

* Update baseUrl in docusaurus.config.ts (#6275)

* Improvements to haddock-site.yml (support auto-publish on push to master) (#6276)

* Better messages in slack-message-broker.yml (#6280)

* Remove --ignore-url's from linkchecker step in combined-haddock.sh (#6281)

* Add cabal update step in combined-haddock.sh (#6283)

* Fix CsvTable.tsx and LiteralInclde.tsx in docusaurus (#6282)

* Fix haddock documentation for cardano-constitution (#6284)

* Stronger docusaurus builds and general QOL improvements (#6287)

* Move package-lock.json from top-level to scripts/blueprints (#6289)

* Fix editUrl in docusaurus.config.ts (#6291)

* chore(deps): bump JamesIves/github-pages-deploy-action (#6292)

Bumps [JamesIves/github-pages-deploy-action](https://github.com/jamesives/github-pages-deploy-action) from 4.6.1 to 4.6.3.
- [Release notes](https://github.com/jamesives/github-pages-deploy-action/releases)
- [Commits](JamesIves/github-pages-deploy-action@v4.6.1...v4.6.3)

---
updated-dependencies:
- dependency-name: JamesIves/github-pages-deploy-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Fix typos (#6288)

* fix typo

* fix typos

* fix typo

* fix typo

* Detect broken links for haddock,metatheory,docusaurus + local repo files (#6294)

* Fix broken linkchecker workflows (#6295)

* Add .github/linkchecker/action.yml

* Add support for ghc910 to hydraJobs (#6293)

* Disable linkchecker on live sites (#6298)

* [Bug] Fix 'isNormalType' and add 'prop_normalizedTypeIsNormal' (#6272)

* Analyse script events supports PlutusLedgerLanguage V3 (#6300)

* fix: parameter 33 should be a Rational (#6302)

* Address guardrail script audit comments (#6305)

* All names are printed with their unique values by default. (#5972)

* chore: explicit imports

* Test demonstrates that without printed unique value a name won't roundtrip printing/parsing

* Pretty-printing with indexes by default, simple representation by
opt-in.

* Updated golden files

* fix: types in defaultConstitution (#6307)

More descriptive type names in the defaultConstitution

Co-authored-by: Nikolaos Bezirgiannis <[email protected]>

* Fix overflow bug in shiftByteString, rotateByteString, add tests to ensure it stays fixed (#6309)

* Fix overflow bug in shiftByteString, add tests to ensure it stays fixed

* Fix similar issue in rotations

* Add shift wrapper for bounds checks

* Fix rotations similarly, note in docs

* Fix typo, note about fromIntegral

* Release 1.31.0.0 (#6312)

* Re-export bitwise builtins from PlutusTx.Prelude (#6313)

* [Costing] Increase the cost of constructors of '[]' (#6285)

* Change writeBits to take changelists as two separate lists (#6317)

* fix: types in defaultConstitution (#6307)

More descriptive type names in the defaultConstitution

Co-authored-by: Nikolaos Bezirgiannis <[email protected]>

* Fix overflow bug in shiftByteString, rotateByteString, add tests to ensure it stays fixed (#6309)

* Fix overflow bug in shiftByteString, add tests to ensure it stays fixed

* Fix similar issue in rotations

* Add shift wrapper for bounds checks

* Fix rotations similarly, note in docs

* Fix typo, note about fromIntegral

* Release 1.31.0.0 (#6312)

* Modify writeBits to use two lists as arguments

* Fix writeBits in PlutusTx to match new API

* Fix goldens

---------

Co-authored-by: Romain Soulat <[email protected]>
Co-authored-by: Nikolaos Bezirgiannis <[email protected]>
Co-authored-by: Yura Lazarev <[email protected]>

* [Costing] Remove the 'ExMemoryUsage' instance for 'SomeTypeIn' (#6318)

* feat: New version of VT-CC-01 (#6320)

Signed
Changed the defaultConstitution.json (+ random fixes in some $comment)
Changed the tests values
Changed the traceability documents and updated the versioning
New golden test values

"All 654 tests passed (99.02s)"

* [Test] Make tests take reasonable time (#6286)

This dramatically reduces the number of tests run locally making evaluation times of plutus-test drop by more than 10x.

The reduced number of tests run locally is balanced by running the old amount of tests in the nightly test suite.

* fix: haddock error (#6323)

* Reverse hunk test_multiSplitSound (#6324)

Co-authored-by: Nikolaos Bezirgiannis <[email protected]>

* Kwxm/costing/bitwise 4 (#6301)

* Costing for new bitwise builtins

* Fix alignment problem

* Add changelog entry

* Update some CIP URLs

* Update some CIP URLs

* Remove outdated comment

* Address some review comments

* Address some review comments

* Fix for changes in main branch

* Update costing for revised version of writeBits

* Fix benchmark tests for integer division builtins

* Fix comments

* Update benchmark results for writeBits split updates

* Try removing zip in writeBits

* Remove wrapper

* Rearrange code again

* Tidying up

* Fix plutus-tx

* Make some helpers INLINEABLE

* Rearrange code again

* Simplify known type instances for 'ListCostedByLength'

---------

Co-authored-by: effectfully <[email protected]>

* 8-queens using bitwise primops benchmark (#6311)

* Milestone 3 benchmark, test

* Fix cabal file

* Update writeBits use in NQueens

* [Plinth] [Builtins] Fix 'writeBits' (#6329)

* [Plinth] Ban using 'toBuiltin' and 'fromBuiltin' (#6342)

It used to be possible to use `toBuiltin`/`fromBuiltin` within a smart contract, but this is no longer the case, but this isn't obvious to the users as they already have code with `toBuiltin`/`fromBuiltin` that now just misbehaves instead of throwing a type error or breaking compilation some other way. This fixes the problem by throwing on any usage of `toBuiltin`/`fromBuiltin` with a suggestion to use `toOpaque`/`fromOpaque` instead.

* Kwxm/bitwise/enable nqueens benchmark (#6343)

This enables the bitwise `nqueens` benchmark following the fix for `writeBits` in Plinth in #6309.

```
$ cabal bench bitwise-bench
Build profile: -w ghc-9.6.6 -O1
In order, the following will be built (use -v for more details):
 - plutus-benchmark-0.1.0.0 (bench:bitwise-bench) (first run)
Preprocessing benchmark 'bitwise-bench' for plutus-benchmark-0.1.0.0...
Building benchmark 'bitwise-bench' for plutus-benchmark-0.1.0.0...
Running 1 benchmarks...
Benchmark bitwise-bench: RUNNING...
benchmarking 8-queens
time                 683.4 ms   (681.5 ms .. 685.0 ms)
                     1.000 R²   (1.000 R² .. 1.000 R²)
mean                 678.6 ms   (674.1 ms .. 680.4 ms)
std dev              3.211 ms   (92.63 μs .. 3.978 ms)
variance introduced by outliers: 19% (moderately inflated)

Benchmark bitwise-bench: FINISH
```

* [plc] Support for `Natural` numbers in the default universe, backed by `Integer`. (#6346)

Co-authored-by: Nikolaos Bezirgiannis <[email protected]>

* nothunks ^>= 0.2 (#6349)

* Make NumBytesCostedAsNumWords use Integer instead of Int (#6350)

The `NumBytesCostedAsNumWords` wrapper contained an `Int`, but this changes it to `Integer` for consistency with the other wrappers.  This change also affects the type of `Bitwise.replicateByte`.

* [Benchmark] Reduce the number of benchmarks (#6328)

* [Test] Improve distribution of generated integers (#6315)

This improves distribution of generated integers, so that we more often hit important edge cases such as `2 ^ 16`, `2 ^ 32 - 1`, `2 ^ 32`, `2 ^ 64` etc.

* [Plinth] [Builtins] Add a general 'mkNil' (#6347)

This replaces the `mkNilInteger`, `mkNilData` etc boilerplate with a single `mkNil` function at the expense of moving the boilerplate to the compiler code.

* [Refactoring] Use 'KnownBuiltinTypeIn' instead of 'HasConstant' consistently (#6353)

* Restore auto generation of compiler option table (#6373)

* Add the bitwise builtins to the metatheory (#6368)

* Initial metatheory for rest of bitwise builtins

* Separate lists of expected failures for evaluation tests and budget tests

* Remove temporary test data

* Fix memory usage for lists in Agda

* Forgot about haskell-steppable-conformance

* Remove suprious s

* Restore CI checks for doc site code (#6376)

* andByteString conformance cases (#6356)

* andByteString conformance cases

* Move each case to its own directory

* Update goldens for merge

* Conformance cases for complementByteString (#6359)

* Conformance for orByteString (#6357)

* Conformance cases for readBit (#6360)

* Conformance for shiftByteString (#6363)

* Conformance for findFirstSetBit (#6366)

* Conformance for xorByteString (#6358)

* Conformance for countSetBits (#6365)

---------

Signed-off-by: Ana Pantilie <[email protected]>
Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: Yura Lazarev <[email protected]>
Co-authored-by: Ana Pantilie <[email protected]>
Co-authored-by: Nikolaos Bezirgiannis <[email protected]>
Co-authored-by: Nikolaos Bezirgiannis <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Kenneth MacKenzie <[email protected]>
Co-authored-by: Ziyang Liu <[email protected]>
Co-authored-by: effectfully <[email protected]>
Co-authored-by: Yura Lazarev <[email protected]>
Co-authored-by: zeme-wana <[email protected]>
Co-authored-by: Yura Lazaryev <[email protected]>
Co-authored-by: Joseph Fajen <[email protected]>
Co-authored-by: ianhanssoniohk <[email protected]>
Co-authored-by: olgahryniuk <[email protected]>
Co-authored-by: Koz Ross <[email protected]>
Co-authored-by: Samuel Leathers <[email protected]>
Co-authored-by: Vladimir Kalnitsky <[email protected]>
Co-authored-by: Erik de Castro Lopo <[email protected]>
Co-authored-by: zeme <[email protected]>
Co-authored-by: Jamie Bertram <[email protected]>
Co-authored-by: omahs <[email protected]>
Co-authored-by: Romain Soulat <[email protected]>
effectfully pushed a commit that referenced this pull request Aug 6, 2024
Co-authored-by: Ziyang Liu <[email protected]>
Signed-off-by: Ana Pantilie <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Create an efficient drop-in Data replacement for AssocMap.Map
5 participants