Fix actions at ubuntu-22.04

Description

CI is currently failing on github because there is no module named cil  https://github.com/TomographicImaging/CIL/actions/runs/12349560947/job/34461234403
Last time the actions passed was when they were running on Ubuntu 22.04.5. ubuntu-latest recently updated which version its using to   Ubuntu 24.04.1 and this is when our actions started failing
https://github.com/actions/runner-images/issues/10636

If you see any issues with your workflows during transition period:
Switch back to Ubuntu 22 by changing workflow YAML to use runs-on: ubuntu-22.04 We support two latest LTS Ubuntu versions, so Ubuntu 22 will still be maintained for the next 2 years.
File an issue in this repository

Example Usage

Changes
Fixed actions at ubuntu-22.04
Testing you performed

Please add any demo scripts to https://github.com/TomographicImaging/CIL-Demos/tree/main/misc

Related issues/links
Checklist

[x] I have performed a self-review of my code
[x] I have added docstrings in line with the guidance in the developer guide
[x] I have updated the relevant documentation
[x] I have implemented unit tests that cover any new or modified functionality
[x] CHANGELOG.md has been updated with any functionality change
[ ] Request review from all relevant developers
[ ] Change pull request label to 'Waiting for review'

Contribution Notes
Please read and adhere to the developer guide and local patterns and conventions.

[x] The content of this Pull Request (the Contribution) is intentionally submitted for inclusion in CIL (the Work) under the terms and conditions of the Apache-2.0 License
[x] I confirm that the contribution does not violate any intellectual property rights of third parties

If we merge this I will open an issue for us to figure out how to get it working with ubuntu-latest

https://github.com/TomographicImaging/CIL/issues/2017


Re-introduce thread pool for the sync functions (maybe)

https://github.com/sansyrox/robyn/pull/20#issuecomment-865121079
Read discussion above
And see if introducing a threadpool will impact asgi compliance(most probably not) but still check again.

Using https://docs.rs/tokio/1.7.1/tokio/task/fn.spawn_blocking.html may be the best way, it'll spawn inside tokios internal threadpool and allow you to await it!

Also wondering if it's possible, as the routes are being added we store some meta data about them, i.e. if they're async or not so we don't have to waste time during a request.

@JackThomson2 , I just did that. You can have a look here: https://github.com/sansyrox/robyn/pull/20

Thank you for this(https://docs.rs/tokio/1.7.1/tokio/task/fn.spawn_blocking.html) . 😀
I will read more about it.

@JackThomson2 , I just did that. You can have a look here: #20

I suggest we store that info in the rust side, I guess the less time we spend in the GIL the better from what I gather. So each of the hashtables stores an enum of the py function + info about the function. Then a rough idea of what we could do. Something like

let res =  if is_async {
   python_async_fun().await
} else {
  spawn_blocking(move || { python_sync_fun() }).await
}```

Just a rough idea I had in my head :D

@JackThomson2 , we have also have a gitter room in case you want to join (https://gitter.im/robyn_/community#)

@sansyrox My concern was around the fact that for an async function now we acquire the GIL 3x and for Sync 2x, this is going to bottleneck the server. This can be reduced by one each by storing the async info rust side rather than in a py dict

@JackThomson2 , how can you differentiate in rust between sync and async without calling those functions?

@sansyrox When the function is added can't we use the same method?  So the router stores  get_routes: DashMap<Route, PyFunction>

@JackThomson2 , that makes sense.
We would save this gil acquision
    let function: PyFunction = Python::with_gil(|py| {
        let process_object_wrapper: &PyAny = process_object.as_ref(py);
        let py_dict = process_object_wrapper.downcast::<PyDict>().unwrap();
        let is_async: bool = py_dict.get_item("is_async").unwrap().extract().unwrap();
        let handler: &PyAny = py_dict.get_item("handler").unwrap();
        if is_async {
            let coro = handler.call0().unwrap();
            PyFunction::CoRoutine(coro.into())
        } else {
            PyFunction::SyncFunction(handler.into())
        }
    });

``` on every function call

@JackThomson2 , thank you for the feedback. 😄 I'll  implement it tomorrow.
But we are still locking it twice here
        PyFunction::CoRoutine(coro) => {
            let x = Python::with_gil(|py| {
                let x = coro.as_ref(py);
                pyo3_asyncio::into_future(x).unwrap()
            });
            let output = x.await.unwrap();
            Python::with_gil(|py| -> PyResult<String> {
                let contents: &str = output.extract(py).unwrap();
                Ok(contents.to_string())
            })
            .unwrap()
        }

Do you have any suggestions for this as well?

I think it looks like a limitation with the py03_asyncio, it may be worth asking the library owned if there's a way to return the result from the async function without having to enter the gil again

@JackThomson2 , I did talk a lot with the maintainer(when I was creating robyn initially). I don't think it is possible atm. I'll try asking again.

Closing this issue as this seems to be complete. @JackThomson2 feel free to reopen if you have anything to add.
Thanks again! 😄


Underscore in labeled argument has to be replicated at call site

The Reason compiler emits an unused variable warning for labeled arguments, but in some cases, an API consumer is expecting the function to take a particular labeled argument, even though the function ignores it.
I think labeled arguments should be able to be prefixed with an underscore without breaking call sites.
let test = (~arg) => { /* ignore arg for whatever reason */ }
/* This should be allowed to be:
    let test = (~_arg) => { /* ignore _arg for whatever reason */ }
    without breaking the line below
*/

/* […] */

test(~arg="whatever")

Just a note that you can do:
let test = (~arg as _arg) => ();

Which doesn't require any magic. :)

I will try this later. Thanks.

That works great, thanks.
For anyone else reading, you can also do this for optional labeled arguments and just use an underscore on its own as the alias, and even do this for multiple arguments (shadowing the singular underscore in a sense) without any further warnings from the compiler:
let test = (~abc as _=?, ~def as _=?, ()) => 1;
test(~abc=1) : (~def: '_a=?, unit) => int = <fun>
test(~abc=1, ()) : int = 1

You can see the difference between valid and invalid forms below:
-let test = (~abc=? as _, ~def=? as _, ()) => 1;
+let test = (~abc as _=?, ~def as _=?, ()) => 1;

This is a satisfactory ‘workaround’ for me, so I'm going to close this issue.


RenderBinary() disables CompressFilter

I am trying to output a CSV file without using buffer nor creating a temporary file.
I used RenderBinary for that purpose and it works but the response header does not contain Content-Encoding: gzip while the app.conf has results.compressed = true. Compression seems working unless RenderBinary is used.
Here's the code I am working on so far.
Is there something I am missing or revel does not support compression in this case?
Code
func (c App) Test() revel.Result {
	pr, pw := io.Pipe()
	csvw := csv.NewWriter(pw)

	go func() {
		pw.Write([]byte{0xEF, 0xBB, 0xBF})
		csvw.Write([]string{"aaaa", "bbbb", "cccc", "dddd"})
		for i := 0; i < 10000; i++ {
			csvw.Write([]string{"1111", "2222", "3333\n4444\n5555", "6666"})
			csvw.Flush()
		}
		pw.Close()
	}()

	c.Response.ContentType = "text/csv"
	return c.RenderBinary(pr, "test.csv", revel.Attachment, time.Now())
}

Expected Behavior
Successfully downloaded a CSV file while creating it simultaneously.
HTTP Response header contains Content-Encoding: gzip (transferred with gzip compression)
Actual Behavior
Successfully downloaded a CSV file while creating it simultaneously.
HTTP Response header DOES NOT contain Content-Encoding: gzip (not compressed)

I found some MIME types are not gzip-supported by the following hard-coded configuration.
I will create a PR to support text/csv for now.
<EMAIL_ADDRESS>L21
var compressableMimes = [...]string{
	"text/plain",
	"text/html",
	"text/xml",
	"text/css",
	"application/json",
	"application/xml",
	"application/xhtml+xml",
	"application/rss+xml",
	"application/javascript",
	"application/x-javascript",
}

Thanks ~ Merge your request


ICM-86 Added code coverage reporting support

Performed the following:

Added support for Codecov service
Added logic to explicitly generate code coverage reports during CI build.
Added budget to Readme file which shows code coverage status of the master branch.

ICM-86 "Extend vertx-guice to use single injector for all verticles".

Current coverage is 93.87%

Branch #4 has no coverage reports uploaded yet.

No diff could be generated. No reports for master found.

Powered by Codecov. Updated on successful CI builds.


CAMEL-11919 Adding new feature

Salesforce REST API request headers not included in update,upsert,create
and query operations

@zregvart do you mind taking a look?

The code need also to fix checkstyle, run
mvn compile -P sourcecheck

I have now updated the code to pass checkstyle.

@DG007 thank you for this pull request! I'll merge this in. I would like to cleanup the implementation a bit first, adding javadoc and such. And run the integration tests.

@zregvart Thank you accepting the PR. I have a general question regarding camel version 2.20.0. Can i clarify it here?

@DG007 I've decided upon a slightly different take on this (see https://github.com/apache/camel/commit/eb38af78b850541037e14d4ce0919b13ed4b81c6). With this we can support any Salesforce header on any request and also get headers from response on outbound message.
If this is OK with you could you close this pull request or perhaps rebase and add any functionality that might be missing in your use case?
Thank you for raising the issue and taking a stab at implementing it -- it really makes a difference 👍

@DG007 do you need to add something to the fix by @zregvart ? Can we close this and eventually you'll open a new PR with improvements? Thanks.

i was trying to test this build, but my camel version upgrade to 2.20.0 doesn't work. My application is not starting up. so couldn't test it yet. Is there a document which I could use to upgrade from camel 2.19.4-snapshot to camel 2.20.0?

i was trying to test this build, but my camel version upgrade to 2.20.0 doesn't work. My application is not starting up. so couldn't test it yet. Is there a document which I could use to upgrade from camel 2.19.x to camel 2.20.0?

Hi @DG007 to test these changes you would need to run with the latest 2.21.0-SNAPSHOT version, as this has not yet been released, and will be a part of 2.21.0. There should not be that much difference between 2.19 and 2.20 to prevent your application from starting. If there is, we would like to address it so can you write to the users mailing list explaining your use case, or create a JIRA issue so we can have a look?

<EMAIL_ADDRESS>is this where I can address my use case?

<EMAIL_ADDRESS>is this where I can address my use case?

@DG007 we have a users mailing list at<EMAIL_ADDRESS>see here how to subscribe, there is also a Gitter chat room, and the JIRA is here.

This has been implemented via https://github.com/apache/camel/commit/eb38af78b850541037e14d4ce0919b13ed4b81c6, see CAMEL-11919.


libivykis: 0.41 -> 0.42.1

Semi-automatic update. These checks were performed:

built on NixOS
found 0.42.1 with grep in /nix/store/npgsv4dlpgkbm8r2rz1wqns7ispcq4na-libivykis-0.42.1
found 0.42.1 in filename of file in /nix/store/npgsv4dlpgkbm8r2rz1wqns7ispcq4na-libivykis-0.42.1

cc "@rickynils"

Failure on x86_64-darwin (full log)
Partial log (click to expand)
Package ‘libivykis-0.42.1’ in /Users/graham/nix-borg/repo/38dca4e3aa6bca43ea96d2fcc04e8229/builder/grahamc-ndnd/pkgs/development/libraries/libivykis/default.nix:18 is not supported on ‘x86_64-darwin’, refusing to evaluate.

a) For `nixos-rebuild` you can set
  { nixpkgs.config.allowBroken = true; }
in configuration.nix to override this.

b) For `nix-env`, `nix-build`, `nix-shell` or any other Nix command you can add
  { allowBroken = true; }
to ~/.config/nixpkgs/config.nix.

Success on aarch64-linux (full log)
Partial log (click to expand)
make[1]: Leaving directory '/build/ivykis-0.42.1'
post-installation fixup
shrinking RPATHs of ELF executables and libraries in /nix/store/55c4n7sf8q083f0v8ij05cz9n4d84fvy-libivykis-0.42.1
shrinking /nix/store/55c4n7sf8q083f0v8ij05cz9n4d84fvy-libivykis-0.42.1/lib/libivykis.so.0.5.3
gzipping man pages under /nix/store/55c4n7sf8q083f0v8ij05cz9n4d84fvy-libivykis-0.42.1/share/man/
strip is /nix/store/lvx1acn1ig1j2km8jds5x3ggh3f2wa8v-binutils-2.28.1/bin/strip
stripping (with command strip and flags -S) in /nix/store/55c4n7sf8q083f0v8ij05cz9n4d84fvy-libivykis-0.42.1/lib
patching script interpreter paths in /nix/store/55c4n7sf8q083f0v8ij05cz9n4d84fvy-libivykis-0.42.1
checking for references to /build in /nix/store/55c4n7sf8q083f0v8ij05cz9n4d84fvy-libivykis-0.42.1...
/nix/store/55c4n7sf8q083f0v8ij05cz9n4d84fvy-libivykis-0.42.1

Success on x86_64-linux (full log)
Partial log (click to expand)
make[1]: Leaving directory '/tmp/nix-build-libivykis-0.42.1.drv-0/ivykis-0.42.1'
post-installation fixup
shrinking RPATHs of ELF executables and libraries in /nix/store/npgsv4dlpgkbm8r2rz1wqns7ispcq4na-libivykis-0.42.1
shrinking /nix/store/npgsv4dlpgkbm8r2rz1wqns7ispcq4na-libivykis-0.42.1/lib/libivykis.so.0.5.3
gzipping man pages under /nix/store/npgsv4dlpgkbm8r2rz1wqns7ispcq4na-libivykis-0.42.1/share/man/
strip is /nix/store/b0zlxla7dmy1iwc3g459rjznx59797xy-binutils-2.28.1/bin/strip
stripping (with command strip and flags -S) in /nix/store/npgsv4dlpgkbm8r2rz1wqns7ispcq4na-libivykis-0.42.1/lib
patching script interpreter paths in /nix/store/npgsv4dlpgkbm8r2rz1wqns7ispcq4na-libivykis-0.42.1
checking for references to /tmp/nix-build-libivykis-0.42.1.drv-0 in /nix/store/npgsv4dlpgkbm8r2rz1wqns7ispcq4na-libivykis-0.42.1...
/nix/store/npgsv4dlpgkbm8r2rz1wqns7ispcq4na-libivykis-0.42.1


Is it possible to draw non-straight lines?

Basically I'm interested in drawing something like this (without the break) for my bar chart:
─┐
 └─

Is it possible?

Not currently. If you'd like to take a crack at it, we'll entertain a PR. Thanks!

I think this kind of line is best drawn with line chart. You can add a line dataset in bar chart and draw any shape you like.


Support for Functions

Feature request
Is your feature request related to a problem? Please describe.
We should implement trigger support. This is something we will need to build into our Dashboard
Describe the solution you'd like
A clean wrapper around select * from pg_proc

What does the requirement look like right now? I think supporting receive and delete are low-hanging fruits, but info about parameters are trickier:

they can have optional names
they can have optional default values
they can be in, out, inout, variadic, table

Also, should this contain other kinds of "functions", i.e. aggregate functions, window functions, and procedures? DataGrip for example groups all this under "routines"—should we separate them or combine them under /routines?
@i-pip would love for you to chime in as well (and thanks again for the PR!).

should this contain other kinds of "functions", i.e. aggregate functions, window functions, and procedures?

I don't think so for now. It's not important for our use-case (user defined functions).

info about parameters are trickier

Understood. The "MVP" for this is to allow a user to create a function, then update/delete it afterwards. So ideally it would need to support these parameters.
This will be required in conjunction with triggers since triggers usually call a "function returning a trigger" like this.
For additional context, Steve is working on a library which could call a faas from Postgres (like Lambda). The ideal use-case here would be to combine with a trigger.

Thanks for the invitation to chime in @soedirgo . In the create function I made no assumptions about how params are structured, they're simply a string array - this means that the details of whether they are in out inout variadic or table are left up to the user.
So a user could provide only the data types e.g. ["int", "int"], names e.g ["a int", "b integer"] or even the whether it's an in or out ["a int", "out result int"]
I also made the assumption that procedures should likely be their own route like "/procedures"
I like the "/routines" idea - it doesn't even have to break current impl since it can aggregate existing routes


Scripts don't seem to be installed in system

For some reason uv doesn't make scripts accessible the way pip does
❯ which hatch
hatch not found
❯ uv pip install hatch --system
Resolved 39 packages in 22ms
Installed 1 package in 2ms
 + hatch==1.12.0
❯ rehash
❯ which hatch
hatch not found
❯ uv pip uninstall hatch --system
Uninstalled 1 package in 11ms
 - hatch==1.12.0
❯ pip install hatch
Collecting hatch
  Downloading hatch-1.12.0-py3-none-any.whl.metadata (5.5 kB)
  [...Downloads ellided...]
Downloading hatch-1.12.0-py3-none-any.whl (125 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 125.4/125.4 kB 2.3 MB/s eta 0:00:00
Installing collected packages: hatch
Successfully installed hatch-1.12.0
❯ which hatch
/home/neil/.pyenv/shims/hatch

It looks like you're using pyenv which is creating a shim for hatch (/home/neil/.pyenv/shims/hatch). I'm a little murky on the details of how pyenv works, but I think it's forwarding your pip install command to its own shim which handles these things. We can't support that.
Can you share verbose uv logs? What interpreter are we installing into?

You're right that I'm using pyenv.  No worries if you can't support that.

Can you share verbose uv logs?

Sure, how do I do that?

What interpreter are we installing into?

You mean which Python version?  3.12

uv won't manage a system-wide environment yet, we require separate environments. You can use it to install Python, e.g. uv python install. And you can use it to install global tools, e.g., uv tool install hatch to install it on your system instead.
Add the --verbose / -v flag to get more logs, e.g.
uv pip install hatch --system -v

❯ uv pip install hatch --system -v
DEBUG uv 0.3.5
DEBUG Searching for Python interpreter in system path
DEBUG Found `cpython-3.12.4-linux-x86_64-gnu` at `/home/neil/.pyenv/versions/3.12.4/bin/python3` (search path)
DEBUG Using Python 3.12.4 environment at /home/neil/.pyenv/versions/3.12.4/bin/python3
DEBUG Acquired lock for `/home/neil/.pyenv/versions/3.12.4`
DEBUG At least one requirement is not satisfied: hatch
DEBUG Using request timeout of 30s
DEBUG Solving with installed Python version: 3.12.4
DEBUG Adding direct dependency: hatch*
DEBUG Found fresh response for: https://pypi.org/simple/hatch/
DEBUG Searching for a compatible version of hatch (*)
DEBUG Selecting: hatch==1.12.0 [compatible] (hatch-1.12.0-py3-none-any.whl)
DEBUG Found fresh response for: https://files.pythonhosted.org/packages/b7/ad/63c1df39881b13ff1aad632809a680dabdcd40bf65a05c5194b41698b8b3/hatch-1.12.0-py3-none-any.whl.metadata
DEBUG Adding transitive dependency for hatch==1.12.0: click>=8.0.6
DEBUG Adding transitive dependency for hatch==1.12.0: hatchling>=1.24.2
DEBUG Adding transitive dependency for hatch==1.12.0: httpx>=0.22.0
DEBUG Adding transitive dependency for hatch==1.12.0: hyperlink>=21.0.0
DEBUG Adding transitive dependency for hatch==1.12.0: keyring>=23.5.0
DEBUG Adding transitive dependency for hatch==1.12.0: packaging>=23.2
DEBUG Adding transitive dependency for hatch==1.12.0: pexpect>=4.8, <5.dev0
DEBUG Adding transitive dependency for hatch==1.12.0: platformdirs>=2.5.0
DEBUG Adding transitive dependency for hatch==1.12.0: rich>=11.2.0
DEBUG Adding transitive dependency for hatch==1.12.0: shellingham>=1.4.0
DEBUG Adding transitive dependency for hatch==1.12.0: tomli-w>=1.0
DEBUG Adding transitive dependency for hatch==1.12.0: tomlkit>=0.11.1
DEBUG Adding transitive dependency for hatch==1.12.0: userpath>=1.7, <2.dev0
DEBUG Adding transitive dependency for hatch==1.12.0: uv>=0.1.35
DEBUG Adding transitive dependency for hatch==1.12.0: virtualenv>=20.26.1
DEBUG Adding transitive dependency for hatch==1.12.0: zstandard<1
DEBUG Found fresh response for: https://pypi.org/simple/click/
DEBUG Found fresh response for: https://pypi.org/simple/hatchling/
DEBUG Searching for a compatible version of click (>=8.0.6)
DEBUG Found installed version of click==8.1.7 that satisfies >=8.0.6
DEBUG Selecting: click==8.1.7 [installed] (installed)
DEBUG Found fresh response for: https://pypi.org/simple/hyperlink/
DEBUG Found fresh response for: https://pypi.org/simple/httpx/
DEBUG Found fresh response for: https://pypi.org/simple/platformdirs/
DEBUG Found fresh response for: https://pypi.org/simple/packaging/
DEBUG Found fresh response for: https://pypi.org/simple/shellingham/
DEBUG Found fresh response for: https://pypi.org/simple/userpath/
DEBUG Found fresh response for: https://pypi.org/simple/tomlkit/
DEBUG Found installed version of userpath==1.9.2 that satisfies >=1.7, <2.dev0
DEBUG Found installed version of tomlkit==0.13.2 that satisfies >=0.11.1
DEBUG Found installed version of shellingham==1.5.4 that satisfies >=1.4.0
DEBUG Found installed version of platformdirs==4.2.2 that satisfies >=2.5.0
DEBUG Found installed version of packaging==24.1 that satisfies >=23.2
DEBUG Found installed version of hyperlink==21.0.0 that satisfies >=21.0.0
DEBUG Found installed version of httpx==0.27.0 that satisfies >=0.22.0
DEBUG Found installed version of hatchling==1.25.0 that satisfies >=1.24.2
DEBUG Found installed version of click==8.1.7 that satisfies >=8.0.6
DEBUG Found fresh response for: https://pypi.org/simple/pexpect/
DEBUG Found fresh response for: https://pypi.org/simple/keyring/
DEBUG Found fresh response for: https://pypi.org/simple/tomli-w/
DEBUG Found fresh response for: https://pypi.org/simple/virtualenv/
DEBUG Searching for a compatible version of hatchling (>=1.24.2)
DEBUG Found installed version of hatchling==1.25.0 that satisfies >=1.24.2
DEBUG Selecting: hatchling==1.25.0 [installed] (installed)
DEBUG Adding transitive dependency for hatchling==1.25.0: packaging>=23.2
DEBUG Adding transitive dependency for hatchling==1.25.0: pathspec>=0.10.1
DEBUG Adding transitive dependency for hatchling==1.25.0: pluggy>=1.0.0
DEBUG Adding transitive dependency for hatchling==1.25.0: trove-classifiers*
DEBUG Searching for a compatible version of httpx (>=0.22.0)
DEBUG Found installed version of httpx==0.27.0 that satisfies >=0.22.0
DEBUG Selecting: httpx==0.27.0 [installed] (installed)
DEBUG Found fresh response for: https://pypi.org/simple/rich/
DEBUG Adding transitive dependency for httpx==0.27.0: anyio*
DEBUG Adding transitive dependency for httpx==0.27.0: certifi*
DEBUG Adding transitive dependency for httpx==0.27.0: httpcore>=1.dev0, <2.dev0
DEBUG Adding transitive dependency for httpx==0.27.0: idna*
DEBUG Adding transitive dependency for httpx==0.27.0: sniffio*
DEBUG Searching for a compatible version of hyperlink (>=21.0.0)
DEBUG Found installed version of hyperlink==21.0.0 that satisfies >=21.0.0
DEBUG Selecting: hyperlink==21.0.0 [installed] (installed)
DEBUG Adding transitive dependency for hyperlink==21.0.0: idna>=2.5
DEBUG Searching for a compatible version of keyring (>=23.5.0)
DEBUG Found installed version of keyring==24.3.1 that satisfies >=23.5.0
DEBUG Selecting: keyring==24.3.1 [installed] (installed)
DEBUG Found installed version of pexpect==4.9.0 that satisfies >=4.8, <5.dev0
DEBUG Found installed version of keyring==24.3.1 that satisfies >=23.5.0
DEBUG Found installed version of tomli-w==1.0.0 that satisfies >=1.0
DEBUG Found installed version of virtualenv==20.26.3 that satisfies >=20.26.1
DEBUG Found fresh response for: https://pypi.org/simple/zstandard/
DEBUG Found installed version of rich==13.8.0 that satisfies >=11.2.0
DEBUG Found fresh response for: https://pypi.org/simple/pluggy/
DEBUG Found fresh response for: https://pypi.org/simple/uv/
DEBUG Adding transitive dependency for keyring==24.3.1: jaraco-classes*
DEBUG Adding transitive dependency for keyring==24.3.1: secretstorage{sys_platform == 'linux'}>=3.2
DEBUG Adding transitive dependency for keyring==24.3.1: jeepney{sys_platform == 'linux'}>=0.4.2
DEBUG Searching for a compatible version of packaging (>=23.2)
DEBUG Found installed version of packaging==24.1 that satisfies >=23.2
DEBUG Selecting: packaging==24.1 [installed] (installed)
DEBUG Searching for a compatible version of pexpect (>=4.8, <5.dev0)
DEBUG Found installed version of pexpect==4.9.0 that satisfies >=4.8, <5.dev0
DEBUG Selecting: pexpect==4.9.0 [installed] (installed)
DEBUG Adding transitive dependency for pexpect==4.9.0: ptyprocess>=0.5
DEBUG Searching for a compatible version of platformdirs (>=2.5.0)
DEBUG Found installed version of platformdirs==4.2.2 that satisfies >=2.5.0
DEBUG Selecting: platformdirs==4.2.2 [installed] (installed)
DEBUG Searching for a compatible version of rich (>=11.2.0)
DEBUG Found installed version of rich==13.8.0 that satisfies >=11.2.0
DEBUG Selecting: rich==13.8.0 [installed] (installed)
DEBUG Adding transitive dependency for rich==13.8.0: markdown-it-py>=2.2.0
DEBUG Adding transitive dependency for rich==13.8.0: pygments>=2.13.0, <3.0.0
DEBUG Searching for a compatible version of shellingham (>=1.4.0)
DEBUG Found installed version of shellingham==1.5.4 that satisfies >=1.4.0
DEBUG Selecting: shellingham==1.5.4 [installed] (installed)
DEBUG Searching for a compatible version of tomli-w (>=1.0)
DEBUG Found installed version of tomli-w==1.0.0 that satisfies >=1.0
DEBUG Selecting: tomli-w==1.0.0 [installed] (installed)
DEBUG Searching for a compatible version of tomlkit (>=0.11.1)
DEBUG Found installed version of tomlkit==0.13.2 that satisfies >=0.11.1
DEBUG Selecting: tomlkit==0.13.2 [installed] (installed)
DEBUG Searching for a compatible version of userpath (>=1.7, <2.dev0)
DEBUG Found installed version of userpath==1.9.2 that satisfies >=1.7, <2.dev0
DEBUG Selecting: userpath==1.9.2 [installed] (installed)
DEBUG Adding transitive dependency for userpath==1.9.2: click*
DEBUG Found fresh response for: https://pypi.org/simple/pathspec/
DEBUG Searching for a compatible version of uv (>=0.1.35)
DEBUG Found installed version of uv==0.3.5 that satisfies >=0.1.35
DEBUG Selecting: uv==0.3.5 [installed] (installed)
DEBUG Found fresh response for: https://pypi.org/simple/trove-classifiers/
DEBUG Found installed version of zstandard==0.23.0 that satisfies <1
DEBUG Found fresh response for: https://pypi.org/simple/idna/
DEBUG Found fresh response for: https://pypi.org/simple/sniffio/
DEBUG Found fresh response for: https://pypi.org/simple/certifi/
DEBUG Found fresh response for: https://pypi.org/simple/httpcore/
DEBUG Found installed version of pluggy==1.5.0 that satisfies >=1.0.0
DEBUG Found fresh response for: https://pypi.org/simple/anyio/
DEBUG Found installed version of uv==0.3.5 that satisfies >=0.1.35
DEBUG Found installed version of pathspec==0.12.1 that satisfies >=0.10.1
DEBUG Found installed version of trove-classifiers==2024.7.2 that satisfies *
DEBUG Found installed version of idna==3.8 that satisfies *
DEBUG Searching for a compatible version of virtualenv (>=20.26.1)
DEBUG Found installed version of idna==3.8 that satisfies >=2.5
DEBUG Found installed version of virtualenv==20.26.3 that satisfies >=20.26.1
DEBUG Found installed version of sniffio==1.3.1 that satisfies *
DEBUG Selecting: virtualenv==20.26.3 [installed] (installed)
DEBUG Found installed version of certifi==2024.7.4 that satisfies *
DEBUG Found installed version of httpcore==1.0.5 that satisfies >=1.dev0, <2.dev0
DEBUG Adding transitive dependency for virtualenv==20.26.3: distlib>=0.3.7, <1
DEBUG Adding transitive dependency for virtualenv==20.26.3: filelock>=3.12.2, <4
DEBUG Adding transitive dependency for virtualenv==20.26.3: platformdirs>=3.9.1, <5
DEBUG Found installed version of anyio==4.4.0 that satisfies *
DEBUG Searching for a compatible version of zstandard (<1)
DEBUG Found installed version of zstandard==0.23.0 that satisfies <1
DEBUG Selecting: zstandard==0.23.0 [installed] (installed)
DEBUG Searching for a compatible version of pathspec (>=0.10.1)
DEBUG Found installed version of pathspec==0.12.1 that satisfies >=0.10.1
DEBUG Found fresh response for: https://pypi.org/simple/ptyprocess/
DEBUG Selecting: pathspec==0.12.1 [installed] (installed)
DEBUG Found fresh response for: https://pypi.org/simple/jeepney/
DEBUG Searching for a compatible version of pluggy (>=1.0.0)
DEBUG Found installed version of pluggy==1.5.0 that satisfies >=1.0.0
DEBUG Found fresh response for: https://pypi.org/simple/markdown-it-py/
DEBUG Selecting: pluggy==1.5.0 [installed] (installed)
DEBUG Searching for a compatible version of trove-classifiers (*)
DEBUG Found installed version of trove-classifiers==2024.7.2 that satisfies *
DEBUG Selecting: trove-classifiers==2024.7.2 [installed] (installed)
DEBUG Found fresh response for: https://pypi.org/simple/secretstorage/
DEBUG Searching for a compatible version of anyio (*)
DEBUG Found fresh response for: https://pypi.org/simple/jaraco-classes/
DEBUG Found installed version of anyio==4.4.0 that satisfies *
DEBUG Selecting: anyio==4.4.0 [installed] (installed)
DEBUG Found fresh response for: https://pypi.org/simple/pygments/
DEBUG Adding transitive dependency for anyio==4.4.0: idna>=2.8
DEBUG Adding transitive dependency for anyio==4.4.0: sniffio>=1.1
DEBUG Searching for a compatible version of certifi (*)
DEBUG Found installed version of certifi==2024.7.4 that satisfies *
DEBUG Selecting: certifi==2024.7.4 [installed] (installed)
DEBUG Searching for a compatible version of httpcore (>=1.dev0, <2.dev0)
DEBUG Found installed version of ptyprocess==0.7.0 that satisfies >=0.5
DEBUG Found installed version of httpcore==1.0.5 that satisfies >=1.dev0, <2.dev0
DEBUG Selecting: httpcore==1.0.5 [installed] (installed)
DEBUG Found installed version of markdown-it-py==3.0.0 that satisfies >=2.2.0
DEBUG Adding transitive dependency for httpcore==1.0.5: certifi*
DEBUG Adding transitive dependency for httpcore==1.0.5: h11>=0.13, <0.15
DEBUG Searching for a compatible version of idna (>=2.8)
DEBUG Found installed version of idna==3.8 that satisfies >=2.8
DEBUG Selecting: idna==3.8 [installed] (installed)
DEBUG Found installed version of jaraco-classes==3.4.0 that satisfies *
DEBUG Searching for a compatible version of sniffio (>=1.1)
DEBUG Found installed version of sniffio==1.3.1 that satisfies >=1.1
DEBUG Selecting: sniffio==1.3.1 [installed] (installed)
DEBUG Searching for a compatible version of jaraco-classes (*)
DEBUG Found installed version of pygments==2.18.0 that satisfies >=2.13.0, <3.0.0
DEBUG Found installed version of jaraco-classes==3.4.0 that satisfies *
DEBUG Selecting: jaraco-classes==3.4.0 [installed] (installed)
DEBUG Found installed version of idna==3.8 that satisfies >=2.8
DEBUG Found installed version of sniffio==1.3.1 that satisfies >=1.1
DEBUG Adding transitive dependency for jaraco-classes==3.4.0: more-itertools*
DEBUG Found fresh response for: https://pypi.org/simple/distlib/
DEBUG Searching for a compatible version of secretstorage{sys_platform == 'linux'} (>=3.2)
DEBUG Found installed version of secretstorage==3.3.3 that satisfies >=3.2
DEBUG Selecting: secretstorage==3.3.3 [installed] (installed)
DEBUG Found fresh response for: https://pypi.org/simple/filelock/
DEBUG Adding transitive dependency for secretstorage==3.3.3: secretstorage==3.3.3
DEBUG Adding transitive dependency for secretstorage==3.3.3: secretstorage{sys_platform == 'linux'}==3.3.3
DEBUG Searching for a compatible version of secretstorage{sys_platform == 'linux'} (==3.3.3)
DEBUG Found installed version of secretstorage==3.3.3 that satisfies ==3.3.3
DEBUG Selecting: secretstorage==3.3.3 [installed] (installed)
DEBUG Found installed version of distlib==0.3.8 that satisfies >=0.3.7, <1
DEBUG Found fresh response for: https://pypi.org/simple/h11/
DEBUG Found installed version of filelock==3.15.4 that satisfies >=3.12.2, <4
DEBUG Found installed version of secretstorage==3.3.3 that satisfies ==3.3.3
DEBUG Found installed version of h11==0.14.0 that satisfies >=0.13, <0.15
DEBUG Adding transitive dependency for secretstorage==3.3.3: cryptography>=2.0
DEBUG Adding transitive dependency for secretstorage==3.3.3: jeepney>=0.6
DEBUG Found fresh response for: https://pypi.org/simple/more-itertools/
DEBUG Searching for a compatible version of secretstorage (==3.3.3)
DEBUG Found installed version of secretstorage==3.3.3 that satisfies ==3.3.3
DEBUG Selecting: secretstorage==3.3.3 [installed] (installed)
DEBUG Adding transitive dependency for secretstorage==3.3.3: cryptography>=2.0
DEBUG Found installed version of more-itertools==10.4.0 that satisfies *
DEBUG Adding transitive dependency for secretstorage==3.3.3: jeepney>=0.6
DEBUG Found installed version of jeepney==0.8.0 that satisfies >=0.6
DEBUG Searching for a compatible version of jeepney{sys_platform == 'linux'} (>=0.4.2)
DEBUG Found installed version of jeepney==0.8.0 that satisfies >=0.4.2
DEBUG Selecting: jeepney==0.8.0 [installed] (installed)
DEBUG Adding transitive dependency for jeepney==0.8.0: jeepney==0.8.0
DEBUG Adding transitive dependency for jeepney==0.8.0: jeepney{sys_platform == 'linux'}==0.8.0
DEBUG Searching for a compatible version of jeepney (==0.8.0)
DEBUG Found installed version of jeepney==0.8.0 that satisfies ==0.8.0
DEBUG Found installed version of jeepney==0.8.0 that satisfies ==0.8.0
DEBUG Selecting: jeepney==0.8.0 [installed] (installed)
DEBUG Searching for a compatible version of jeepney{sys_platform == 'linux'} (==0.8.0)
DEBUG Found installed version of jeepney==0.8.0 that satisfies ==0.8.0
DEBUG Selecting: jeepney==0.8.0 [installed] (installed)
DEBUG Searching for a compatible version of ptyprocess (>=0.5)
DEBUG Found installed version of ptyprocess==0.7.0 that satisfies >=0.5
DEBUG Selecting: ptyprocess==0.7.0 [installed] (installed)
DEBUG Searching for a compatible version of markdown-it-py (>=2.2.0)
DEBUG Found installed version of markdown-it-py==3.0.0 that satisfies >=2.2.0
DEBUG Selecting: markdown-it-py==3.0.0 [installed] (installed)
DEBUG Adding transitive dependency for markdown-it-py==3.0.0: mdurl>=0.1, <1.dev0
DEBUG Searching for a compatible version of pygments (>=2.13.0, <3.0.0)
DEBUG Found installed version of pygments==2.18.0 that satisfies >=2.13.0, <3.0.0
DEBUG Selecting: pygments==2.18.0 [installed] (installed)
DEBUG Searching for a compatible version of distlib (>=0.3.7, <1)
DEBUG Found installed version of distlib==0.3.8 that satisfies >=0.3.7, <1
DEBUG Selecting: distlib==0.3.8 [installed] (installed)
DEBUG Searching for a compatible version of filelock (>=3.12.2, <4)
DEBUG Found installed version of filelock==3.15.4 that satisfies >=3.12.2, <4
DEBUG Selecting: filelock==3.15.4 [installed] (installed)
DEBUG Searching for a compatible version of h11 (>=0.13, <0.15)
DEBUG Found installed version of h11==0.14.0 that satisfies >=0.13, <0.15
DEBUG Selecting: h11==0.14.0 [installed] (installed)
DEBUG Found fresh response for: https://pypi.org/simple/mdurl/
DEBUG Searching for a compatible version of more-itertools (*)
DEBUG Found installed version of more-itertools==10.4.0 that satisfies *
DEBUG Selecting: more-itertools==10.4.0 [installed] (installed)
DEBUG Found installed version of mdurl==0.1.2 that satisfies >=0.1, <1.dev0
DEBUG Found fresh response for: https://pypi.org/simple/cryptography/
DEBUG Found installed version of cryptography==43.0.0 that satisfies >=2.0
DEBUG Searching for a compatible version of cryptography (>=2.0)
DEBUG Found installed version of cryptography==43.0.0 that satisfies >=2.0
DEBUG Selecting: cryptography==43.0.0 [installed] (installed)
DEBUG Adding transitive dependency for cryptography==43.0.0: cffi{platform_python_implementation != 'PyPy'}>=1.12
DEBUG Searching for a compatible version of mdurl (>=0.1, <1.dev0)
DEBUG Found installed version of mdurl==0.1.2 that satisfies >=0.1, <1.dev0
DEBUG Selecting: mdurl==0.1.2 [installed] (installed)
DEBUG Found fresh response for: https://pypi.org/simple/cffi/
DEBUG Searching for a compatible version of cffi{platform_python_implementation != 'PyPy'} (>=1.12)
DEBUG Found installed version of cffi==1.17.0 that satisfies >=1.12
DEBUG Selecting: cffi==1.17.0 [installed] (installed)
DEBUG Adding transitive dependency for cffi==1.17.0: cffi==1.17.0
DEBUG Adding transitive dependency for cffi==1.17.0: cffi{platform_python_implementation != 'PyPy'}==1.17.0
DEBUG Searching for a compatible version of cffi{platform_python_implementation != 'PyPy'} (==1.17.0)
DEBUG Found installed version of cffi==1.17.0 that satisfies ==1.17.0
DEBUG Found installed version of cffi==1.17.0 that satisfies ==1.17.0
DEBUG Selecting: cffi==1.17.0 [installed] (installed)
DEBUG Adding transitive dependency for cffi==1.17.0: pycparser*
DEBUG Searching for a compatible version of cffi (==1.17.0)
DEBUG Found installed version of cffi==1.17.0 that satisfies ==1.17.0
DEBUG Selecting: cffi==1.17.0 [installed] (installed)
DEBUG Adding transitive dependency for cffi==1.17.0: pycparser*
DEBUG Found fresh response for: https://pypi.org/simple/pycparser/
DEBUG Found installed version of pycparser==2.22 that satisfies *
DEBUG Searching for a compatible version of pycparser (*)
DEBUG Found installed version of pycparser==2.22 that satisfies *
DEBUG Selecting: pycparser==2.22 [installed] (installed)
DEBUG Tried 39 versions: anyio 1, certifi 1, cffi 1, click 1, cryptography 1, distlib 1, filelock 1, h11 1, hatch 1, hatchling 1, httpcore 1, httpx 1, hyperlink 1, idna 1, jaraco-classes 1, jeepney 1, keyring 1, markdown-it-py 1, mdurl 1, more-itertools 1, packaging 1, pathspec 1, pexpect 1, platformdirs 1, plu
ggy 1, ptyprocess 1, pycparser 1, pygments 1, rich 1, secretstorage 1, shellingham 1, sniffio 1, tomli-w 1, tomlkit 1, trove-classifiers 1, userpath 1, uv 1, virtualenv 1, zstandard 1
DEBUG Split specific environment resolution took 0.009s
Resolved 39 packages in 9ms
DEBUG Requirement already installed: anyio==4.4.0
DEBUG Requirement already installed: certifi==2024.7.4
DEBUG Requirement already installed: cffi==1.17.0
DEBUG Requirement already installed: click==8.1.7
DEBUG Requirement already installed: cryptography==43.0.0
DEBUG Requirement already installed: distlib==0.3.8
DEBUG Requirement already installed: filelock==3.15.4
DEBUG Requirement already installed: h11==0.14.0
DEBUG Requirement already cached: hatch==1.12.0
DEBUG Requirement already installed: hatchling==1.25.0
DEBUG Requirement already installed: httpcore==1.0.5
DEBUG Requirement already installed: httpx==0.27.0
DEBUG Requirement already installed: hyperlink==21.0.0
DEBUG Requirement already installed: idna==3.8
DEBUG Requirement already installed: jaraco-classes==3.4.0
DEBUG Requirement already installed: jeepney==0.8.0
DEBUG Requirement already installed: keyring==24.3.1
DEBUG Requirement already installed: markdown-it-py==3.0.0
DEBUG Requirement already installed: mdurl==0.1.2
DEBUG Requirement already installed: more-itertools==10.4.0
DEBUG Requirement already installed: packaging==24.1
DEBUG Requirement already installed: pathspec==0.12.1
DEBUG Requirement already installed: pexpect==4.9.0
DEBUG Requirement already installed: platformdirs==4.2.2
DEBUG Requirement already installed: pluggy==1.5.0
DEBUG Requirement already installed: ptyprocess==0.7.0
DEBUG Requirement already installed: pycparser==2.22
DEBUG Requirement already installed: pygments==2.18.0
DEBUG Requirement already installed: rich==13.8.0
DEBUG Requirement already installed: secretstorage==3.3.3
DEBUG Requirement already installed: shellingham==1.5.4
DEBUG Requirement already installed: sniffio==1.3.1
DEBUG Requirement already installed: tomli-w==1.0.0
DEBUG Requirement already installed: tomlkit==0.13.2
DEBUG Requirement already installed: trove-classifiers==2024.7.2
DEBUG Requirement already installed: userpath==1.9.2
DEBUG Requirement already installed: uv==0.3.5
DEBUG Requirement already installed: virtualenv==20.26.3
DEBUG Requirement already installed: zstandard==0.23.0
DEBUG Unnecessary package: markupsafe==2.1.5
DEBUG Unnecessary package: pyyaml==6.0.2
DEBUG Unnecessary package: qtpy==2.4.1
DEBUG Unnecessary package: send2trash==1.8.3
DEBUG Unnecessary package: absl-py==2.1.0
DEBUG Unnecessary package: argcomplete==3.5.0
DEBUG Unnecessary package: argon2-cffi==23.1.0
DEBUG Unnecessary package: argon2-cffi-bindings==21.2.0
DEBUG Unnecessary package: arrow==1.3.0
DEBUG Unnecessary package: astroid==3.2.4
DEBUG Unnecessary package: asttokens==2.4.1
DEBUG Unnecessary package: async-lru==2.0.4
DEBUG Unnecessary package: attrs==24.2.0
DEBUG Unnecessary package: babel==2.16.0
DEBUG Unnecessary package: beartype==0.18.5
DEBUG Unnecessary package: beautifulsoup4==4.12.3
DEBUG Unnecessary package: bleach==6.1.0
DEBUG Unnecessary package: build==1.2.1
DEBUG Unnecessary package: cachecontrol==0.14.0
DEBUG Unnecessary package: cfgv==3.4.0
DEBUG Unnecessary package: charset-normalizer==3.3.2
DEBUG Unnecessary package: chex==0.1.86
DEBUG Unnecessary package: cleo==2.1.0
DEBUG Unnecessary package: comm==0.2.2
DEBUG Unnecessary package: crashtest==0.4.1
DEBUG Unnecessary package: debugpy==1.8.5
DEBUG Unnecessary package: decorator==5.1.1
DEBUG Unnecessary package: defusedxml==0.7.1
DEBUG Unnecessary package: dill==0.3.8
DEBUG Unnecessary package: docstring-to-markdown==0.15
DEBUG Unnecessary package: dulwich==0.21.7
DEBUG Unnecessary package: equinox==0.11.4
DEBUG Unnecessary package: etils==1.9.2
DEBUG Unnecessary package: execnet==2.1.1
DEBUG Unnecessary package: executing==2.0.1
DEBUG Unnecessary package: fastjsonschema==2.20.0
DEBUG Unnecessary package: fqdn==1.5.1
DEBUG Unnecessary package: graph-imports==0.1 (from file:///home/neil/src/graph_imports)
DEBUG Unnecessary package: greenlet==3.0.3
DEBUG Unnecessary package: identify==2.6.0
DEBUG Unnecessary package: iniconfig==2.0.0
DEBUG Unnecessary package: installer==0.7.0
DEBUG Unnecessary package: ipykernel==6.29.5
DEBUG Unnecessary package: ipython==8.26.0
DEBUG Unnecessary package: ipywidgets==8.1.5
DEBUG Unnecessary package: isoduration==20.11.0
DEBUG Unnecessary package: isort==5.13.2
DEBUG Unnecessary package: jax==0.4.31
DEBUG Unnecessary package: jaxlib==0.4.31
DEBUG Unnecessary package: jaxtyping==0.2.33
DEBUG Unnecessary package: jedi==0.19.1
DEBUG Unnecessary package: jinja2==3.1.4
DEBUG Unnecessary package: json5==0.9.25
DEBUG Unnecessary package: jsonpointer==3.0.0
DEBUG Unnecessary package: jsonschema==4.23.0
DEBUG Unnecessary package: jsonschema-specifications==2023.12.1
DEBUG Unnecessary package: jupyter==1.0.0
DEBUG Unnecessary package: jupyter-client==8.6.2
DEBUG Unnecessary package: jupyter-console==6.6.3
DEBUG Unnecessary package: jupyter-core==5.7.2
DEBUG Unnecessary package: jupyter-events==0.10.0
DEBUG Unnecessary package: jupyter-lsp==2.2.5
DEBUG Unnecessary package: jupyter-server==2.14.2
DEBUG Unnecessary package: jupyter-server-terminals==0.5.3
DEBUG Unnecessary package: jupyterlab==4.2.5
DEBUG Unnecessary package: jupyterlab-pygments==0.3.0
DEBUG Unnecessary package: jupyterlab-server==2.27.3
DEBUG Unnecessary package: jupyterlab-widgets==3.0.13
DEBUG Unnecessary package: lineax==0.0.5 (from file:///home/neil/src/lineax)
DEBUG Unnecessary package: matplotlib-inline==0.1.7
DEBUG Unnecessary package: mccabe==0.7.0
DEBUG Unnecessary package: mistune==3.0.2
DEBUG Unnecessary package: ml-dtypes==0.4.0
DEBUG Unnecessary package: msgpack==1.0.8
DEBUG Unnecessary package: mypy==1.11.2
DEBUG Unnecessary package: mypy-extensions==1.0.0
DEBUG Unnecessary package: nbclient==0.10.0
DEBUG Unnecessary package: nbconvert==7.16.4
DEBUG Unnecessary package: nbformat==5.10.4
DEBUG Unnecessary package: neovim==0.3.1
DEBUG Unnecessary package: nest-asyncio==1.6.0
DEBUG Unnecessary package: nodeenv==1.9.1
DEBUG Unnecessary package: notebook==7.2.1
DEBUG Unnecessary package: notebook-shim==0.2.4
DEBUG Unnecessary package: numpy==2.0.1
DEBUG Unnecessary package: opt-einsum==3.3.0
DEBUG Unnecessary package: optax==0.2.3
DEBUG Unnecessary package: optimistix==0.0.7
DEBUG Unnecessary package: overrides==7.7.0
DEBUG Unnecessary package: pandocfilters==1.5.1
DEBUG Unnecessary package: parso==0.8.4
DEBUG Preserving seed package: pip==24.1
DEBUG Unnecessary package: pkginfo==1.11.1
DEBUG Unnecessary package: poetry==1.8.3
DEBUG Unnecessary package: poetry-core==1.9.0
DEBUG Unnecessary package: poetry-plugin-export==1.8.0
DEBUG Unnecessary package: pre-commit==3.8.0
DEBUG Unnecessary package: prometheus-client==0.20.0
DEBUG Unnecessary package: prompt-toolkit==3.0.47
DEBUG Unnecessary package: psutil==6.0.0
DEBUG Unnecessary package: pure-eval==0.2.3
DEBUG Unnecessary package: pydeps==1.12.20
DEBUG Unnecessary package: pylint==3.2.6
DEBUG Unnecessary package: pynvim==0.5.0
DEBUG Unnecessary package: pyproject-hooks==1.1.0
DEBUG Unnecessary package: pyright==1.1.377
DEBUG Unnecessary package: pytest==8.3.2
DEBUG Unnecessary package: pytest-xdist==3.6.1
DEBUG Unnecessary package: python-dateutil==2.9.0.post0
DEBUG Unnecessary package: python-json-logger==2.0.7
DEBUG Unnecessary package: python-lsp-jsonrpc==1.1.2
DEBUG Unnecessary package: python-lsp-server==1.12.0
DEBUG Unnecessary package: pyzmq==26.2.0
DEBUG Unnecessary package: qtconsole==5.5.2
DEBUG Unnecessary package: rapidfuzz==3.9.6
DEBUG Unnecessary package: referencing==0.35.1
DEBUG Unnecessary package: requests==2.32.3
DEBUG Unnecessary package: requests-toolbelt==1.0.0
DEBUG Unnecessary package: rfc3339-validator==0.1.4
DEBUG Unnecessary package: rfc3986-validator==0.1.1
DEBUG Unnecessary package: rpds-py==0.20.0
DEBUG Unnecessary package: ruff==0.6.2
DEBUG Unnecessary package: scipy==1.14.0
DEBUG Preserving seed package: setuptools==73.0.1
DEBUG Unnecessary package: six==1.16.0
DEBUG Unnecessary package: soupsieve==2.6
DEBUG Unnecessary package: stack-data==0.6.3
DEBUG Unnecessary package: stdlib-list==0.10.0
DEBUG Unnecessary package: terminado==0.18.1
DEBUG Unnecessary package: tinycss2==1.3.0
DEBUG Unnecessary package: toolz==0.12.1
DEBUG Unnecessary package: tornado==6.4.1
DEBUG Unnecessary package: traitlets==5.14.3
DEBUG Unnecessary package: typeguard==2.13.3
DEBUG Unnecessary package: typer==0.12.3
DEBUG Unnecessary package: types-python-dateutil==<IP_ADDRESS>40821
DEBUG Unnecessary package: typing-extensions==4.12.2
DEBUG Unnecessary package: ujson==5.10.0
DEBUG Unnecessary package: uri-template==1.3.0
DEBUG Unnecessary package: urllib3==2.2.2
DEBUG Unnecessary package: wcwidth==0.2.13
DEBUG Unnecessary package: webcolors==24.8.0
DEBUG Unnecessary package: webencodings==0.5.1
DEBUG Unnecessary package: websocket-client==1.8.0
DEBUG Unnecessary package: widgetsnbextension==4.0.13
Installed 1 package in 1ms
 + hatch==1.12.0

So yeah here you can see we grab whatever Python pyenv tells us to use /home/neil/.pyenv/versions/3.12.4/bin/python3. If you were to run /home/neil/.pyenv/versions/3.12.4/bin/python3 -m hatch presumably it'd be available. Or /home/neil/.pyenv/versions/3.12.4/bin/hatch but since we're not pip, pyenv doesn't install a shim automatically.

It looks like this is a duplicate of https://github.com/astral-sh/uv/issues/1586 which is now tracked in https://github.com/astral-sh/uv/issues/4130
You need to run pyenv rehash to add the shims.
We opened an upstream issue at https://github.com/pyenv/pyenv/issues/2979 but there's no traction there yet.

Thanks for the speedy and thorough review!


Use links for CMS preview states to allow open in new tab

Important to allow users to send around preview links, open draft versions in
new tabs, or find out which URL to use to preview on mobile phones and other
devices which can't load the CMS preview panel directly.
Removed CSS animations since they complicated the component too much.
Removed input/label setup since its not contained in a form, so has no
relevance as far as server-side state goes.
This does mean there's no longer an indication that only one state can be
active at a given time (which the radio buttons communicated), but that's no
different from e.g. the CMS menu.
Not an API change since the Entwine JS and PHP interfaces stay the same,
but since its technically not a bugfix I figured its better placed for 3.2 under the new semver guidance.
Tested in IE8, IE10, Firefox, Chrome: https://www.dropbox.com/s/j7be06syzw1we1e/SilverStripe_-_Edit_Page_2014-11-10_10-49-36.jpg.jpg?dl=0

Does @chillu feel rebasing this to all the work that's happened recently? I think it's probably still relevant as we haven't refactored the pages section...

+1, please rebase

Bump

I'll probably just close it if @chillu doesn't feel like maintaining this. It's been a long time, after all, so it's not fair to expect him to update it.

Yeah, it's still an accessibility hazard, but given all the SS4 work I don't see how I'm going to get around rebasing this complex change anytime soon - closing.

Pretty easy to merge by hand, tbh.


sync/stream_periodic3_test failing with --noopt

The VM with --noopt finishes under 11ms, therefore the test is not valid. Replacing > wiht >= fixes it.

Fixed with eb3186b7bd35c94a35b094c6684de48c0abb94dc


The cgo flag for MacOS is "darwin", not "macos"

At least up to MacOS Sierra )and go 1.8.3) the "os" name for MacOS is "darwin", but you are using:
 #cgo macos CFLAGS: -DWEBVIEW_COCOA=1 -x objective-c
 #cgo macos LDFLAGS: -framework Cocoa -framework WebKit

This causes WEBVIEW_COCOA to be undefined. Changing to the following fixes the problem:
#cgo darwin CFLAGS: -DWEBVIEW_COCOA=1 -x objective-c
#cgo darwin LDFLAGS: -framework Cocoa -framework WebKit

If you tested this with a different version of MacOS and/or go, and it worked for you, please consider adding both "macos" and "darwin" flags.

You're absolutely right! macos has never been a build constraint. And I clearly remember fixing this on mac. Probably forgot to commit/push (I'm a bit uncomfortable working on three different machines at once).
Thanks for reporting, should be fixed by now.


Supply custom gradient in the backward function

Recently I've been working on a project where I need to supply custom gradient into the back propagation process. Therefore I need an advanced backward function where I can pass in gradient, retain_graph and create_graph as parameters. That's why I introduced this new function backward_with_grad in this pull request.
I know that the documentation as well as the function name is not finalized yet in this pull request, I merely want to submit and enter the discussion of whether we can manage to add this feature to the code base. It would of great help to many other projects involving custom gradient!

Thank you for your feedback; I'll work on this and get back to you in a few days.


Add postera api

Description
postera_api package added to provide command line interface for interacting with PostEra API.
Todos
Notable points that this PR has either accomplished or will accomplish.

Functionality to create, read or update a PostEra molecule set - DONE
Format designed to add new PostEra API endpoints in the future if needed

Questions

unit tests have been added in postera_api.tests - do these needed to be added to a global unit test suite?

Status

[ ] Ready to go

Tagging in @emripka
I need to fix the permissions to add you as a reviewer, stay tuned!

@emripka invite sent!

@emripka could you give this a review? I think that will be most useful coming from you at PostEra!

Codecov Report

Merging #117 (bab6005) into main (cace029) will decrease coverage by 0.03%.
The diff coverage is 0.00%.