Add inspect view to snippets

This PR adds a generic InspectView that can be used for snippets via SnippetViewSet. The implementation is heavily based on ModelAdmin's InspectView`.
Still a bit unsure of how image and documents should be handled though, as I don't really like how we need to import from wagtail.images and wagtail.documents within wagtail.admin.
I tried using the read-only FieldPanel but it doesn't handle image nor documents, so I decided not to use it.
Please check the following:

[x] Do the tests still pass?[^1]
[x] Does the code comply with the style guide?

[x] Run make lint from the Wagtail root.

[x] For Python changes: Have you added tests to cover the new/fixed behaviour?
[x] For new features: Has the documentation been updated accordingly?

Please describe additional details for testing this change.
Add inspect_view_enabled = True to the PersonViewSet in bakerydemo.
[^1]: Development Testing
[^2]: Browser and device support
[^3]: Accessibility Target

@laymonage fantastic work. I'm in the middle of migration to 5.x and this is what I've been missing. I'm going to use it in a fork and get back here in case of problems or suggestions.
Thanks for your effort and I hope to see this merged soon!

@laymonage I think that the navigation header can be valuable addition here. Otherwise inspection feels kind lost.

It might be also smart to add "Inspect" action on the edit view (buttons listed in the footer). So user can easily go there. But that's TBD.

Thanks @pySilver

I think that the navigation header can be valuable addition here. Otherwise inspection feels kind lost.

The breadcrumb is something we'd like to revisit in the future. The implementation template is currently not ideal as it's copy-pasted from the page breadcrumbs. Historically, only the page views had breadcrumbs (and only up to the edit view), but we had to add them to Snippets so that we have room for the side panel buttons. Ideally, if we want to add more breadcrumbs, we probably should add breadcrumbs across the whole admin.
There are still some design decisions needed though, because the page breadcrumbs are related to the page tree, which does not apply to other areas of the admin.

It might be also smart to add "Inspect" action on the edit view (buttons listed in the footer). So user can easily go there. But that's TBD.

Good idea, but I think that should be in the three-dot menu on the breadcrumbs. We want the footer actions to be related to the form. (On another note: we should probably get rid of the "delete" button there, as it seems to be the case for pages)

To add to the above discussion, there are two issues created to deal with the Breadcrumbs assumptions that they will be for page structures only.

https://github.com/wagtail/wagtail/issues/8767
https://github.com/wagtail/wagtail/issues/8037
https://github.com/wagtail/wagtail/issues/10118 (Stimulus migration, may need to consider the above two cases)

@gasman or we can leave a simple URL to the media file because this inspect page will always be kinda dead simple and ugly by default. Some table of key/value can be fine.

@gasman I've changed the approach to use a generic "field display registry" (in 93360b5) that maps model fields to Component classes. I was thinking this might be useful in other places in the future (not just the inspect view), e.g. read-only field panels or the listing views.
I made a separate commit for the base Field class in 6c9af56 because it was not necessary for the inspect view to work, but I figured it's still nice to have it anyway.

@gasman apparently calling render_html() with {% component %} will make Django skip any format localisation of the returned value. So, even if the BaseFieldDisplay component returns the value directly (without doing e.g. str()), the rendered value will be as if you do a str(value). This means things like dates will be rendered as e.g. 2023-13-07.
If render_html() is called from the view, and then in the template we do {{ rendered_value }}, then the format localisation is not skipped, and dates will be rendered as e.g. 13 Jul 2023. However, I don't think this is how we want the Component class to be used. (In addition, we also need to pass the parent_context manually, which isn't very easy if you don't have reference to the full context where the render_html() is used.)
This is why the tests are failing after I added 57c39f0f6570ac04bf975f4bc58ce56b59aff26a. Without it, the value is formatted with the locale and tests will pass. Let me know whether we should keep BaseFieldDisplay and update the test, or if you have a better approach. Thanks!

@laymonage From a quick dig into the Django template engine, it looks like calling render_value_in_context from render_html (and passing parent_context as the context) would have the same effect as rendering a template consisting of {{ value }}.
Having said that, if everything works fine without BaseFieldDisplay, then I'd be inclined to avoid overengineering things, and just drop 57c39f0f6570ac04bf975f4bc58ce56b59aff26a entirely.

@laymonage From a quick dig into the Django template engine, it looks like calling render_value_in_context from render_html (and passing parent_context as the context) would have the same effect as rendering a template consisting of {{ value }}.
Having said that, if everything works fine without BaseFieldDisplay, then I'd be inclined to avoid overengineering things, and just drop 57c39f0 entirely.

Nice find! TIL about that function.
I’ve dropped the commit and split the previous one into two: one that implements the generic field display registry, and the one after just replaces the inspect view implementation to use it.
I decided to add a BaseFieldDisplay (not registered) to provide a unified interface for these display classes.

I have just discovered this new helpful generic view, thanks! I am wondering why did you not use [django.views.generic.detail.DetailView](https://docs.djangoproject.com/en/4.2/ref/class-based-views/generic-display/#detailview) as the base class? It would provide the default methods to retrieve the object such as get_queryset() which could be really useful - e.g. to select related fields. If using this class instead is welcome, I can work on a PR.

I have just discovered this new helpful generic view, thanks!
I am wondering why did you not use django.views.generic.detail.DetailView as the base class? It would provide the default methods to retrieve the object such as get_queryset() which could be really useful - e.g. to select related fields. If using this class instead is welcome, I can work on a PR.

Glad you find it useful!
I don't think there was a strong reason, but Django's class-based views are notoriously complex so I opted to keep things simple by extending from TemplateView instead. It makes it clear that we're only using the template-rendering mechanism from the Django base class and the logic you need to know is pretty much all laid out in the view class directly.
One thing I don't really like about Django's BaseDetailView/BaseUpdateView/BaseCreateView is that get_object() called in get() and post() instead of setup():

https://github.com/django/django/blob/e41f9f94505f690525f16af8bd10e62e22bc0207/django/views/generic/detail.py#L107-L108
https://github.com/django/django/blob/e41f9f94505f690525f16af8bd10e62e22bc0207/django/views/generic/edit.py#L200-L206

Looking at their code, the duplicated overrides for get() and post() could've been simplified if they had moved self.object = self.get_object() to setup() and it would also guarantee that all methods have access to self.object in the same way. Of course, this doesn't matter much in the InspectView as you'd only use GET.
Anyway, that was just a rant 👀

It would provide the default methods to retrieve the object such as get_queryset() which could be really useful - e.g. to select related fields.
Can't this be done by overriding get_object()? Is there other use cases where this can't be accomplished by overriding get_object() and where Django's DetailView comes in handy?

I agree with the complexity and the changes which could be done to these class-based views. Moving self.object = self.get_object() to setup() could also ease the permission checking for an instance - but that's another point!

Can't this be done by overriding get_object()? Is there other use cases where this can't be accomplished by overriding get_object() and where Django's DetailView comes in handy?

It is less convenient here since you have to rewrite this method - e.g.:
def get_object(self):
    return get_object_or_404(self.model.objects.all().select_related('some_field'), pk=unquote(self.pk))

… instead of just "extending" the base QuerySet like this:
def get_queryset(self):
    return super().get_queryset().select_related('some_field')

I wouldn't really mind updating this to use BaseDetailView if the benefit is clear and worth the added complexity, but if we start using it we should probably use it in other similar views too e.g. UnpublishView, RevisionsUnscheduleView, etc.

I don't mind having BaseDetailView too honestly, I asked to understand your thoughts. I would just suggest - like you - to be consistent in all these admin.views.generic.models views and always provide the same mechanism to retrieve the object - i.e. get_object() and get_queryset() - either by using Django's class-based views or by writing our own logic.


Provide type definitions for TypeScript support

close #61

I can confirm that this works.

@mib200 please take a look an merge ;-)

Would love to see this merged in. Is there anything outstanding that needs to be finished here?

Totally legit, great work Shinigami92 ❤
@mib200 would you consider merging this? Or do you prefer us to go for a @types/vue-gtm on https://github.com/DefinitelyTyped/DefinitelyTyped?

This would surely be very helpful, and I would love to use it. ❤
Are there any updates on this PR?

Please merge this in! Need ASAP


Understand what happened with line_search_partial

The crux of PR #84 that I can't grok seems to boil down to this change:
def line_search_partial(
    alpha: float,
    exp_dissim_matrix: torch.Tensor,
    pi: torch.Tensor,
    a_spatial_dist: torch.Tensor,
    b_spatial_dist: torch.Tensor,
    pi_diff: torch.Tensor,
    loss_fun: str = "square_loss",
):
     ...
    pi = pi + minimal_cost * pi_diff
    combined_spatial_cost, a_gradient, b_gradient = ot.gromov.init_matrix(
        a_spatial_dist,
        b_spatial_dist,
        torch.sum(pi, axis=1).reshape(-1, 1),
        torch.sum(pi, axis=0).reshape(1, -1),
        loss_fun,
    )
    cost_G = (1 - alpha) * torch.sum(exp_dissim_matrix * pi) + alpha * ot.gromov.gwloss(
        combined_spatial_cost, a_gradient, b_gradient, pi
    )

to
def line_search_partial(
    alpha: float,
    exp_dissim_matrix: torch.Tensor,
    pi: torch.Tensor,
    a_spatial_dist: torch.Tensor,
    b_spatial_dist: torch.Tensor,
    pi_diff: torch.Tensor,
    f_cost: Callable,
    f_gradient: Callable,
):
    ...
    cost_G = f_cost(pi + minimal_cost * pi_diff)

You can walk me through it at some later time.

A walk-through of the code with @anushka255 cleared up the matter:
New approach expanded in each step:
- f_cost(pi + minimal_cost * pi_diff)
- nx.sum(M * (pi + minimal_cost * pi_diff)) + reg1 * f_loss(pi + minimal_cost * pi_diff)
- nx.sum(M * (pi + minimal_cost * pi_diff)) + reg1 * ot.gromov.gwloss(combined_spatial_cost, a_gradient, b_gradient, pi + minimal_cost * pi_diff)
- nx.sum((1 - alpha) * exp_dissim_matrix * (pi + minimal_cost * pi_diff)) + reg1 * ot.gromov.gwloss(combined_spatial_cost, a_gradient, b_gradient, pi + minimal_cost * pi_diff)
-  (1 - alpha) * nx.sum(exp_dissim_matrix * (pi + minimal_cost * pi_diff))
    + reg1 * ot.gromov.gwloss(combined_spatial_cost, a_gradient, b_gradient, pi + minimal_cost * pi_diff)

which is equivalent to the old implementation:
pi = pi + minimal_cost * pi_diff
cost_G = (1 - alpha) * torch.sum(exp_dissim_matrix * pi) + alpha * ot.gromov.gwloss(
        combined_spatial_cost, a_gradient, b_gradient, pi
    )

intuitively, this seems to make sense, as the new cost is the cost at the old pi, moved in the direction of pi_diff with a magnitude of minimal_cost (the derivative of the cost function if approximated as a quadratic function, through ot.optim.solve_1d_linesearch_quad).


Implement futex_wait and futex_wake.

This does not support futex_wait with a timeout yet.
Fixes https://github.com/rust-lang/rust/issues/77406 and partial fix for #1562.
Parking with a timeout won't work yet, but the basic park()/unpark() functionality works. That means std::sync::Once is usable again and the test pass again with the latest rustc.

Before today I was only vaguely aware of the existence of miri and never touched it, so please check if I'm not doing anything weird in this code. ^^'

Updated! Handling the addr pointer better now and added comments.

Added support FUTEX_WAIT with a timeout, and a test for park/park_timeout/unpark.
Many of parking_lots tests now pass:
MIRIFLAGS=-Zmiri-disable-isolation cargo miri test -- --skip condvar --skip recursive

The condvar and recursive tests fail an assertion.

Backtrace:
thread 'rustc' panicked at 'assertion failed: `(left == right)`
  left: `8`,
 right: `4`', /rust/compiler/rustc_middle/src/mir/interpret/value.rs:401:17
stack backtrace:
   0: rust_begin_unwind
             at /rustc/154f1f544dd68f7b53ff8d9952811e855f4c2d7c/library/std/src/panicking.rs:483
   1: std::panicking::begin_panic_fmt
             at /rustc/154f1f544dd68f7b53ff8d9952811e855f4c2d7c/library/std/src/panicking.rs:437
   2: rustc_middle::mir::interpret::value::Scalar<Tag>::to_bits_or_ptr
   3: rustc_mir::interpret::memory::Memory<M>::force_bits
             at /rust/compiler/rustc_mir/src/interpret/memory.rs:1027
   4: rustc_mir::interpret::eval_context::InterpCx<M>::force_bits
             at /rust/compiler/rustc_mir/src/interpret/eval_context.rs:353
   5: rustc_mir::interpret::operator::<impl rustc_mir::interpret::eval_context::InterpCx<M>>::overflowing_binary_op
             at /rust/compiler/rustc_mir/src/interpret/operator.rs:322
   6: rustc_mir::interpret::operator::<impl rustc_mir::interpret::eval_context::InterpCx<M>>::binop_ignore_overflow
             at /rust/compiler/rustc_mir/src/interpret/operator.rs:42
   7: rustc_mir::interpret::step::<impl rustc_mir::interpret::eval_context::InterpCx<M>>::eval_rvalue_into_place
             at /rust/compiler/rustc_mir/src/interpret/step.rs:175
   8: rustc_mir::interpret::step::<impl rustc_mir::interpret::eval_context::InterpCx<M>>::statement
             at /rust/compiler/rustc_mir/src/interpret/step.rs:89
   9: rustc_mir::interpret::step::<impl rustc_mir::interpret::eval_context::InterpCx<M>>::step
             at /rust/compiler/rustc_mir/src/interpret/step.rs:65
  10: miri::eval::eval_main::{{closure}}
             at /rust/src/tools/miri/src/eval.rs:221
  11: miri::eval::eval_main
             at /rust/src/tools/miri/src/eval.rs:215

Ah. I returned an int (i32) from syscall(), but that should've been a long (isize).

All tests of parking_lot now pass, except for:

That's really cool. :)

Ah. I returned an int (i32) from syscall(), but that should've been a long (isize).

So looks like this is not checked by the libstd user then?
Before resolving the issue (but probably in a separate PR to unblock fixing Miri) we should have a test that directly uses the futex API to check this. It should also use a dangling addr to make sure that works as well.

So looks like this is not checked by the libstd user then?

Yup, std::thread::park_timeout() doesn't return why it woke up, so it doesn't care what the syscall returns. In parking_lot, park() and unpark() also don't check the return value (in release mode), but park_timeout() does return whether it woke up due to a timeout or not, so does check the return value and errno.

we should have a test that directly uses the futex API

Yes, definitely.

we should have a test that directly uses the futex API

Added a test.

Thanks a lot. :)
@bors r+

:pushpin: Commit 68776d292196f4e890f860c1464ecc83af80859f has been approved by RalfJung

:hourglass: Testing commit 68776d292196f4e890f860c1464ecc83af80859f with merge b0e02f02186ff6d5bc8a7654b645ee26135f7709...

:sunny: Test successful - checks-travis, status-appveyor
Approved by: RalfJung
Pushing b0e02f02186ff6d5bc8a7654b645ee26135f7709 to master...


(GitHub table of contents) Resizable window

Greetings @Mottie
It's a feature request I wanted to make for a long time now:
it's about your awesome script, "GitHub table of contents".
Would it be possible to make its window resizable?
i.e. to be able to drag its right corner(or its edges) and expand/reduce as I want?
The reason is that very often, many entries in the TOC don't fit in the window and are truncated,
and I have to mouseover each line to see it fully.
Example page:
https://github.com/microsoft/vscode-docs/blob/vnext/release-notes/v1_52.md

Screenshot

Thank you
P.S.  Thanks so much !

You are awesome!! Thanks so much !

If it's not too much to ask, could you please make the sections collapsible when clicking the arrows ?
e.g. in the following screenshot, the Workbench section to collapse when clicking the arrow next to it?
I am asking this, because when the TOC is very long, it would be very convenient to be able to collapse some sections.

Screenshot 1

Screenshot 2

If it's not too much to ask, could you please make the sections collapsible when clicking the arrows ?
e.g. in the following screenshot, the Workbench section to collapse when clicking the arrow next to it?
I am asking this, because when the TOC is very long, it would be very convenient to be able to collapse some sections.

Screenshot 1

Screenshot 2

Clicking on the arrows works for me in Chrome. What browser are you having an issue in?

Clicking on the arrows works for me in Chrome. What browser are you having an issue in?

I hid my last comment:
there's an issue after your last commit: the collapse arrows now work only on some pages,
that's why I mistakenly thought that the feature is missing, sorry.
So, this comment is an issue report:
Below are example pages: (tested in my everyday profile)
Where the collapse arrows don't work:
(I believe this started happening right after I resized the TOC window)
https://github.com/microsoft/vscode-docs/blob/vnext/release-notes/v1_52.md
https://github.com/microsoft/vscode-docs/blob/vnext/release-notes/v1_53.md
https://github.com/sinatra/sinatra (the example URL)
https://github.com/sindresorhus/refined-github
https://github.com/Mottie/tablesorter
No generated TOC when not logged in to GitHub:
https://github.com/sinatra/sinatra (the example URL)
https://github.com/Mottie/GitHub-userscripts
https://github.com/Mottie/tablesorter
There's the following error in Console in the last case group:
Uncaught (in promise) TypeError: Cannot read property 'parentElement' of null at init

Also, when I test on a fresh Chrome profile with only latest Tampermonkey beta/Violentmonkey and the script (after login to GitHub):
there are no collapse arrows: (no error in Console)

Screenshot

I hid my last comment:
there's an issue after your last commit: the collapse arrows now work only on some pages,
that's why I mistakenly thought that the feature is missing, sorry.
So, this comment is an issue report:
Below are example pages: (tested in my everyday profile)
Where the collapse arrows don't work:
(I believe this started happening right after I resized the TOC window)
https://github.com/microsoft/vscode-docs/blob/vnext/release-notes/v1_52.md
https://github.com/microsoft/vscode-docs/blob/vnext/release-notes/v1_53.md
https://github.com/sinatra/sinatra (the example URL)
https://github.com/sindresorhus/refined-github
https://github.com/Mottie/tablesorter
No generated TOC when not logged in to GitHub:
https://github.com/sinatra/sinatra (the example URL)
https://github.com/Mottie/GitHub-userscripts
https://github.com/Mottie/tablesorter
There's the following error in Console in the last case group:
Uncaught (in promise) TypeError: Cannot read property 'parentElement' of null at init

Also, when I test on a fresh Chrome profile with only latest Tampermonkey beta/Violentmonkey and the script (after login to GitHub):
there are no collapse arrows: (no error in Console)

Screenshot

Update:
regarding my everyday Chrome profile,
I found that the collapse arrows not working is a conflict with the Refined GitHub extension:
when I disable it, then they work ok every time.
If I enable it, then they don't work most of the times.

Update:
regarding my everyday Chrome profile,
I found that the collapse arrows not working is a conflict with the Refined GitHub extension:
when I disable it, then they work ok every time.
If I enable it, then they don't work most of the times.

I found that the collapse arrows event listener was being bound on every page refresh. I've updated the script just now. Please try it now.

I found that the collapse arrows event listener was being bound on every page refresh. I've updated the script just now. Please try it now.

Thanks a lot! So, indeed the 1st issue is fixed!
What mpw still remains is the other two:
(I retested them just now with a different fresh Chrome profile with only TM beta/VM beta)

No generated TOCm when not logged in to GitHub:
https://github.com/sinatra/sinatra (the example URL)
https://github.com/Mottie/GitHub-userscripts
https://github.com/Mottie/tablesorter
There's the following error in Console in the last case group:
Uncaught (in promise) TypeError: Cannot read property 'parentElement' of null at init

No collapse arrows after login to GitHub:
(no error in Console)

Screenshot

Thanks a lot! So, indeed the 1st issue is fixed!
What mpw still remains is the other two:
(I retested them just now with a different fresh Chrome profile with only TM beta/VM beta)

No generated TOCm when not logged in to GitHub:
https://github.com/sinatra/sinatra (the example URL)
https://github.com/Mottie/GitHub-userscripts
https://github.com/Mottie/tablesorter
There's the following error in Console in the last case group:
Uncaught (in promise) TypeError: Cannot read property 'parentElement' of null at init

No collapse arrows after login to GitHub:
(no error in Console)

Screenshot

Ok, I've just updated the userscript to work on the logged out header... I can't reproduce the last issue with no arrows.  I did change how the arrows are rendered, so maybe it's incompatible with other browsers? No idea.

Ok, I've just updated the userscript to work on the logged out header... I can't reproduce the last issue with no arrows.  I did change how the arrows are rendered, so maybe it's incompatible with other browsers? No idea.

Thanks for the fix when logged out.

The last issue occurs for me consistently.
If I may assist in reproducing it, here are my STR in full details:
In in a fresh Chrome profile of 88.0.4324.104 / Firefox 85  (win10 x64 20h2),
with only Tampermonkey beta 4.12.6126/Violentmonkey beta <IP_ADDRESS>
and the script:
I open https://github.com/microsoft/vscode-docs/blob/vnext/release-notes/v1_52.md :
there are no collapse arrows in both browsers neither when logged in nor when logged out.
Screenshots:
logged out:

in Chrome

in Firefox

logged in:

in Chrome

in Firefox

In both browsers also I tried changing the GitHub theme Dark/Light (https://github.com/settings/appearance)
but it made no difference.

Update:
in the fresh profiles, the collapse arrows are restored if I install (Stylus extension and the) Github Dark userstyle.
Without that userstyle, the arrows don't appear in neither the default GitHub Dark nor Light theme.

Oh, are they just invisible?

Yes, exactly:


Nuxt 3 & vue loading overlay 6

Hi, when i try to add this component to nuxt i am facing with a problem.
Cannot read properties of undefined (reading '_c')
vue-loading-overlay": "^6.0", this is my version
import Loading from 'vue-loading-overlay';
import 'vue-loading-overlay/dist/css/index.css';

export default defineNuxtPlugin((nuxtApp) => {
  nuxtApp.vueApp.component('loading', Loading)
})

Is there any possibility to use this component with nuxt3

I need slot because of that i am trying to add as a component

I will check the compatibility tomorrow and post back here

i will be very happy if you check it

I could not reproduce this issue on fresh Nuxt 3.0.0-rc.12

I manage the private component package of the company project by mapping several libraries. Only this project caused post-build problems. Currently, I solved the problem by using src instead of taking the dist of this library.
I didn't have time to take a closer look, but this library might not work properly on vite because it was built and deployed as a webpack.

If someone can share a minimal reproduction of the issue, would be helpful


Jhendr m365 community

index moved.

Docs Build status updates of commit 3190284:
:warning: Validation status: warnings

File
Status
Preview URL
Details

Community/index.yml
:warning:Warning
View
Details

Community/index.yml

Line 60: [Warning] Invalid file link: 'changing-teams-from-private-to-public-what-to-expect-in-sharepoint'.

For more details, please refer to the build report.
Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.


YouTube player component triggers change detection every 250ms

Bug:
Currently, the YouTube player component triggers change detection every 250ms.
When a YT.Player instance is created, setInterval is called in it.
What is the expected behavior?
The YouTube player component should trigger change detection only by events.
What are the steps to reproduce?
https://stackblitz.com/edit/angular-xnpnny?file=src%2Fapp%2Fapp.component.ts
Which versions of Angular, Material, OS, TypeScript, browsers are affected?
@angular/youtube-player 8.2.3

Fixed in master.


Use Docker-built action for publishing to Packages

Is your feature request related to a problem? Please describe.
No problems / bugs at the moment.
Describe the solution you'd like
We should begin using the Docker-built action for publishing images to GitHub Packages. Currently, we're using mattdavis0351/actions/docker-gpr which is ✨. However, longer term it'd make sense to use docker/build-push-action so that we can rely on Docker's maintenance cadence.
Describe alternatives you've considered
We can continue using the existing action with little risk.
Additional context
This was suggested by @decyjphr 🙇♂. Courtesy pings for @ppremk and @mattdavis0351.

Absolutely in support of this.  We should wait until workshops are complete before tinkering with this change.  There will be a pretty decent content rewrite to accommodate for how their action is used vs mine.

The workshop is completed. Thanks y'all for the support ❤

@mattdavis0351 @hectorsector Is this issue a duplicate of #18?

Is this issue a duplicate of #18?

I don't think so but I think @mattdavis0351 might be a better source of truth.

@brianamarie no, this is not a duplicate.  This issue is a change in which action we use, #18 is a change in where we are storing the Docker image that the action produces.  The change will happen in relatively the same place in the course, but we shouldn't implement #18 just yet as there are still some GCR things getting ironed out

Done!


⚠ Jenkins Plugins Artifactory has degraded performance

In 14443d7, Jenkins Plugins Artifactory (https://get.jenkins.io/plugins/artifactory/) experienced degraded performance:

HTTP code: 200
Response time: 1241 ms

Resolved: Jenkins Plugins Artifactory performance has improved in 3b66d7e after 12 minutes.


Metrics: Move Metrics to a separate artifact.

I haven't added this artifact to build.gradle or setting.gradle since it doesn't have any classes yet, and the javaDoc task will fail (I haven't found a way to disable this task).

Why is this a separate artifact?  Should we also move views and view registration into this artifact?

I think @bogdandrutu mentioned that the exporter package should be out of api (https://github.com/census-instrumentation/opencensus-java/pull/1211#issuecomment-391833200). I guess the reason is to have exporters explicitly depend on the new Metrics artifact rather than APIs.

I was thinking of moving all exporters out of the api package if possible. Not just metrics, but span exporter as well. What do you think?

Make sense to me. However I would suggest to make Metrics and SpanData two independent artifacts since any exporter would only need to depend on one of them.

@bogdandrutu Which classes do you think we should move out of opencensus-api?  Should we move the io.opencensus.trace.export package for trace, and ViewManager, View, and the metrics package for stats?  I think that it would be good to separate those parts of the API since they have very different uses and they should probably have different stability guarantees.  I'm not completely sure how to split the API when the implementation for both parts is tightly coupled, though.  I assume we won't split the implementation artifacts.

@sebright I would start only with io.opencensus.trace.export and metrics initially. The implementation artifact can depend on both api and "export" packages.

Codecov Report

Merging #1216 into master will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff            @@
##             master   #1216   +/-   ##
========================================
  Coverage      81.9%   81.9%
  Complexity     1229    1229
========================================
  Files           192     192
  Lines          5984    5984
  Branches        557     557
========================================
  Hits           4901    4901
  Misses          935     935
  Partials        148     148

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 0334e16...f3135fd. Read the comment docs.

Should we name it exporter instead of metrics?

Done, though I think it should be named export since we already have a exporter directory that has the actual exporters.

Should we name it exporter instead of metrics?

I think metrics is more descriptive, because the library will do more than export.  It will also provide an API for reporting pre-aggregated values.
I also thought that metrics would be a separate artifact from the tracing export artifact, since each exporter would only need to depend on one of metrics or tracing, as @songy23 mentioned.

Maybe we can have two artifacts metrics and spandata under directory export, similar to exporters (where stats and trace exporters are also under separate directories)?

I would rather put metrics and spandata at the top level, since they are core artifacts for opencensus-java.  I also think that it could be confusing to have export and exporters directories.

I'm more inclined to @sebright 's idea of keeping Metrics and SpanData separate. Anyway I think we can start with adding the Metrics artifact first. I created https://github.com/census-instrumentation/opencensus-java/issues/1239 and we can continue discussion there.

Merging this PR to unblock following work. This artifact is not included in the uploadArchives for now, until we have a consensus on how the export artifact should look like (https://github.com/census-instrumentation/opencensus-java/issues/1239).


Plan to support InfluxDB 1.0

Is there any effort to support pushing metrics to InfluxDB 1.0? Or, any idea about how hard could it be to implement?

@bergerx yes, I'd like to have it done for Kubernetes 1.5. Unfortunately I don't have enough free cycles on my side, so any contribution is welcome. Closing in favor of #1143


09 JAN 2023 - InnerSource SIG License Working Group Meeting #5

Date
Monday 09 JAN 2023 - 11:00am EST / 4:00pm UK
Untracked attendees

Fullname, Affiliation, (optional) GitHub username
...

Meeting notices

FINOS SIG Leads are responsible for observing the FINOS guidelines for running project meetings. Project maintainers can find additional resources in the FINOS Maintainers Cheatsheet.

All participants in FINOS project meetings are subject to the LF Antitrust Policy, the FINOS Community Code of Conduct and all other FINOS policies.

FINOS meetings involve participation by industry competitors, and it is the intention of FINOS and the Linux Foundation to conduct all of its activities in accordance with applicable antitrust and competition laws. It is therefore extremely important that attendees adhere to meeting agendas, and be aware of, and not participate in, any activities that are prohibited under applicable US state, federal or foreign antitrust and competition laws. Please contact<EMAIL_ADDRESS>with any questions.

FINOS SIG meetings may be recorded for use solely by the FINOS team for administration purposes. In very limited instances, and with explicit approval, recordings may be made more widely available.

Agenda

[ ] Convene & roll call (5mins)
[ ] Display
FINOS Antitrust Policy summary slide
[ ] Review Meeting Notices (see above)
[ ] Approve past meeting minutes
[ ] Review Inner Source License deep dive questionnaire (can be provided as a doc file if access is blocked)
[ ] Deep dive with DB on their inner source project
[ ] Review any contributions to the clauses.md can be provided either as a pull request to https://github.com/chamindra/InnerSource/blob/master/docs/licenses/clauses.md or comments can be provided on the issue https://github.com/finos/InnerSource/issues/85
[ ] AOB, Q&A & Adjourn (5mins)

Decisions Made

[ ] Decision 1
[ ] Decision 2
[ ] ...

Action Items

[ ] Action 1
[ ] Action 2
[ ] ...

Zoom Details

https://zoom.us/j/94949043746?pwd=WnBFQjhpUnBjMWE0OUhqUGhhb0ZOdz09
Meeting ID: 949 4904 3746
Passcode: 067897

Join by phone
Find your local number: https://zoom.us/u/adJnH9JOiY
Mailing List
Email<EMAIL_ADDRESS>to subscribe to the InnerSource SIG
mailing list.

Can you please provide the link to the Questionnaire? We may have missed it

Hi Brittany, thanks for the question. I was planning to review/refine the Questionnaire at working group meeting on Monday as the first thing we do, however I have a draft I am working on here https://docs.google.com/forms/d/e/1FAIpQLSczj6ll2Puu4Ldm20gy-GrvDAUk1A7dkXMU4TOsaQh23UinHA/viewform?vc=0&c=0&w=1&flr=0&usp=mail_form_link
Feel free to send me some comments for improvement in advance

Thank you for this!  I will look through next week.

Hi - Richard @ Codethink

Hello 👋🏻

Hi 👋

hi from Nomura

Hello 👋

Hi


Cannot map ff4j-1.4.0.xsd to Java classes using xjc

ff4j-1.4.0.xsd contains two attribute elements with name value. When running
xjc ff4j-1.4.0.xsd
xjc issues the following error:
Property "Value" is already defined
While it's possible using xml bindings file and map value to valueAttribute, it's a bad solution because further along the way when you unmarshal an ff4j xml with JAXB you'll get:
Multiple fields representing property "value"
I suggest changing the value attribute names in the xsd to something like valueAttribute

I definitively have to change the XSD. In future versions you will be able to toggle features but also properties. I had to adapt the XML configuration file a little bit. But i try to maintain backward compatibility though.
Here a full sample of new capabilities :
https://github.com/clun/ff4j/blob/master/ff4j-core/src/test/resources/ff4j-parser-all.xml

Hi,
I don't think using XJC, and JAXB in general is the good way to work with ff4j xml file. I used to like it but it really painful to make it evolve. I prefer parse the file in an old low-level DOM way. You should never have to parse it yourself.
To read from and ff4J XML file you can use :
new FF4J("xmlfile.xml").getFeatureStore().readAll();

To generate an ff4J xml file :
 Map<String, Feature> features = getFf4j().getFeatureStore().readAll();
 InputStream in = new XmlParser().exportFeatures(features);

For information here is the new XSD (1.4) for next releases


Jest run coverage report even without adding coverage param

🐛 Bug Report
Looks like Jest try to run coverage report even if I don't ask him :)

To Reproduce
Steps to reproduce the behavior:

Add testResultsProcessor to config
Run test with jest

Expected behavior
We have two scripts to run unit tests:
"test": "jest --no-cache" and
"test:coverage": "npm run test -- --coverage"
When I run first command I expect that Jest run only unit tests and nothing more. And if I need coverage reports I need to run second command.
But currently when I run first command it also try to run coverage report, but it fails, because can't create folder for tests. If I will run second command it works well.
I think it's because adding testResultsProcessor param to Jest config in packega.json.
Link to repl or repo (highly encouraged)
Link<EMAIL_ADDRESS>If you run jest it will create coverage report, but if you remove "testResultsProcessor": "jest-sonar-reporter" from package.json it will not create coverage report.
envinfo

 System:
    OS: Linux 5.4 Ubuntu 20.04.1 LTS (Focal Fossa)
    CPU: (12) x64 Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
  Binaries:
    Node: 10.19.0 - /usr/bin/node
    Yarn: 1.22.5 - /usr/local/bin/yarn
    npm: 6.14.8 - /usr/local/bin/npm
  npmPackages:
    jest: ^25.5.4 => 25.5.4

We find two possible quick solutions for us.
First is to run command like this jest --no-cache --testResultsProcessor=''
Second is to delete "testResultsProcessor" from jest config and add testResultsProcessor param to script with coverage:
npm run test -- --coverage --testResultsProcessor='jest-sonar-reporter'.
So we choose second one. But I think, it will be better to fix it in library :)


doesn`t does his job

Mod Name
Forgified Fabric API
Mod Homepage
https://legacy.curseforge.com/minecraft/mc-mods/forgified-fabric-api
Minecraft version
1.21.1
Describe the bug
when I try to open a world it sends me a report but when I don`t use the connector all works fine
Steps to reproduce
disconnect-2024-11-07_20.03.01-client.txt
1.

...
Logs
---- Minecraft Crash Report ---- // I bet Cylons wouldn't have this problem.  Time: 2024-11-07 19:54:32 Description: Mod loading failures have occurred; consult the issue messages for more details  net.neoforged.neoforge.logging.CrashReportExtender$ModLoadingCrashException: Mod loading has failed   A detailed walkthrough of the error, its code path and all known details is as follows: ---------------------------------------------------------------------------------------  -- Mod loading issue -- Details: 	Mod file:  	Failure message: Some of your mods are incompatible with the game or each other! 		A potential solution has been determined, this may resolve your problem: 		   - Install fabric, any version. 		More details: 		   - mod Big Globe (bigglobe) 4.5.0 requires any version of fabric, which is missing! 	Mod version:  	Mod issues URL:  	Exception message:   -- System Details -- Details: 	Minecraft Version: 1.21.1 	Minecraft Version ID: 1.21.1 	Operating System: Windows 11 (amd64) version 10.0 	Java Version: 21.0.5, Azul Systems, Inc. 	Java VM Version: OpenJDK 64-Bit Server VM (mixed mode, sharing), Azul Systems, Inc. 	Memory: 520279576 bytes (496 MiB) /<PHONE_NUMBER> bytes (1440 MiB) up to<PHONE_NUMBER>6 bytes (18176 MiB) 	CPUs: 16 	Processor Vendor: GenuineIntel 	Processor Name: 13th Gen Intel(R) Core(TM) i7-13700K 	Identifier: Intel64 Family 6 Model 183 Stepping 1 	Microarchitecture: Raptor Lake 	Frequency (GHz): 3.42 	Number of physical packages: 1 	Number of physical CPUs: 8 	Number of logical CPUs: 16 	Graphics card #0 name: NVIDIA GeForce RTX 4070 	Graphics card #0 vendor: NVIDIA 	Graphics card #0 VRAM (MiB): 12282.00 	Graphics card #0 deviceId: VideoController1 	Graphics card #0 versionInfo: <IP_ADDRESS>90 	Graphics card #1 name: Intel(R) UHD Graphics 770 	Graphics card #1 vendor: Intel Corporation 	Graphics card #1 VRAM (MiB): 1024.00 	Graphics card #1 deviceId: VideoController2 	Graphics card #1 versionInfo: <IP_ADDRESS>77 	Memory slot #0 capacity (MiB): 32768.00 	Memory slot #0 clockSpeed (GHz): 2.67 	Memory slot #0 type: DDR4 	Memory slot #1 capacity (MiB): 32768.00 	Memory slot #1 clockSpeed (GHz): 2.67 	Memory slot #1 type: DDR4 	Virtual memory max (MiB): 75034.27 	Virtual memory used (MiB): 17327.23 	Swap memory total (MiB): 9728.00 	Swap memory used (MiB): 0.00 	Space in storage for jna.tmpdir (MiB): available: 360477.91, total: 952892.00 	Space in storage for org.lwjgl.system.SharedLibraryExtractPath (MiB): available: 360477.91, total: 952892.00 	Space in storage for io.netty.native.workdir (MiB): available: 360477.91, total: 952892.00 	Space in storage for java.io.tmpdir (MiB): available: 360477.91, total: 952892.00 	Space in storage for workdir (MiB): available: 360477.91, total: 952892.00 	JVM Flags: 2 total; -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump -Xmx18176M 	Loaded Shaderpack: (off) 	ModLauncher: 11.0.4+main.d2e20e43 	ModLauncher launch target: forgeclient 	ModLauncher services:  		sponge-mixin-0.15.2+mixin.0.8.7.jar mixin PLUGINSERVICE  		loader-4.0.31.jar slf4jfixer PLUGINSERVICE  		loader-4.0.31.jar runtime_enum_extender PLUGINSERVICE  		at-modlauncher-10.0.1.jar accesstransformer PLUGINSERVICE  		loader-4.0.31.jar runtimedistcleaner PLUGINSERVICE  		modlauncher-11.0.4.jar mixin TRANSFORMATIONSERVICE  		modlauncher-11.0.4.jar fml TRANSFORMATIONSERVICE  		modlauncher-11.0.4.jar connector_loader TRANSFORMATIONSERVICE  	FML Language Providers<EMAIL_ADDRESS><EMAIL_ADDRESS><EMAIL_ADDRESS><EMAIL_ADDRESS><EMAIL_ADDRESS>Mod List:  		advancednetherite-neoforge-2.1.6-1.21.1.jar       |Advanced Netherite            |advancednetherite             |2.1.6               |Manifest: NOSIGNATURE 		almanac-1.21.x-neoforge-1.0.2.jar                 |Almanac                       |almanac                       |1.0.2               |Manifest: NOSIGNATURE 		appleskin-neoforge-mc1.21-3.0.5.jar               |AppleSkin                     |appleskin                     |3.0.5+mc1.21        |Manifest: NOSIGNATURE 		architectury-13.0.8-neoforge.jar                  |Architectury                  |architectury                  |13.0.8              |Manifest: NOSIGNATURE 		Atlas-Lib-1.21.0-1.1.14.jar                       |Atlas Lib                     |atlaslib                      |1.21.0-1.1.14       |Manifest: NOSIGNATURE 		azurelib-neo-1.21.1-2.3.27.jar                    |AzureLib                      |azurelib                      |2.3.27              |Manifest: NOSIGNATURE 		BetterCopper 1.21 -1.2 - neoforge.jar             |Better Copper                 |bettercopper                  |1.2.1               |Manifest: NOSIGNATURE 		carryon-neoforge-1.21.1-<IP_ADDRESS>.jar              |Carry On                      |carryon                       |2.2.2               |Manifest: NOSIGNATURE 		cloth-config-15.0.140-neoforge.jar                |Cloth Config v15 API          |cloth_config                  |15.0.140            |Manifest: NOSIGNATURE 		ColdSweat-2.3.8.jar                               |Cold Sweat                    |cold_sweat                    |2.3.8               |Manifest: NOSIGNATURE 		collective-1.21.1-7.87.jar                        |Collective                    |collective                    |7.87                |Manifest: NOSIGNATURE 		comforts-neoforge-9.0.3+1.21.1.jar                |Comforts                      |comforts                      |9.0.3+1.21.1        |Manifest: NOSIGNATURE 		common-networking-neoforge-1.0.16-1.21.1.jar      |Common Networking             |commonnetworking              |1.0.16-1.21.1       |Manifest: NOSIGNATURE 		cgl-1.21-neoforge-0.5.1.jar                       |CommonGroovyLibrary           |commongroovylibrary           |0.5.1               |Manifest: NOSIGNATURE 		configured-neoforge-1.21.1-2.6.0.jar              |Configured                    |configured                    |2.6.0               |Manifest: 0d:78:5f:44:c0:47:0c:8c:e2:63:a3:04:43:d4:12:7d:b0:7c:35:37:dc:40:b1:c1:98:ec:51:eb:3b:3c:45:99 		Controlling-neoforge-1.21.1-19.0.3.jar            |Controlling                   |controlling                   |19.0.3              |Manifest: NOSIGNATURE 		coroutil-neoforge-1.21.0-1.3.8.jar                |CoroUtil                      |coroutil                      |1.21.0-1.3.8        |Manifest: NOSIGNATURE 		corpse-neoforge-1.21.1-1.1.2.jar                  |Corpse                        |corpse                        |1.21.1-1.1.2        |Manifest: NOSIGNATURE 		dynamic-fps-3.7.6+minecraft-1.21.0-neoforge.jar   |Dynamic FPS                   |dynamic_fps                   |3.7.6               |Manifest: NOSIGNATURE 		easy-villagers-neoforge-1.21.1-1.1.23.jar         |Easy Villagers                |easy_villagers                |1.21.1-1.1.23       |Manifest: NOSIGNATURE 		eatinganimation-1.21.0-6.0.1.jar                  |Eating Animation              |eatinganimation               |6.0.1               |Manifest: NOSIGNATURE 		entity_model_features_neoforge_1.21-2.2.6.jar     |Entity Model Features         |entity_model_features         |2.2.6               |Manifest: NOSIGNATURE 		entity_texture_features_neoforge_1.21.1-6.2.7.jar |Entity Texture Features       |entity_texture_features       |6.2.7               |Manifest: NOSIGNATURE 		FallingTree-1.21.1-<IP_ADDRESS>.jar                   |FallingTree                   |fallingtree                   |<IP_ADDRESS>            |Manifest: NOSIGNATURE 		FarmersDelight-1.21.1-1.2.5.jar                   |Farmer's Delight              |farmersdelight                |1.2.5               |Manifest: NOSIGNATURE 		farsightedmobs-neoforge-2.1.1-1.20.6.jar          |Farsighted Mobs               |farsightedmobs                |2.1.1               |Manifest: NOSIGNATURE 		forgeconfigapiport-neoforge-21.1.0.jar            |Forge Config API Port         |forgeconfigapiport            |21.1.0              |Manifest: NOSIGNATURE 		fabric-api-base-0.4.42+d1308ded19.jar             |Forgified Fabric API Base     |fabric_api_base               |0.4.42+d1308ded19   |Manifest: NOSIGNATURE 		fabric-block-view-api-v2-1.0.10+9afaaf8c19.jar    |Forgified Fabric BlockView API|fabric_block_view_api_v2      |1.0.10+9afaaf8c19   |Manifest: NOSIGNATURE 		fabric-renderer-api-v1-3.4.0+acb05a3919.jar       |Forgified Fabric Renderer API |fabric_renderer_api_v1        |3.4.0+acb05a3919    |Manifest: NOSIGNATURE 		fabric-rendering-data-attachment-v1-0.3.48+73761d2|Forgified Fabric Rendering Dat|fabric_rendering_data_attachme|0.3.48+73761d2e19   |Manifest: NOSIGNATURE 		ftb-library-neoforge-2101.1.5.jar                 |FTB Library                   |ftblibrary                    |2101.1.5            |Manifest: NOSIGNATURE 		ftb-ultimine-neoforge-2101.1.1.jar                |FTB Ultimine                  |ftbultimine                   |2101.1.1            |Manifest: NOSIGNATURE 		geckolib-neoforge-1.21.1-4.7.jar                  |GeckoLib 4                    |geckolib                      |4.7                 |Manifest: NOSIGNATURE 		gml-6.0.1.jar                                     |GroovyModLoader               |gml                           |6.0.1               |Manifest: NOSIGNATURE 		healingcampfire-1.21.1-6.1.jar                    |Healing Campfire              |healingcampfire               |6.1                 |Manifest: NOSIGNATURE 		immersive_aircraft-1.1.4+1.21.1-neoforge.jar      |Immersive Aircraft            |immersive_aircraft            |1.1.4+1.21.1        |Manifest: NOSIGNATURE 		iris-neoforge-1.8.0-beta.7+mc1.21.1.jar           |Iris                          |iris                          |1.8.0-beta.7+mc1.21.|Manifest: NOSIGNATURE 		ironchest-1.21-neoforge-16.0.7.jar                |Iron Chests                   |ironchest                     |1.21-neoforge-16.0.7|Manifest: NOSIGNATURE 		ironfurnaces-neoforge-1.21.1-4.2.6.jar            |Iron Furnaces                 |ironfurnaces                  |4.2.6               |Manifest: NOSIGNATURE 		Jade-1.21.1-NeoForge-15.8.2.jar                   |Jade                          |jade                          |15.8.2+neoforge     |Manifest: NOSIGNATURE 		jei-1.21.1-neoforge-<IP_ADDRESS>.jar               |Just Enough Items             |jei                           |<IP_ADDRESS>         |Manifest: NOSIGNATURE 		kffmod-5.6.0.jar                                  |Kotlin For Forge              |kotlinforforge                |5.6.0               |Manifest: NOSIGNATURE 		letmedespawn-1.21.x-neoforge-1.4.4.jar            |Let Me Despawn                |letmedespawn                  |1.4.4               |Manifest: NOSIGNATURE 		luggage-1.21-1.6.7.jar                            |Luggage                       |luggage                       |1.21-1.6.7          |Manifest: NOSIGNATURE 		client-1.21.1-20240808.144430-srg.jar             |Minecraft                     |minecraft                     |1.21.1              |Manifest: a1:d4:5e:04:4f:d3:d6:e0:7b:37:97:cf:77:b0:de:ad:4a:47:ce:8c:96:49:5f:0a:cf:8c:ae:b2:6d:4b:8a:3f 		moonlight-1.21-2.15.11-neoforge.jar               |Moonlight Lib                 |moonlight                     |1.21-2.15.10        |Manifest: NOSIGNATURE 		MouseTweaks-neoforge-mc1.21-2.26.1.jar            |Mouse Tweaks                  |mousetweaks                   |2.26.1              |Manifest: NOSIGNATURE 		NaturesCompass-1.21.1-3.0.3-neoforge.jar          |Nature's Compass              |naturescompass                |1.21.1-3.0.2-neoforg|Manifest: NOSIGNATURE 		neoforge-21.1.74-universal.jar                    |NeoForge                      |neoforge                      |21.1.74             |Manifest: NOSIGNATURE 		notenoughanimations-neoforge-1.7.6-mc1.21.jar     |NotEnoughAnimations           |notenoughanimations           |1.7.6               |Manifest: NOSIGNATURE 		pipez-neoforge-1.21.1-1.2.17.jar                  |Pipez                         |pipez                         |1.21.1-1.2.17       |Manifest: NOSIGNATURE 		Powah-6.1.0.jar                                   |Powah                         |powah                         |6.1.0               |Manifest: NOSIGNATURE 		primalwinter-neoforge-1.21.1-6.0.2.jar            |Primal Winter                 |primalwinter                  |6.0.2               |Manifest: NOSIGNATURE 		reeses-sodium-options-neoforge-1.8.0-beta.4+mc1.21|Reese's Sodium Options        |reeses_sodium_options         |1.8.0-beta.4+mc1.21.|Manifest: NOSIGNATURE 		Resourcify (1.21-1.21.1-neoforge)-1.5.1.jar       |Resourcify                    |resourcify                    |1.5.1               |Manifest: NOSIGNATURE 		Searchables-neoforge-1.21.1-1.0.2.jar             |Searchables                   |searchables                   |1.0.2               |Manifest: NOSIGNATURE 		simpleplanes-1.21.1-5.3.4.jar                     |Simple Planes                 |simpleplanes                  |5.3.4               |Manifest: NOSIGNATURE 		simple_guns_reworked-1.0.0-neoforge-1.21.1.jar    |SImple_Guns_Reworked          |simple_guns_reworked          |1.0.0               |Manifest: NOSIGNATURE 		smallships-neoforge-1.21.1-2.0.0-b1.5.jar         |Small Ships                   |smallships                    |2.0.0-b1.5          |Manifest: NOSIGNATURE 		sodium-neoforge-0.6.0-beta.4+mc1.21.1.jar         |Sodium                        |sodium                        |0.6.0-beta.4+mc1.21.|Manifest: NOSIGNATURE 		sodiumdynamiclights-neoforge-1.0.9-1.21.1.jar     |Sodium Dynamic Lights         |sodiumdynamiclights           |1.0.9               |Manifest: NOSIGNATURE 		sodium-extra-neoforge-0.6.0-beta.3+mc1.21.1.jar   |Sodium Extra                  |sodium_extra                  |0.6.0-beta.3+mc1.21.|Manifest: NOSIGNATURE 		sodiumoptionsapi-neoforge-1.0.5-1.21.1.jar        |Sodium Options API            |sodiumoptionsapi              |1.0.5               |Manifest: NOSIGNATURE 		sophisticatedbackpacks-1.21-<IP_ADDRESS>4.jar      |Sophisticated Backpacks       |sophisticatedbackpacks        |3.20.19             |Manifest: NOSIGNATURE 		sophisticatedcore-1.21-<IP_ADDRESS>8.jar             |Sophisticated Core            |sophisticatedcore             |0.6.47              |Manifest: NOSIGNATURE 		spectrelib-neoforge-0.17.2+1.21.jar               |SpectreLib                    |spectrelib                    |0.17.2+1.21         |Manifest: NOSIGNATURE 		squatgrow-neoforge-21.1.0+mc1.21.1.jar            |Squat Grow                    |squatgrow                     |21.1.0+mc1.21.1     |Manifest: NOSIGNATURE 		Storage Drawers-neoforge-1.21-13.8.2.jar          |Storage Drawers               |storagedrawers                |13.8.2              |Manifest: NOSIGNATURE 		supplementaries-1.21-3.0.8-alpha-neoforge.jar     |Supplementaries               |supplementaries               |1.21-3.0.5-alpha    |Manifest: NOSIGNATURE 		The-Hordes-1.21-1.6.1b.jar                        |The Hordes                    |hordes                        |1.6.1b              |Manifest: NOSIGNATURE 		watut-neoforge-1.21.0-1.1.4.jar                   |What Are They Up To           |watut                         |1.21.0-1.1.4        |Manifest: NOSIGNATURE 		Xaeros_Minimap_24.5.0_NeoForge_1.21.jar           |Xaero's Minimap               |xaerominimap                  |24.5.0              |Manifest: NOSIGNATURE 		XaerosWorldMap_1.39.0_NeoForge_1.21.jar           |Xaero's World Map             |xaeroworldmap                 |1.39.0              |Manifest: NOSIGNATURE 		YetAnotherConfigLib-3.6.1+1.21-neoforge.jar       |YetAnotherConfigLib           |yet_another_config_lib_v3     |3.6.1+1.21-neoforge |Manifest: NOSIGNATURE
Additional context
No response

Please read the issue template more carefully. For modpack related issues, use the support channel on our discord server.


Add support for TabPanelContainer, used in Apparel

to be defined, Miro to add screenshots

See the difference in components: "ProductDetailsTabComponent ProductSpecsTabComponent ProductReviewsTabComponent deliveryTab" vs components: "TabPanelContainer"
Electronics:

Apparel:

for now spartacus will ignore the errors produced by the fact that we don't yet support that component


Action Space and Scaling in the wrapper

Hi @amacati ,
I struggle to understand the action space and action scaling in the DroneRacingWrapper. It says:
"All values are scaled to [-1, 1]. Transformed back, x, y, z values of 1 correspond to 5m." I don't know how to interpret this.
The action is rescaled for the firmware by 1,1,1,pi and added to the current drone position. Then passed to the full state command of the firmware wrapper. So my question is, why did we not rescale the x,y,z by 0.2 instead of 1?
Secondly, to this logic, I assume, the action that the model learns has to be transformed afterwards as well. So when we use the trained RL model in the sim.py or elsewhere, the action suggested by the trained model has to be transformed in the same sense (rescaling and adding to the current position), right? e.g. when we do:
action = model.predict(obs)

This action has to be transformed. I hope the question is clear
Thanks

It seems like the answer has resolved your question, so I'm closing the issue. Feel free to reopen it if you have additional questions related to this one.


Name & area location

Describe the bug
A clear and concise description of what the bug is.
Aal patients location sow because other are not close & infected information give by sms ..this person is corentain or patients of covid
To Reproduce
Steps to reproduce the behavior:

Go to '...'
Click on '....'
Scroll down to '....'
See error

Expected behavior
A clear and concise description of what you expected to happen.
Screenshots
If applicable, add screenshots to help explain your problem.
Desktop (please complete the following information):

OS: [e.g. iOS]
Browser [e.g. chrome, safari]
Version [e.g. 22]

Additional context
Add any other context about the problem here.

I mean petaient are near others then others to alert by sms and create this for one app and install to aal people


MGMT-10555 Limit password's character set

A password can consist of:

letters a-zA-Z
numbers 0-9
special characters #?!@$%^&*-

The leading character must be a letter.
Description
Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change.
Fixes # (issue)
Type of change
Please select the appropriate options:

[x] Bug fix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
[ ] This change requires a documentation update
[ ] This change is a documentation update

Testing
Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration

[ ] Test A
[ ] Test B

Test Configuration:

Versions:
Hardware:

Checklist

[ ] I have performed a self-review of my own code
[ ] If a change is adding a feature, it should require a change to the README.md and the review should catch this.
[ ] If the change is a fix, it should have an issue. The review should make sure the comments state the issue (not just the number) and it should use the keywords that will close the issue on merge.
[ ] A change should not be merged unless it passes CI or there is a comment/update saying what testing was passed.
[ ] PRs should not be merged unless positively reviewed.

:tada: This PR is included in version 1.8.3 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


Env variables are not being substituted by its actual value in commandTests

It seems like when running the tool inside Docker it's not using the defined env variables nor the existing ones. For example, for plain alpine images we have $HOME defined:
$ docker run -it --rm alpine /bin/sh
/ # echo $HOME
/root
/ #

But when trying to use it in a test it's not being substituted by its /root value. Neither the defined ones (both locally and global variables) seem to work. Having a test file like this:
schemaVersion: "2.0.0"
globalEnvVars:
  - key: "GLOBAL_VAR"
    value: "GLOBAL_VALUE"
commandTests:
  - name: "existing env variable"
    command: "echo"
    args: ["$HOME"]
    expectedOutput: ["/root"]
  - name: "local env variable"
    envVars:
      - key: "SOME_ENV"
        value: "someValue"
    command: "echo"
    args: ["$SOME_ENV"]
    expectedOutput: ["someValue"]
  - name: "global env variable"
    command: "echo"
    args: ["$GLOBAL_VAR"]
    expectedOutput: ["GLOBAL_VALUE"]

and executing the tests with
docker run --rm \
    -v `pwd`:/tests \
    -v /var/run/docker.sock:/var/run/docker.sock \
    gcr.io/gcp-runtimes/container-structure-test:v1.0.0 \
    test \
    --image alpine \
    --config /tests/tests.yaml \
    -v

not a single tests pass:
===================================
====== Test file: tests.yaml ======
===================================
Total tests run: 3

=== RUN: [Command Test: existing env variable]
--- FAIL
stdout: $HOME

Error: Expected string '/root' not found in output

=== RUN: [Command Test: local env variable]
--- FAIL
stdout: $SOME_ENV

Error: Expected string 'someValue' not found in output

=== RUN: [Command Test: global env variable]
--- FAIL
stdout: $GLOBAL_VAR

Error: Expected string 'GLOBAL_VALUE' not found in output

FAILURES: 3
FAIL

Hey @AlbertoSH, thanks for filing and sorry for the late reply on this one.
container-structure-test doesn't currently support environment variable substitution in the test spec itself, so you won't be able to use any env vars as part of your test args/output. However, what you're trying to do is still possible using the metadataTest:
schemaVersion: 2.0.0

globalEnvVars:
  - key: FOO
    value: test_value

metadataTest:
  env:
    - key: PATH
      value: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    - key: FOO
      value: test_value

You can specify all your env vars here and check to be sure they're set to the correct value. It's also worth noting that this will NOT let you check variables set by the OS at boot or login time, i.e. $HOME, as these are not part of the container config.
All that said, I did actually find an issue with setting the env vars outside of the CommandTests: opened an issue for that here.

Yes, I know that I can test the env variables with the metadataTest but my use case was more intended to check that some software was installed and its executable was added to the PATH. So my real test is something like:
schemaVersion: "2.0.0"
globalEnvVars:
  - name: "some specific software version"
    envVars:
      - key: "PATH"
        value: "$PATH:$HOME/some/dir"
    command: "someExecutableAvailableInPath"
    args: ["some", "args"]
    expectedOutput: ["Version X"]

In the end I got a similar result with:
schemaVersion: "2.0.0"
globalEnvVars:
  - name: "some specific software version"
    # PATH redefinition not needed since it's set in .bashrc
    command: "bash"
    args: ["-cl", "someExecutableAvailableInPath some args"]
    expectedOutput: ["Version X"]

But it feels like an ugly workaround

@AlbertoSH this should now be supported via #130. I'll get the next release out ASAP


How to get audio record in meetingSidePanel?

I'm trying to get audio record in meeting side panel, however i failed. Does anyone has related experience？
I used this sample code: hello-world-in-meeting
then I changed the app manifest's to :
"context":[
"channelTab",
"privateChatTab",
"meetingChatTab",
"meetingDetailsTab",
"meetingSidePanel",
"meetingStage"
]
"devicePermissions": [
"media",
],
also added the check the microphone permission code:
navigator.permissions.query({name:'microphone'}).then(function(result) {
alert(result.state);
});
Both meetingSidePanel and meetingChatTab will show permission is granted.
Then i used recorder.js  to check audio is recorded or not.
It works in  meetingChatTab but can not get any audio file in meetingSidePanel. This confused me for a long time.

@r0y6a3n0 - Is there any console error you are getting?

@Prasad-MSFT
I don't get any console error. I just get DOMException: Permission denied in meetingChatTab(web version) but it works in channel tab. And in teams desktop app , I can get record permission in meetingChatTab.
When this code below run in meetingChatTab, something went wrong but I didn't see any error.
The stream seems to be null. I am not sure. I saw the log doesn't show "Media stream created."
function startUserMedia(stream) {
var input = audio_context.createMediaStreamSource(stream);
__log('Media stream created.');
recorder = new Recorder(input);
__log('Recorder initialised.');
}
navigator.getUserMedia({audio: true}, startUserMedia, function(e) {
__log('No live audio input: ' + e);
});

I can’t get audio here. Same code in meeting side panel not work.

We are checking with engineering team if it supports in meeting side panel. We will inform you once we get any update. Thanks!

@r0y6a3n0 - There is no such update as of now. We will inform you once we get further info from engineering team. Thanks!

@Prasad-MSFT I'm trying to get audio stream in the meeting and do speech recognition with my ASR model since I saw CART captions api is available. Is it supported to get the audio stream in meeting side panel? If not, I just give up this try.

@r0y6a3n0 - Device permissions in the meetings side panel are not supported yet in the General/Public ring.

We are closing this issue for now, Please feel free to reopen it, if required.


Avoid require(smartcard) crashes if service is not started

Just importing smartcard lib make app crash if pcscd service is not started. I'm working on a project where multiple card readers can be configured (factory), some are pcscd compliant some are not, so it's not useful to install this service.

Thanks!!

Thanks for your work ;)


Feat / UI updates and bring back support for light background colors

Description
This PR contains many UI improvements and (re)adds support for using light background colors.
Generic UI Improvements

Fix header and page alignment (spacing/gutters) for all breakpoints
Increase the shelf spacing
Increase the gap between the cards from 8 to 16 in the slider and card grid
Increase the title spacing for all pages
Cleanup unused SCSS variables

Video details

Align the video details to the bottom of the Hero
Refactor the Hero to make it re-usable for the Video details and Hub pages
Update the background image mask to cover more of the page and hide the visual radial gradient

Header

Increase the header height from 56 to 72 pixels
Update the appearance of the search bar input

Light background/header colors
The OTT Web App originally supported using lighter background/header colors. This was not working properly anymore and contained many bugs. It's not pretty, but it does work and uses the correct contrast colors again. The following changes are related to this:

Extract the text-shadow into a CSS variable and disable it when using a light background
Update the body-color CSS variable based on the calculated contrast color
Remove many variables.$white usages which overwrites the --body-color (and add some where it was needed)
Use the modal color for the Sidebar (menu) and Panels on the User page
Update the EPG layout to be full width and use the default JW blue background color

Update 29/10

Use markdown for video descriptions
Fix inline video layout alignment issues (title and description is aligned to the bottom of the page)
Use dynamic background for the EPG, but not when using a light background color

Screenshots

Screenshots light background color

I pushed two updates;

Small style alignments with the features shelf PR #628
End-to-end fix for the collapsible description

Use markdown for video descriptions

How does it handle embedded images?

Use markdown for video descriptions

How does it handle embedded images?

Good question, should we only allow some markup syntax for the description?

Thanks @langemike! I have updated the markdown component to disable images and GitHub flavoured markdown. Most block elements are already disabled due to using Marked#parseInline.


Would you please provide an script to switch java.

I like scoop and your java bucket. It has a little inconvenience that

It always add bin to PATH so that there will be multi java in path even first one will win
It will reset JAVA_HOME when the new java installed

I will switch to different java frequently. It's perfect if

Do not put bin in PATH when new java installed
Provide a script to switch java by reset JAVA_HOME, remove old %JAVA_HOME%\bin from PATH and add the new one.

There are two solutions available today, without removing env_add_path from the manifests:

scoop reset <java>@<version>
Using find-java from extras

scoop reset works very well for the current session, and will also update the user's path.
Globally installed javas takes precedence over user installed javas, so if you have admin rights on your PC, scoop install -g oraclejdk-lts will install a java that is always default for new sessions.
Consider the following:
PS C:> scoop install oraclejdk-lts
Installing 'oraclejdk-lts' (8u172-b11) [64bit]
PS C:> scoop install oraclejdk10
Installing 'oraclejdk10' (10.0.1-10) [64bit]
PS C:> scoop install zulu6
Installing 'zulu6' (<IP_ADDRESS>) [64bit]
PS C:> scoop install openjdk10
Installing 'openjdk10' (10.0.1) [64bit]
PS C:> java -version
openjdk version "10.0.1" 2018-04-17
OpenJDK Runtime Environment (build 10.0.1+10)
OpenJDK 64-Bit Server VM (build 10.0.1+10, mixed mode)
PS C:> scoop reset zulu6
Resetting zulu6 (<IP_ADDRESS>).
Linking ~\scoop\apps\zulu6\current => ~\scoop\apps\zulu6\<IP_ADDRESS>
PS C:> java -version
openjdk version "1.6.0-99"
OpenJDK Runtime Environment (Zulu <IP_ADDRESS>-win64) (build 1.6.0-99-b99)
OpenJDK 64-Bit Server VM (Zulu <IP_ADDRESS>-win64) (build 23.77-b99, mixed mode)
PS C:> scoop reset oraclejdk-lts
PS C:> java -version
java version "1.8.0_172"
Java(TM) SE Runtime Environment (build 1.8.0_172-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.172-b11, mixed mode)

Hope that helps!


Changes Browser menu items

Modify a method.  Look at project changes.

[x] The inspect gets an error:
MCModification does not understand #inspect

[x] the browse menu item brings up a dictionary browser.  It should bring up a package browser.

weeelll it opens the projects browser, but only gets as far as selecting the class; it doesn't actually select the category or  method.  But nothing is broken so we could maybe let this pass.
However:

[ ] if the change you are trying to browse is a class comment modification, or an added class, you get a walkback.

a MessageNotUnderstood occurred (error 2010), a UndefinedObject does not understand  #'comment'

Fixed in 3.0.16.  the changes browser is a hack and will be replaced. If we get an error trying to find a change in our image, just put up a nice dialog box saying the change cannot be browsed instead.

I think it should not first take the time to open a project browser and then close it and say it can't be browsed... especially since it could technically be browsed at least as precisely as a method.
However given that this browser is "a hack"... we can defer further attention.


cmd/compile: Fannkuch benchmark performance regression

Please answer these questions before submitting your issue. Thanks!
What version of Go are you using (go version)?
go version go1.11rc1 darwin/amd64
Does this issue reproduce with the latest release?
No.
What operating system and processor architecture are you using (go env)?
macOS 10.13.6 (darwin/amd64)
What did you do?
tested the benchmark at:
https://benchmarksgame-team.pages.debian.net/benchmarksgame/program/fannkuchredux-go-1.html
using 1.10.3 and 1.11rc1 with:
time go run fannkuchredux.go 12
time go1.11rc1 run fannkuchredux.go 12
results:
1.10.3: go run fannkuchredux.go 12  44.65s user 0.21s system 372% cpu 12.033 total
1.11rc1: go1.11rc1 run fannkuchredux.go 12  57.70s user 0.24s system 373% cpu 15.528 total
What did you expect to see?
1.11rc1 timings closer to 1.10.3
What did you see instead?
1.11rc1 timings slower than 1.10.3

/cc @randall77

Disabling  branchelim seems to bring performance back to 1.10 level. Interestingly enough, on test/bench/go1/fannkuch disabling CMOV hurts performance by 20%

Possibly related issue about still unfixed Fannkuch11 performance regression from Go1.8 -> Go1.9 time: https://github.com/golang/go/issues/18977.
For the reference: Fannkuch11 performance depends heavily on BCE: https://github.com/golang/go/issues/24660.

I've looked at instruction-level profile and found that all conditional moves are out of the hot-spot. Main problem is that enabling branchelim pass caused different register allocation, which in turn put register spills/fills inside the inner loop.


🚀 Release pipeline workflow

Coverage remained the same at 84.266% when pulling 25daf7918613591d170816a6289509abce8386d2 on release-pipeline into 15a8055d21d957a14ad97b88314d49da1eaaf8ea on modular-refactor.

Going to merge this sans review as it's just a working publish config at this point


Predicting Time-series Targets with Time-Series Features

Hi, I appreciate this great work!
I am dealing with both time-series features and targets, for example, each sample contains multiple time-series features and targets, where the time-offset variable denotes the time point (Note that the total number of time-offsets per sample may not be the same, e.g., in the following table, sample 1 has three rows, while sample 2 has four rows).

To put into a concrete example, supposing each sample is a patient, where feature1, feature2, and the target can be hourly measures of the patient's body indices such as blood pressure, heart rate, pH, etc. The training/test split is patient-wise, meaning that we are predicting a new patient's time-series target from time-offset 1 till N.
I tried naively regarding time-offsets as another numeric feature, as X=(time-offset, feature1, feature2), y=Target, and consider each row as an individual sample (actually it's not). Then I trained SVR, RandomForest, XGBoost on the dataset (X, y). However, the results are unsatisfying, like R_sq = 0.1. It makes sense since we haven't considered the time-series nature of this dataset. So I was wondering whether we can improve this performance by using your skits lib.
I have carefully read your documents, but I am not sure how to integrate the time-series features (feature1, feature2) and the time-offset variable, so could you kindly instruct me on how to transform the above tables? I sincerely appreciate your time and help!

Hi, I'm not sure if you can use skits for this, but my recommendation would be to create a column in your feature matrix for each possible feature and time-offset combination. If you have n features and m time offsets, you would want to create something like the following:
X  = (
    feature_1_time_offset_1, feature_1_time_offset_2, ..., feature_1_time_offset_m,
    feature_2_time_offset_1, feature_2_time_offset_2, ..., feature_2_time_offset_m,
    .
    .
    .
    feature_n_time_offset_1, feature_n_time_offset_2, ..., feature_n_time_offset_m
)

In the event that you do not have data for a particular feature and time-offset combo, you can set this combo to Null and impute as you see fit.

Thanks Ethan! I will check it out following your suggestion


Rewrite

Proposed Changes
This PR aims to improve the following:

significantly improve the inner workings of the editor
properly configure language and autocompletion together (preventing silly bugs)
improving completion UX in various small ways
fixing completion bugs
making built-ins pluggable
prevent bogus snippet completions within paths and/or identifiers

You can try out the changes via
npx @bpmn-io/sr bpmn-io/feel-editor#rewrite

Related to https://github.com/camunda/camunda-modeler/issues/3983
Checklist
To ensure you provided everything we need to look at your PR:

[x] Brief textual description of the changes present
[x] Visual demo attached
[x] Steps to try out present, i.e. using the @bpmn-io/sr tool
[x] Related issue linked via Closes {LINK_TO_ISSUE} or Related to {LINK_TO_ISSUE}

Ready for review (again). Please have a look!


Enhance Keras Ops Test Coverage for Cond and Unstack Operations

This PR introduces tests aimed at enhancing coverage for
keras/ops/core.py,
the Cond operation's output specification checks and the handling of negative axes by the Unstack operation.
The untested lines were identified through Codecov's coverage report.
Please note thatI have that added 2 tests with
    @pytest.mark.skipif(backend.backend() == "jax", reason="Incompatibilities with JAX's symbolic tensors")

to skip tests incompatible with JAX's handling of symbolic tensors.
    @pytest.mark.skipif(backend.backend() == "jax", reason="Incompatibilities with JAX's symbolic tensors")
    def test_cond_output_spec_mismatch_in_tuple_elements(self):
        cond_op = core.Cond()

        def true_fn():
            return (
                KerasTensor(shape=(3, 3), dtype="float32"),
                KerasTensor(shape=(4, 4), dtype="float32"),
            )

        def false_fn():
            return (
                KerasTensor(shape=(3, 3), dtype="float32"),
                # Mismatched tuple
                KerasTensor(shape=(2, 2), dtype="float32"),
            )

        pred = KerasTensor(shape=(), dtype="bool")
        expected_regex = "should return outputs of the same kind"

        with self.assertRaisesRegex(ValueError, expected_regex):
            cond_op(pred, true_fn, false_fn)

    @pytest.mark.skipif(backend.backend() == "jax", reason="Incompatibilities with JAX's symbolic tensors")
    def test_cond_output_spec_mismatch_true_fn_tuple_false_fn_not_tuple(self):
        cond_op = core.Cond()

        def true_fn():
            return (
                KerasTensor(shape=(3, 3), dtype="float32"),
                KerasTensor(shape=(4, 4), dtype="float32"),
            )

        def false_fn():
            # not a tuple to match the true_fn
            return {
                "a": KerasTensor(shape=(3, 3), dtype="float32"),
                "b": KerasTensor(shape=(4, 4), dtype="float32"),
            }

        pred = KerasTensor(shape=(), dtype="bool")
        expected_regex = "should return outputs of the same kind"

        with self.assertRaisesRegex(ValueError, expected_regex):
            cond_op(pred, true_fn, false_fn)

Is this the best way to avoid tests failing specifically due to JAX compatibility issues? Or should we strive to write tests that are suitable for all backends? Like using unittest.mock ?

Is this the best way to avoid tests failing specifically due to JAX compatibility issues?

This is a fine way to handle cases where a backend cannot be supported.
In this case, what was the JAX exception?

Is this the best way to avoid tests failing specifically due to JAX compatibility issues?

This is a fine way to handle cases where a backend cannot be supported.
In this case, what was the JAX exception?

                                                                                [100%]

=========================================================================================================================================================== FAILURES ============================================================================================================================================================
______________________________________________________________________________________________________________________________ CoreOpsCallsTests.test_cond_output_spec_mismatch_in_tuple_elements _______________________________________________________________________________________________________________________________
jax.errors.SimplifiedTraceback: For simplicity, JAX has removed its internal frames from the traceback of the following exception. Set JAX_TRACEBACK_FILTERING=off to include these.
The above exception was the direct cause of the following exception:
jax.errors.SimplifiedTraceback: For simplicity, JAX has removed its internal frames from the traceback of the following exception. Set JAX_TRACEBACK_FILTERING=off to include these.
The above exception was the direct cause of the following exception:
ValueError: A KerasTensor cannot be used as input to a JAX function. A KerasTensor is a symbolic placeholder for a shape and dtype, used when constructing Keras Functional models or Keras Functions. You can only use it as input to a Keras layer or a Keras operation (from the namespaces keras.layers and keras.operations). You are likely doing something like:
x = Input(...)
...
jax_fn(x)  # Invalid.

What you should do instead is wrap jax_fn in a layer:
class MyLayer(Layer):
    def call(self, x):
        return jax_fn(x)

x = MyLayer()(x)

During handling of the above exception, another exception occurred:
self = <keras.ops.core_test.CoreOpsCallsTests testMethod=test_cond_output_spec_mismatch_in_tuple_elements>
def test_cond_output_spec_mismatch_in_tuple_elements(self):
    cond_op = core.Cond()

    def true_fn():
        return (
            KerasTensor(shape=(3, 3), dtype="float32"),
            KerasTensor(shape=(4, 4), dtype="float32"),
        )

    def false_fn():
        return (
            KerasTensor(shape=(3, 3), dtype="float32"),
            # Mismatched tuple
            KerasTensor(shape=(2, 2), dtype="float32"),
        )

    pred = KerasTensor(shape=(), dtype="bool")
    expected_regex = "should return outputs of the same kind"

  with self.assertRaisesRegex(ValueError, expected_regex):

E       AssertionError: "should return outputs of the same kind" does not match "A KerasTensor cannot be used as input to a JAX function. A KerasTensor is a symbolic placeholder for a shape and dtype, used when constructing Keras Functional models or Keras Functions. You can only use it as input to a Keras layer or a Keras operation (from the namespaces keras.layers and keras.operations). You are likely doing something like:
E
E       E       x = Input(...) E       ... E       jax_fn(x)  # Invalid. E
E
E       What you should do instead is wrap jax_fn in a layer:
E
E       E       class MyLayer(Layer): E           def call(self, x): E               return jax_fn(x) E        E       x = MyLayer()(x) E
E       "
keras/ops/core_test.py:998: AssertionError
_______________________________________________________________________________________________________________________ CoreOpsCallsTests.test_cond_output_spec_mismatch_true_fn_tuple_false_fn_not_tuple _______________________________________________________________________________________________________________________
jax.errors.SimplifiedTraceback: For simplicity, JAX has removed its internal frames from the traceback of the following exception. Set JAX_TRACEBACK_FILTERING=off to include these.
The above exception was the direct cause of the following exception:
jax.errors.SimplifiedTraceback: For simplicity, JAX has removed its internal frames from the traceback of the following exception. Set JAX_TRACEBACK_FILTERING=off to include these.
The above exception was the direct cause of the following exception:
ValueError: A KerasTensor cannot be used as input to a JAX function. A KerasTensor is a symbolic placeholder for a shape and dtype, used when constructing Keras Functional models or Keras Functions. You can only use it as input to a Keras layer or a Keras operation (from the namespaces keras.layers and keras.operations). You are likely doing something like:
x = Input(...)
...
jax_fn(x)  # Invalid.

What you should do instead is wrap jax_fn in a layer:
class MyLayer(Layer):
    def call(self, x):
        return jax_fn(x)

x = MyLayer()(x)

During handling of the above exception, another exception occurred:
self = <keras.ops.core_test.CoreOpsCallsTests testMethod=test_cond_output_spec_mismatch_true_fn_tuple_false_fn_not_tuple>
def test_cond_output_spec_mismatch_true_fn_tuple_false_fn_not_tuple(self):
    cond_op = core.Cond()

    def true_fn():
        return (
            KerasTensor(shape=(3, 3), dtype="float32"),
            KerasTensor(shape=(4, 4), dtype="float32"),
        )

    def false_fn():
        # not a tuple to match the true_fn
        return {
            "a": KerasTensor(shape=(3, 3), dtype="float32"),
            "b": KerasTensor(shape=(4, 4), dtype="float32"),
        }

    pred = KerasTensor(shape=(), dtype="bool")
    expected_regex = "should return outputs of the same kind"

  with self.assertRaisesRegex(ValueError, expected_regex):

E       AssertionError: "should return outputs of the same kind" does not match "A KerasTensor cannot be used as input to a JAX function. A KerasTensor is a symbolic placeholder for a shape and dtype, used when constructing Keras Functional models or Keras Functions. You can only use it as input to a Keras layer or a Keras operation (from the namespaces keras.layers and keras.operations). You are likely doing something like:
E
E       E       x = Input(...) E       ... E       jax_fn(x)  # Invalid. E
E
E       What you should do instead is wrap jax_fn in a layer:
E
E       E       class MyLayer(Layer): E           def call(self, x): E               return jax_fn(x) E        E       x = MyLayer()(x) E
E       "
keras/ops/core_test.py:1024: AssertionError
==================================================================================================================================================== short test summary info ====================================================================================================================================================
FAILED keras/ops/core_test.py::CoreOpsCallsTests::test_cond_output_spec_mismatch_in_tuple_elements - AssertionError: "should return outputs of the same kind" does not match "A KerasTensor cannot be used as input to a JAX function. A KerasTensor is a symbolic placeholder for a shape and dtype, used when constructing Keras Functional models or Keras Functions. You can only use it as input to a Keras layer or a Keras...
FAILED keras/ops/core_test.py::CoreOpsCallsTests::test_cond_output_spec_mismatch_true_fn_tuple_false_fn_not_tuple - AssertionError: "should return outputs of the same kind" does not match "A KerasTensor cannot be used as input to a JAX function. A KerasTensor is a symbolic placeholder for a shape and dtype, used when constructing Keras Functional models or Keras Functions. You can only use it as input to a Keras layer or a Keras...
================================================================================================================================================= 2 failed, 95 passed in 5.53s =========================================================================


Inventorize ouroboros-consensus symbols used by clients

In the effort of defining a more formal interface for the ouroboros-consensus package it it useful to understand which symbols are actually used by users of the package. This issue is a meta-issue to keep track of which for which users this has been inventorized.

[ ] db-analyser
[ ] Galois tutorials
[ ] node
[ ] db-sync
[ ] hydra

See several occurences of as Consensus in cardano-node, eg:
import qualified Ouroboros.Consensus.Byron.Ledger as Consensus
import qualified Ouroboros.Consensus.Cardano.Block as Consensus
import qualified Ouroboros.Consensus.Cardano.ByronHFC as Consensus (ByronBlockHFC)
import           Ouroboros.Consensus.HardFork.Combinator as Consensus (EraIndex (..), eraIndexSucc,
                   eraIndexZero)
import qualified Ouroboros.Consensus.Protocol.Praos as Consensus
import qualified Ouroboros.Consensus.Protocol.TPraos as Consensus
import qualified Ouroboros.Consensus.Shelley.HFEras as Consensus
import qualified Ouroboros.Consensus.Shelley.ShelleyHFC as Consensus

from module Cardano.Api.Modes.


Prefer `customize-set-variable' for customizing packages

I wondered why this would be preferred, and came across this nice stackoverflow discussion.

Yep, this is definitely the right approach, it's just a little annoying to have to call such a long function name to set variables.  Let's do the right thing here and use it, thanks @jeffbowman!