add similarity threshold for hnsw

Add similarity threshold for KnnVectorQuery. If that threshold is specified, only documents with similarity score greater than or equal to the threshold value will be added to the result.

how common is this use-case? This change is fairly invasive... adding method signatures to e.g. LeafReader.

i'm also concerned about committing to providing this API for the future. eventually, we'll move away from HNSW to something that actually scales, and it may not support this thresholding?

how common is this use-case? This change is fairly invasive... adding method signatures to e.g. LeafReader.

It is difficult for me to judge in general, but I face with such tasks quite often. Here is the start of the discussion about that  functionality: https://lists.apache.org/list?dev@lucene.apache.org:lte=1M:HNSW search with threshold.
The typical case: suppose we have a recommendation system. We have a huge collection of items and we want to give user recommendation of items which would be suitable for him/her. Ranking models, which can provide high quality, can be quite complex and resource consuming. So we can build several layers of models. The most complex ranking model is the last level. Each previous level are easier than previous one, and it selects candidates for the next level. If we have good embeddings for items, then we can build the first layer in the following way. We can calculate similarity between some embedding of user and embeddings of items and compare the similarity value with threshold. If the similarity value exceeds threshold then we consider such item as candidate for next level. This approach can be very productive in practice. But complexity is a problem in this approach. Because we have to calculate cosine between user' embedding and all embeddings of items.
I think the proposed functionality would help with this kind of tasks.

i'm also concerned about committing to providing this API for the future. eventually, we'll move away from HNSW to something that actually scales, and it may not support this thresholding?

It is a very good point, thanks! But I can't come up with idea of popular ann algorithm in which it would be impossible to support that functionality. Nevertheless, concerning about that, it may be worth to move this functionality in another class, not KnnVectorQuery... But I'm not sure. It seems that it can make api too complicated.

If we use only post-filter in KnnVectorQuery, then we have to set k = Integer.MAX_VALUE (or another very big value) and calculate similarity with all vectors. So the complexity would be O(n).
I had another idea: we can check the similarity while we are traversing the graph. If similarity is less then threshold, we can get rid of this node and stop to explore this path. In that case we set k = Integer.MAX_VALUE, set similarityThreshold value, but the time complexity would be between O(log(n)) and O(n) (it depends on number of vectors with similarity greater than threshold). I hope that it allow us to solve task like the ones I described above (https://github.com/apache/lucene/pull/11946#issuecomment-1318924833) more efficiently.

If we use only post-filter in KnnVectorQuery, then we have to set k = Integer.MAX_VALUE (or another very big value) and calculate similarity with all vectors. So the complexity would be O(n).

No, we don't have to do that. We can simply post-filter. Think of it like this - we want K matches with score > T. So we get the K top-scoring matches. If any have score less than T, we drop them. It's the same result as if we did the thresholding while collecting.

But we don't know K - that's the problem. The task which I want to solve sounds like this: find documents with similarity >= 0.76 (for example). We don't have the number of such documents in advance.

OK, can we start by providing post-filter? I think this will be a more
common use case. I want to find the best docs, and ensure that none of them
are terrible. It is less disruptive, doesn't require changes to the codec.
Can you explain why you want the "find all docs with score > T"? That is
going to be a scary thing. What if someone asks for T==0? Then the
computation and memory requirements are unbounded. I don't think this is a
search use case - it's some kind of analytics thing that you should do in
Spark or some kind of off-line computation system.
On Fri, Nov 18, 2022 at 2:01 PM Alexey Gorlenko @.***>
wrote:

But we don't know K - that's the problem. The task which I want to solve
sounds like this: find documents with similarity >= 0.76 (for example). We
don't have the number of such documents in advance.
—
Reply to this email directly, view it on GitHub
https://github.com/apache/lucene/pull/11946#issuecomment-1320416549, or
unsubscribe
https://github.com/notifications/unsubscribe-auth/AAHHUQIDSRWIV4ZCGO375ITWI7HB7ANCNFSM6AAAAAASDGO4FQ
.
You are receiving this because you commented.Message ID:
@.***>

Can you explain why you want the "find all docs with score > T"?

For example, we want to give user only suitable for him/her documents. We have a custom scorer (based on ml-model, for example) which calculates a score. Next, we compare that score with the threshold to determine whether this document is suitable for the user or not. But usually that scorer too computationally complex to compute it for every document which passed filters. In order to deal with this problem we can build another model, much simpler. That new model would select candidates for the heavy model. One of the basic approaches for building that light model is knn: we have a vector (embedding) for user or users' query and we have a vector (embedding) for every document. So we just find the nearest documents and pass them to the heavy scorer. But we don't know K in that case, we know only the threshold. This threshold is defined during the development of the ranking model. Such tasks naturally arise in recommendation systems and ranking  as well.

That is going to be a scary thing. What if someone asks for T==0? Then the computation and memory requirements are unbounded.

The same result can be achieved by setting K = 1000...00. I think we don't add the new vulnerability here. Maybe it is worth to add a warning to the documentation (for K and for similarityThreshold).
If you still think that it's a bad idea to support such functionality in Lucene, I will rewrite this PR to the post-filter case. But I think it can be useful for people who add ML-ranking in search systems based on Lucene.

@msokolov looking forward to your decision

Hi, I was taking time off for a few days, back now. Have you tried post-filtering? When we added support for existing pre-filter (accepting Query) there was some extensive testing to determine when it is better to pre-filter vs post-filter. The answer is not always so clear-cut. If the filter is not so restrictive (matches > 90% of docs, say), you are probably better off post-filtering. If it is highly restrictive then prefiltering will likely offer performance gains. If it's possible in your application to precompute the filter and cache it for some time (eg in a user session), then you can use the existing prefiltering operation by creating a BitSet matching docs that meet the threshold criterion.
So I would suggest trying a large K and post-filtering and see if you get reasonable results?
In short, I think this is too risky/trappy for most users. Using a highly-restrictive scoring threshold is really not the same as using a large K from a user perspective since the cost is predictable with K (not very data dependent), but not so with the score (as a user I don't know what the score distribution is, a priori), so providing a score threshold is definitely more dangerous/trappy.

What I have in mind would be to implement entirely in the
KnnVectorQuery. Since results are sorted by score, they can easily be
post-filtered there: no need to implement anything at the codec layer
I think. Am I missing something?

is there any possibility other than adding all these LeafReader/IndexReader signatures?
Currently I'm -1 to the change from an API persective. It is too invasive.

I've done some experiments with real data and it seems that it really doesn't work as I expected. If number of docs which exceed threshold is significant (for example 20% or more of previously accepted docs), the query works slow and it is better to perform exact search. And unfortunately it happens quite often.
So I agree with @msokolov and I think I should rewrite this PR with post-filtering approach. It allows us to preserve predictable performance and not modify LeafReader/IndexReader (just filter TopDocs in KnnVectorQuery).

I've rewritten this PR with post-filtering approach, sorry for the delay.

It seems there are conflicts due to a recent refactor of this query - would you mind merging from main and resolving those please?

It seems there are conflicts due to a recent refactor of this query - would you mind merging from main and resolving those please?

Done

I agree that this kind of thing is valuable in KNN. KNN is unique when compared to sparse retrieval as you always retrieve K results (unless using a restrictive filter). In some cases, the K retrieved can be irrelevant, especially in the case when a filter is used. That said, it seems better fit outside of Lucene.

this isn't any different than BM25 search.
Nothing special about KNN.
Still no justification to filter by score / scores as percentages.

Ok, it seems that I should close this PR, shouldn't I? It is not difficult to implement such functionality in the code which uses lucene if it is necessary (in contrast to the first implementation).
@msokolov what do you think?
In any case, I thank you all for the discussion.

There is the new vector similarity query that handles this overall request.
@agorlenko https://github.com/apache/lucene/pull/12679 do you think this covers your use case?
I am thinking we should close this PR in deference to that query.

It is not exactly the same, but I don't mind )

closed, because of the similar functionality


packaging: allow a global config.json file that can turn off the root redirector

Once we turn on the root redirector, we'll probably face some detractors who don't like us using a mountpoint in /.  I think it makes sense to give them a way to turn it off if they don't want it.
Since the root redirector runs as root, we can't just use a config value in the normal user-based config.json, since there might be multiple users on the machine all using keybase.  So the idea here is to allow the user to optionally create a file at /etc/keybase/config.json as root, and populate it thusly:
{
  "disable-root-redirector": true
}

Then, we'll post instructions in the docs on how to stop the root redirector and delete /keybase, and when things get restarted, we won't try to start it up again.
To make that happen, this PR:

Adds new flags to keybase config get for:

"d, direct": read a value directly from the config file, rather than relying on the Keybase service (and without launching a service, if one isn't already running).
"b, bare": read a string from the config file without putting quotes around it.  (Not really needed for this PR, but helpful to avoid some sed-hacking in the scripts.)

Check the root config file in run_keybase and the Linux post-installer, and not starting the redirector if needed.
Check the root config file in OSX before starting the redirector.

cc: @maxtaco for the keybase config get changes.
Issue: KBFS-2798i

thanks the refactor, the changes to keybase config are good with me...

What about people who simply do not want a SUID binary installed on their machine at all, whether it is automatically invoked by a user-run command or not?
Alternative workflow: have a root-run service run via e.g. systemd, which the user can choose to enable if they feel comfortable with using this particular root-run service.
(Yes, from a distro packaging perspective we can simply refuse to package this component at all.)

yes I would love a Keybase that didn't require root.

@eli-schwartz I thought about a systemd service, but it seemed like there would be a couple problems:

We'd have to supply something else for distros without systemd. In the case of keybase service, that something else is just firing off a background process and hoping it never crashes, so it's not like this is necessarily a lot of extra effort. However if the non-systemd workaround requires an SUID binary, then we haven't solved the original problem.
We'd have to extend our installation steps to include systemctl enable (doable but annoying), and then (more difficult) figure out what to do for existing users who update to this new version. There would be a very strong incentive for us to arrange to call systemctl enable automatically somehow for those users. That feels like Really Sketchy behavior to me, much more so than making something SUID.

For non-systemd distributions, you would provide an OpenRC or Upstart or SysVinit service instead, I would assume. The service would run as root, and the binary would not be SUID at all -- services that need to run as root may be unfortunate, but they're also something that system administrators can turn off, you cannot turn off a SUID binary though!

Surely that would be done as part of the packaging post-installation. You don't need to call systemctl enable on behalf of random users, only on behalf of the system itself. Although e.g. for Arch Linux packaging you would simply not run the post_install.sh at all, since currently it does nothing that isn't better done in the package itself (in the case of packaging the helper binary itself, I don't know about other distributions but Arch's packaging format most certainly supports the SUID bit), or via the pre-existing system hooks (gtk-update-icon-cache), or not done at all (we have a policy against deleting users and groups automatically, and a February 2015 todo list which fixed all official packages that did this).
Also, Arch Linux has a general policy of not automatically configuring services for the user, if the user wants to run the included keybase redirector they can start the service themselves.

@eli-schwartz: The goals for the Keybase-provided packages are 1) we don't want to run any background services until some non-root user on the machine runs run_keybase, and 2) that user shouldn't have to enter their sudo password as part of that command.  That means we can't just easily kick off root services using things like systemd or upstart as a regular user, without similar suid binaries (as far as I know).
Thus, we're going with the simple suid binary in our official packages.  We're pairing that with a way for root to disable it from running.  I'd be happy to also add something that deleted the suid binary from the system in post-install, if it was disabled by root from running, but I'm not sure if that will wreak havoc with package managers to have binaries disappear like that.  So for now we're concentrating on making the binary as limited and safe as we can.
Other package distributors are welcome to include or exclude the root redirector as desired.

(Small update: this now removes the suid bit from the redirector during post-install if root redirection is turned off.)


License: Switch to Apache 2.0

Decided that the AGPL license is going to limit adoption too much, as it will basically
force any plugin that uses this library to also be OSS.
So we decided to switch to Apache 2.0

FYI added minor release label.


typo: ApplicationParamater -> ApplicationParameter

@nschonni : Thanks for your contribution! The author, @novino, has been notified to review your proposed change.

Verified corrections to parameter reference.


Updated copyright year.

Updated the copyright year from 2020 to 2020-2021 in the documentation .
Fixed issue #170 .
Minor update.

Sure thing @Samyak2

@Samyak2 changes pushed as requested by you.

Codecov Report

Merging #170 (b5af6aa) into master (fb00a62) will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master     #170   +/-   ##
=======================================
  Coverage   87.81%   87.81%
=======================================
  Files           5        5
  Lines         476      476
  Branches       88       88
=======================================
  Hits          418      418
  Misses         35       35
  Partials       23       23

Flag
Coverage Δ

unittests
87.81% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

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 fb00a62...b5af6aa. Read the comment docs.


Forgot your password on paid hosting

Hello
I forgot my password on paid hosting
How can I reset it ?
Thanks

Please, contact<EMAIL_ADDRESS>


custom meter does not support usage

Describe the bug
I think there is a small bug on a meter from type custom. I get the error: has invalid keys: usage I cannot add the usage pv or grid for this meter.
Steps to reproduce
add a meter from type custom
Configuration details
- type: custom
  usage: pv
  name: Huawei-SUN2000
  power:
    source: http
    uri: http://homeassistant.local:8123/api/states/sensor.inverter_active_power
    auth:
      type: bearer
      password: <some_token>
    jq: .state
  energy:
    source: http
    uri: http://homeassistant.local:8123/api/states/sensor.inverter_total_yield
    auth:
      type: bearer
      password: <some token>
    jq: .state

Log details
[main  ] INFO 2024/07/15 15:37:05 listening at :7070
[main  ] FATAL 2024/07/15 15:37:05 cannot create meter 'Huawei-SUN2000': cannot create meter type 'custom': decoding failed due to the following error(s):

'' has invalid keys: usage
[main  ] FATAL 2024/07/15 15:37:05 will attempt restart in: 15m0s

What type of operating system are you running?
Linux
Version
evcc version 0.128.2

usage is only used within templates to adjust the correct scale or to use the correct register
For what purpose a meter is used, is configured within the site (or loadpoint)

@VolkerK62 thanks for the explanation. On the docs examples it is always referenced on the meters.

but only with templates, not at the custom meter https://docs.evcc.io/docs/devices/meters#manuell


Added Disqus Support

I don't know if you want to pull this into yours but I think I'd share it anyway :)

I thought about it, but since my inclination wasn't to use it myself I didn't for now. I see you commented out the caching though, was that temporary and you just forgot to take ou the comments? Disqus should work even with the caching.

Sorry about the sloppy commit - I commented those lines out for testing purposes and forgot to undo before checking in. I've not really used git or github that much so it's all really new to me.

this looks good and makes sense. There's one part of it I'm going to tighten up a little bit. I'll try and do it this weekend and give you a look.

I just added a commit that adds support for disqus. It also adds a config item to enable/disable caching. Let me know how you make out with it.


[Style]  update link , with good animations

What's the style idea?
We need to improve icons , time to jumble , improve hover effect
Checklist

[X] I have checked the existing issues.
[X] I follow Contributing Guidelines of this project.
[ ] I am a IWOC'24 contributor.
[ ] I am a JWOC'24 contributor.
[ ] I am a SWOC'24 contributor.

Code of Conduct

[X] I agree to follow this project's "Code of Conduct".

I would like to focus on enhancing the navbar, hover effects, grids, and other elements of our website.I have strong web development skills and experience in creating websites. Please assign me to this project.


Update links in readthedocs

Update links in readthedocs

doc is updated to: https://sys-bio.github.io/SBMLDiagrams/


        )
E       RuntimeError: Signalling support is unavailable because the blinker library is not installed.

/usr/local/lib/python3.6/site-packages/flask/signals.py:39: RuntimeError

It can be fixed if blinker is manually installed, please add blinker to sentry-sdk dependencies.

Please don't add blinker to sentry-sdk dependencies, since not everyone is using a flask app.
The question from my POV is why Sentry assumes that if Flask is present, it should load its integration? And second, since flask itself gracefully falls back if blinker is absent, shouldn't sentry do the same?

Starting with Flask 0.6, there is integrated support for signalling in Flask. This support is provided by the excellent blinker library and will gracefully fall back if it is not available.

The docs tell you to install with the Flask extra which will pull blinker in https://docs.sentry.io/platforms/python/guides/flask/
Blinker is required for basic functionality, there is no possible fallback other than to stop working entirely.

I am also having this error with the upgrade. While I have Flask installed I am not using the flask plugin with sentry (I use sentry just with starlette.

Ah I see, 19.0. @HazAT @lobsterkatie can you deal with this? We should attempt to import blinker and raise DidNotEnable if it is not importable, inside of the flask integration.

using auto_enabling_integrations=False in sentry_sdk.init works for me.
Example:
sentry_sdk.init(settings.SENTRY_DSN, auto_enabling_integrations=False)

Please, set auto_enabling_integrations to False by default

I'm getting this error with Django integration.
import sentry_sdk
from sentry_sdk.integrations.django import DjangoIntegration

sentry_sdk.init(
    integrations=[DjangoIntegration()],
    traces_sample_rate=1.0,
    send_default_pii=True
)

File "/opt/project/aton-backend/settings/local.py", line 5, in <module>
  sentry_sdk.init(
File "/usr/local/lib/python3.8/site-packages/sentry_sdk/hub.py", line 106, in _init
  client = Client(*args, **kwargs)  # type: ignore
File "/usr/local/lib/python3.8/site-packages/sentry_sdk/client.py", line 86, in __init__
  self._init_impl()
File "/usr/local/lib/python3.8/site-packages/sentry_sdk/client.py", line 128, in _init_impl
  self.integrations = setup_integrations(
File "/usr/local/lib/python3.8/site-packages/sentry_sdk/integrations/__init__.py", line 119, in setup_integrations
  type(integration).setup_once()
File "/usr/local/lib/python3.8/site-packages/sentry_sdk/integrations/flask.py", line 75, in setup_once
  request_started.connect(_request_started)
File "/usr/local/lib/python3.8/site-packages/flask/signals.py", line 38, in _fail
  raise RuntimeError(
RuntimeError: Signalling support is unavailable because the blinker library is not installed.

Setting auto_enabling_integrations to False solved the issue.

Fix is otw

Hey, sorry for the delay. 0.19.1 is out which fixes this issue.

Thanks @untitaker for the fix!

pip install --upgrade 'sentry-sdk[flask]' worked for me.

pip install --upgrade 'sentry-sdk[flask]' worked for me.

What's the equivalent of this for a pyproject.toml file?  Or must I add 2 packages there: sentry-sdk and blinker?


map(function(index, elem){})

When i use this package in ST3, i typed map and  return this:
map(function(index, elem) {
    return something;
})

It's always confusing me，could you fix it?

I don't understand what you mean. What do you propose?

Shouldn't it be:
map(function(elem, index) {
    return something;
})

When i typed map，the arguments now is index, elem，and i think it will confusing users.

It is strange.
The map definition in this plugin is: map(${0:callback}) and it is located here: https://github.com/pichillilorenzo/JavaScript-Completions/blob/master/JavaScript Completions/Array%2C String and RegExp/array-string-and-regexp.sublime-completions
Maybe it is one of your installed plugins that have this problem.

Thanks for helping.


update-stackscripts doesn't do anything

Yep. I should do something about that.

Maybe convert this to a terraform project that manages the stacscripts?


Channels Chart

The chart could be confusing because the # of devices row is not a very adaptable metric and this will result in strange outcomes. It appears to be using the number of desktop devices, since the 500 in the EA column is the minimum for an EA. But someone looking at this chart, which is, after all about servers, not desktops, may conclude that the hybrid use benefit isn't economical in an EA until you have 500 Servers. And it would really weird for someone to buy 250 Windows Servers with SA in Open. For example, I could buy fewer than 10 Windows server licenses with SA in the MPSA if I paid LSA all up front to get the 500 points I need for an A discount. Your number of 250 would nearly get me a C discount in the MPSA, way below the open price.

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 64ecde30-6c97-9426-978c-df2f018a88b8
Version Independent ID: 46c06b02-9514-d7e4-90a1-3f2c8cae481f
Content: Azure Hybrid Benefit for Windows Server
Content Source: WindowsServerDocs/get-started/azure-hybrid-benefit.md
Service: unspecified
GitHub Login: @greg-lindsay
Microsoft Alias: greg-lindsay

Other tickets originating from the same page:

Possible outdated content
#4713 opened on Aug 10 by jks05c
Logic Error in License Calculator Spreadsheet
#4447 opened on Jun 4 by waclark57
Example 3 is incorrect
#4415 opened on May 28 by Tsirke
Wrong values
#3981 opened on Mar 5 by MiguelCaldasMS
Updates to Server Versions
#3926 opened on Feb 20 by jantoney

Could be useful to know, in case any of those other tickets touch upon closely related material in the doc page.

#please-close


add ExtraVanillaItems and ExtraVanillaBlocks to the Creative Inventory

For vanilla blocks/items is unnecessary as they are all tracked by creativeitems.json file and when the content is derealized if the item was implemented correctly, it will be added to the CreativeInventory automatically.
https://github.com/pmmp/PocketMine-MP/blob/5cc1068cd43264d3363295eb8d6901e02f467897/src/inventory/CreativeInventory.php#L47

It wasn't like that in December 2023


sonos driver: added support for removing next/previous track buttons depending on source

added support for removing next/previous track buttons when playing

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.

@dljsjr FYI - I am closing this, please feel free to review/reopen if you see best.


Missing ApplicationOptions in type definitions for 5.x

In the 4.x Pixi.js types all of the options in PIXI.Application constructor were an interface called PIXI.ApplicationOptions, now it's just an anonymous object defined inline in the function. I believe the reason is that previously the type definitions were assembled manually, while now it's generated from the code itself.
I also understand that Pixi is planning to migrate to typescript, either fully or partially (at least looking at the commit history). Migration Application to TypeScript would essentially solve the problem, and is something I'd be both capable and willing to do.
Is there a plan to migrate Pixi code to TS? If so, are there any standards you have established so far towards how this is happening, and are outsiders welcome to help with that endeavor? Otherwise, any plans to expose Application constructor options as an interface?

Great idea and thanks for being willing to help. PR welcome! Right now we are trying to convert display and core packages to TS. Once we are over that hump, things like app get much easier.


ansible-lint - add changed_when true

tasks/main.yml:50: no-changed-when: Commands should not change things if nothing needs doing.

add changed_when: true so the command will report changed if the when
condition is true and the command is run
Signed-off-by: Rich Megginson<EMAIL_ADDRESS>

[citest]


chore: 🔧 Adjust components build so it exports all components automatically

Pull Request
📖 Description
As we already forgot multiple times to export the created components in src/synergy.ts and our framework wrappers rely on the exports in this file, we have to make sure the exports are added without manual resolution. This PR adds the changes in the build that makes this possible.
🎫 Issues
Closes #146
👩💻 Reviewer Notes
The main changes where done in packages/components/scripts/jobs/createExports.js.
📑 Test Plan

Check out this branch
Make sure dependencies are up to date (via pnpm i -r)
Go to packages/components and add a component to scripts/config.js
Vendor the new component
Issue a new build via pnpm build
Expection: The file src/synergy.ts should include a new export that is named after the newly included component.

✅ Checklist

[x] I have tested my changes manually.
[ ] I have added automatic tests for my changes (unit- and visual regression tests).
[x] I have updated the project documentation to reflect my changes (e.g. CHANGELOG, Storybook, ...).
[x] I have made sure to follow the projects coding and contribution guides.
[x] I have made sure that the bundle size has changed appropriately.
[x] I have validated that there are no accessibility errors.
[ ] I have used design tokens instead of fix css values

I think we have to be careful to not make too much stuff automatically and create weird dependencies between the scripts. This change would lead us to create a build before we can test new components in Storybook.
I would propose a different way: Let's make synergy.ts the single source of truth and let vendorism.js parse it for components. If a same-named component exists in Shoelace: Vendor it, if not: Do nothing.

I think we have to be careful to not make too much stuff automatically

We have two new components that did not export in synergy.ts, which leads to errors when creating wrappers and stuff.

and create weird dependencies between the scripts, which could get out of control.
This change would lead us to create a build before we can test new components in Storybook.

It would not, as the components used in Storybook are directly referenced.
But the build has a different purpose.

I would propose a different way: Let's make synergy.ts the single source of truth and let vendorism.js parse it for components. If a same-named component exists in Shoelace: Vendor it, if not: Do nothing.

In this case, you would need to have to parse the whole file server side (which may be a problem as it uses ts and I would not want to write a regex which is very error prone). If you add the export to the file in the first place, it will break the file because it will not be able to find the components you just want to add in the first place, which may be more error prone than generating it as part of the build alltogether.

Understand, thanks for clarification. Let's give it a try how it feels.
I believe this will become even more important then:
https://github.com/SickDesignSystem/synergy/issues/149

Still, I have the feeling, that there is to much stuff hidden. The config.js in scripts influences which elements are finally available, which should be vendored etc.
Maybe this is part of a new ticket, but I would love to omit this file completely to have clearer purposes and would like to have more something like this:

vendorism.js decides which files and components have to be vendored
build.js graps all files from /events and all folder names from /components and creates the correct output files from it.

What do you think?

Otherwise people could manually add a components folder with a new component... and it still isn't exported, but shows up in Storybook.

Still, I have the feeling, that there is to much stuff hidden. The config.js in scripts influences which elements are finally available, which should be vendored etc.
Maybe this is part of a new ticket, but I would love to omit this file completely to have clearer purposes and would like to have more something like this:

vendorism.js decides which files and components have to be vendored
build.js graps all files from /events and all folder names from /components and creates the correct output files from it.

What do you think?

We will definitively have to adjust this. However I think it is more tricky than we initially tought:

Vendorism is just there to vendor the SL components
When vendoring a component, it will draw the dependencies in, too
We agreed at not exporting the dependencies and it has to be a manual step to add them to the external visible bundle, even when they are available internally.
Because of this, I am not able to just read the component contents currently:
There where dependencies (like syn-spinner) that we chose to not export. So, should I create the wrappers for them reguardless?
The current decision was to use the config file as single source of truth to make sure vendorism and wrapper builds stay in sync.
However: This will not work anymore when we create our first own component. So we have to adjust it somehow.

Proposal:

We let vendorism do its thing alone for components and events.
We always export all components in the components package synergy.ts
We always export all components in angular/react.

This would definitively have to be a new ticket for sure.

Sounds good. Could you create a ticket? :)

Sounds good. Could you create a ticket? :)

Done at #156. Please have a look and change accordingly if something is unclear in the new ticket.


Create Countinuous Integration with Github actions for Build

Add continuous integration for Physionix repository to be built. Usecases:-

Build on Push
Build on Pull Requests
(Optional) Add testing

Issue of installing pigpio is present, fix please


Couldn't place "//.well-known/acme-challenge" file in domain

Hi everyone,
I followed every steps to install the Let's Encrypt Gandi plugin. Its works, until the installation on the server. I don't seem to have authentication issues (I can connect to my sftp through my OS X terminal and the ssh -vvv user@gpaas command shows that my SSH keys are accepted). But, I still have the same error (with or without the sudo command) :
Connected to sftp.dc2.gpaas.net.
sftp> exit
Permission denied (publickey,password).
Connection closed
Permission denied (publickey,password).
Connection closed
Permission denied (publickey,password).
Connection closed
Couldn't place file in domain: vhosts/example/htdocs//.well-known/acme-challenge

Is there anyone who would have faced the same problem and have a solution?
Thanks a lot ! :)

Hi @papposilene
On OS X, in /etc/sudoers section  Defaults specification , I added this line
Defaults env_keep+=SSH_AUTH_SOCK
Then comand run without error with current user.
Hope it helps !

Unfortunately this line is already present in my file /etc/sudoers. :(

Same problem here, although I ran the script from a Gandi Debian vm:
Connected to sftp.dc0.gpaas.net.
sftp> exit
Permission denied (publickey,password).
Couldn't read packet: Connection reset by peer
Permission denied (publickey,password).
Couldn't read packet: Connection reset by peer
Permission denied (publickey,password).
Couldn't read packet: Connection reset by peer
Couldn't place file in domain: vhosts/xxx/htdocs//.well-known/acme-challenge

I finally had to bypass the Gandi plugin and to generate the certificate in manual mode (letsencrypt certonly --manual).

Created a pull request which solved this by removing the '-b', '-' options. Might just be the extra empty dash option but didn't test that scenario after the plugin worked correctly.

Hello ! I did update SHS.py file, but I get the same results  :
`sftp ['sftp', '-o', 'UserKnownHostsFile=/Users/Stan/.ssh/known_hosts',
Connected to sftp.dc2.gpaas.net.
Permission denied (publickey,password).
Connection closed
Cleaning up challenges
Permission denied (publickey,password).
Connection closed
Permission denied (publickey,password).
Connection closed
Couldn't place file in domain: vhosts/wearefrauds.com/htdocs//.well-known/acme-challenge`


[material-ui][Autocomplete] Popover does not resize when disableCloseOnSelect is true for multiple variant when contained in a flex container

Search keywords
Autocomplete
Latest version

[X] I have tested the latest version

Steps to reproduce
Link to live example: (required)
https://stackblitz.com/edit/react-ezyicp?file=Demo.tsx
Steps:

add disableCloseOnSelect=true
put Autocomplete in a flex container to make it grow based on the multi selected items
add multiple and renderTags prop

https://github.com/mui/material-ui/assets/103969650/adfe41d1-7885-43e8-b0bd-48a963ecbaab
Current behavior
The popover width is not resizing to the width of the input when adding and removing items
Expected behavior
The popover should resize when the input is resized when adding and removing items
Context
I am trying to put a Autocomplete in a flex container
Your environment

npx @mui/envinfo
  Don't forget to mention which browser you used.
  Output from `npx @mui/envinfo` goes here.

I think the problem is that the flex container not recalculating the size of the popover when the selection is done you can bypass this by triggering a rerender if you want
const [forceRender, setForceRender] = React.useState(false);
React.useEffect(() => {
setForceRender((prev) => !prev);
}, [value]);

I believe what @fahdmk mentioned is the solution. I don't think how we can fix that on our side.


running pygrambank in new repos

For the ELAR-Glottobank grants we're getting the grantees to submit their completed glottobank data sheets (numeralbank, lexibank and grambank) in a new repos, over here: https://github.com/glottobank/ELDP-glottobank/wiki/ELAR-archving
I'd like to run pygrambank commands on them before incorproration. Is what I need to do just copy over gb.bib to that repos and the rest of pygrambank commands will work well? and maybe also gb20.txt?

The repos should look like the one we use for the pygrambank test suite: https://github.com/grambank/pygrambank/tree/master/tests/repos - minus "archived_discussions" and "obsolete_sheets".

Okay. But things don't need to be in a dir called "original_sheets" right?
Is it okay if I add you to the repos and you can see what it's like?

Sheets must be in original_sheets, see https://github.com/grambank/pygrambank/blob/5da12be65bc80cb5900df630584c195fbfdaaf28/src/pygrambank/api.py#L21-L23

pygrambank also only accepts Grambank sheets, so the lexical data would need to be in a separate directory.

yes, I placed them in different dirs already

Does this look right now?

Seems ok:
$ grambank --repos grambank/ stats
<grambank repository grambank at grambank>

Sheets with BOM:

1 sheets with 245 rows

Most common columns:
Feature_ID 1
Value 1
Source 1
Comment 1
Contributed_Datapoints 1

Cool, nice! So once the grantees send in sheets, we'll put them in that dir and run pygrambank sheets on PRs like we do elsewhere. Sweet!

ad 2.) Here's what csvstat says:
14. "Value "

	Type of data:          Number
	Contains null values:  False
	Unique values:         4
	Smallest value:        0,
	Largest value:         3,
	Sum:                   72,
	Mean:                  0,369
	Median:                0,
	StDev:                 0,553
	Most common values:    0, (128x)
	                       1, (64x)
	                       3, (2x)
	                       2, (1x)

i.e. the "Value" column is actually called Value  - with trailing space.

ad 3.) The Contribution column is currently required, too. Should that be set to a default - say Coder?

ad 2.) Here's what csvstat says:
14. "Value "

	Type of data:          Number
	Contains null values:  False
	Unique values:         4
	Smallest value:        0,
	Largest value:         3,
	Sum:                   72,
	Mean:                  0,369
	Median:                0,
	StDev:                 0,553
	Most common values:    0, (128x)
	                       1, (64x)
	                       3, (2x)
	                       2, (1x)

i.e. the "Value" column is actually called Value  - with trailing space.

Ah, that had passed me by. Updating now.

ad 3.) The Contribution column is currently required, too. Should that be set to a default - say Coder?

You mean Contributed_Datapoints? That exists for both sheets in: https://github.com/glottobank/ELDP-glottobank/tree/SGI_submission_yurakare/grambank/original_sheets

i gave pygrambank describe the other sheet which is there and which I know is correct, and then it struggled with the column "round" in the contributors.md. Can it please be told to ignore any columns that aren't what it needs?

This is still a factor. Can pygrambank describe/sheet please ignore all columns in contributors.md that it doesn't need?

(Grambank) skirgard@lingd08 ELDP-glottobank % grambank describe grambank/original_sheets/JLA_yura1255.tsv

Path:
grambank/original_sheets/JLA_yura1255.tsv

Check:

Dimensions:
195 rows
17 columns

Values:
0	128
1	 64
3	  2
2	  1
	195

Sources:
Gijn 2006:	196
Gipper (corpus analysis/field notes 2006:	193
Gipper 2011:	  3
Gipper 2017:	  2
Gijn 2004:	  2
Gipper & Yap 2019:	  2
Von Holten 1877:	  2
Gipper 2022:	  1

Coders:
Traceback (most recent call last):
  File "/Users/skirgard/py_venvs/Grambank/bin/grambank", line 11, in <module>
    load_entry_point('pygrambank', 'console_scripts', 'grambank')()
  File "/Users/skirgard/Git/grambank/pygrambank/src/pygrambank/__main__.py", line 36, in main
    return args.main(args) or 0
  File "/Users/skirgard/Git/grambank/pygrambank/src/pygrambank/commands/describe.py", line 45, in run
    describe(args, sheet)
  File "/Users/skirgard/Git/grambank/pygrambank/src/pygrambank/commands/describe.py", line 92, in describe
    coders_by_id = {c.id: c.name for c in args.repos.contributors}
  File "/Users/skirgard/Git/grambank/pygrambank/src/pygrambank/api.py", line 38, in contributors
    return Contributors.from_md(self.repos / 'CONTRIBUTORS.md')
  File "/Users/skirgard/Git/grambank/pygrambank/src/pygrambank/contributors.py", line 67, in from_md
    rows = [Contributor(**dict(zip([norm_header(c) for c in header], row))) for row in rows]
  File "/Users/skirgard/Git/grambank/pygrambank/src/pygrambank/contributors.py", line 67, in <listcomp>
    rows = [Contributor(**dict(zip([norm_header(c) for c in header], row))) for row in rows]
TypeError: __init__() got an unexpected keyword argument 'round'

I thought that the only thing pygrambank would want with contributors.md is that the coder abbreviation in the filename or in the column "Contributed_Datapoint"-column exists. I don't think any of the functions need to check anything beyond that?

I closed, because I implemented a fix, here https://github.com/grambank/pygrambank/commit/e40d073ebbc91cab08a373b11ace951bea59d719
Do you need a proper release of pygrambank or can you update your clone of pygrambank?

I thought that the only thing pygrambank would want with contributors.md is that the coder abbreviation in the filename or in the column "Contributed_Datapoint"-column exists. I don't think any of the functions need to check anything beyond that?

pygrambank validates the content in CONTRIBUTORS.md. The way this is done distinguishes between required and optional columns. So far, Contribution was among the required columns - simply because it's there in glottobank/Grambank and always filled in. My question was whether we should assume a default Contribution role of Coder for CONTRIBUTORS.md in the ELDP repos.

I thought that the only thing pygrambank would want with contributors.md is that the coder abbreviation in the filename or in the column "Contributed_Datapoint"-column exists. I don't think any of the functions need to check anything beyond that?

pygrambank validates the content in CONTRIBUTORS.md. The way this is done distinguishes between required and optional columns. So far, Contribution was among the required columns - simply because it's there in glottobank/Grambank and always filled in. My question was whether we should assume a default Contribution role of Coder for CONTRIBUTORS.md in the ELDP repos.

Okay, thank you I understand better now.
I don't think that Contribution should be required for either the grambank repos or the ELDP-glottobank repos for pygrambank. I think that the only required column should be id.

I don't think that Contribution should be required for either the grambank repos or the ELDP-glottobank repos for pygrambank. I think that the only required column should be id.

I'd say a contributor without a name is a bit weird. Also, the other columns are there in both cases. So unless we'd want pygrambank to become a generic dataset curation tool, I don't see the point in relaxing the requirements further.

I don't think that Contribution should be required for either the grambank repos or the ELDP-glottobank repos for pygrambank. I think that the only required column should be id.

I'd say a contributor without a name is a bit weird.

That seems like a check of contributors.md and not a check of the validity of the sheet, but okay. Make Last name and First name required then.

Also, the other columns are there in both cases. So unless we'd want pygrambank to become a generic dataset curation tool, I don't see the point in relaxing the requirements further.

Contribution is not there for the ELDP-Glottobank contributors.md and I'm not sure I'd want to add things needlessly.
I want pygrambank to be a tool that checks the validity of grambank coding sheets. I don't understand what you're after.

Okay, thanks.

All good, works well now. Thanks.


Check if region is an object

I was testing the new version out on a project and encountered an error where the region was returning null.
In the docs it says that the region attribute for action can be nullable.
https://developers.digitalocean.com/documentation/v2/#image-actions
This pull request checks if the value is an object so it can be send into the constructor of the Region class.

Any idea when this wil be merged or fixed otherwise?

Thank you @marcvdm ! Sorry for the delay..


Expand ReadMe.md

Flesh out the project introduction in the README.
For inspo, see:

https://github.com/noopkat/avrgirl-arduino/blob/master/README.md

Consider the README section on:

https://guides.github.com/features/wikis/

Also consider:
Parquet
Parquet will solve your problem with _____ by providing _____.
Example
Here's how to use it:
import project
# Get your stuff done
project.do_stuff()

Features

Feature 1
Feature 2

Installation
Install Parquet by:
1) something something
2) something something

Contribute

Issue Tracker: github.com/mxashlynn/ParquetClassLibrary/issues/39
Source Code: github.com/mxashlynn/ParquetClassLibrary/

Support
If you are having issues, please let us know.
You can contact the maintainers at ______.
License
The project is licensed under and according to the ________ license.


[Request] misc improvements

Implement https://github.com/alextd/RimWorld-EnhancementPack/blob/master/Source/PawnTableHighlightSelected.cs

Highlight on tattered apparel.

Column for all hediffs. List á la current job, or icon with ToolTip á la Needs Treatment column.

Better (alphabetical) sorting. Job report string, title, mental state, whatever else.

Self-tending


ENYO-6019 Fixed ExpandableList with selected array

Checklist

[x] I have read and understand the contribution guide

[x] A CHANGELOG entry is included

[x] At least one test case is included for this feature or bug fix

[x] Documentation was added or is not needed

[ ] This is an API breaking change

Issue Resolved / Feature Added
It was possible for an ExpandableList to error if an array of selected items was passed to
a non-multi-select.
Resolution
Refactor the logic to deal better with selected as array.
Additional Considerations
Added tests
Links
ENYO-6019
Comments

I think we should fix this in 2.x. WDYT?

I think it would be fine to fix in either, so I wouldn't mind rebasing to develop.

I rebased to develop


Remove polyfill from hours plugin

This removes the Polyfill javascript library from our hours plugin, and updates the Sentry plugin which also could have loaded the script which is now subject to a supply chain attack.
Confirmation that this works should be that you no longer see the network loading a script from the compromised domain.
Developer
Stylesheets

[x] Any theme or plugin whose stylesheets have changed has had its version
string incremented.

Secrets

[ ] All new secrets have been added to Pantheon tiers
[ ] Relevant secrets have been updated in Github Actions
[ ] All new secrets documented in README
[x] No secrets are affected

Documentation

[ ] Project documentation has been updated
[x] No documentation changes are needed

Accessibility

[ ] ANDI or Wave has been run in accordance to
our guide and
all issues introduced by these changes have been resolved or opened as new
issues (link to those issues in the Pull Request details above)

Stakeholder approval

[ ] Stakeholder approval has been confirmed
[x] Stakeholder approval is not needed

Dependencies
YES dependencies are updated
Code Reviewer
https://mitlibraries.atlassian.net/browse/PW-99

[ ] The commit message is clear and follows our guidelines
(not just this pull request message)
[ ] The changes have been verified
[ ] The documentation has been updated or is unnecessary
[ ] New dependencies are appropriate or there were no changes

I'm putting this into code review now to expedite the process, but am also checking with Darcy about whether anyone in UX wants to take a look at this before it merges. I've checked the hours displays that we're using, and confirmed that they're all still loading information:

Main hours grid
Network homepage
Location page
Distinctive Collections sidebar


Response class based on PSR

Symfony https://github.com/symfony/symfony/blob/6.4/src/Symfony/Component/HttpFoundation/Response.php


Getting S/N and Port #

Hi wasilukm,
I have a HoyMiles install and I have been playing with the ModBus TCP directly.
I figured out how to get the S/N and Port numbers from the data.
Here is how I did it.
You need values 0-3, convert each of them to binary. Zero pad so they are length 16.
So now you will have 4 values that look like this:<PHONE_NUMBER>010001
Concatenate them together so you have something like this:
0000110000010001000011000001000100001100000100010000110000010001
Next split them into chunks of 4 so you have:
[0] = 0000
[1] = 1100
[2] = 0001
[3] = 0001
. . .
[15] = 0001
Convert chunks 2-13 to decimal and you will have the S/N, convert chunk 15 to decimal and you will have the port #.
Please let me know if you have any questions, I hope this helps so you can include S/N + Port in a future version.

Hi,
The interface already offers S/N and port number: https://wasilukm.github.io/hoymiles_modbus/api/#hoymiles_modbus.datatypes.InverterData
Is there anything specific missing?


Release vehicle-registry-api v0.5.1

It makes the driver_name relation one-to-one
There was a bug that allowed drivers have many names, while the relation is one-to-one, a driver has one name or even none is also possible, but never more than one name.

:warning: Please install the  to ensure uploads and comments are reliably processed by Codecov.
Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:
:exclamation: Your organization needs to install the Codecov GitHub app to enable full functionality.


WX08ZM mosquito repellent

Got following error in Home assistant after trying to switch on/off Mosquito repellent:
Logger: custom_components.xiaomi_miot_raw
Source: custom_components/xiaomi_miot_raw/init.py:502
Integration: Xiaomi MIoT (documentation, issues)
First occurred: 19:48:55 (8 occurrences)
Last logged: 20:09:39
Control Отпугиватель насекомых by cloud failed: [{'did': 'blt.3.16mdrp93sec00', 'siid': 4, 'piid': 1, 'code': -704030023}]
Integration of repellent was successful but controlling via cloud failed...
Any solutions to control it via MI Home account on cloud basis only Or device will work only with Xiaomi Gateway?
THX in advance

Not this component !
Goto https://github.com/ha0y/xiaomi_miot_raw


Add to Cart is not working on the home page

@MaherJendoubi , It redirect to project detail page?

@thiennn Yes for the three first products in the last products section.

Because the there products have options (colors). Users have to choose a specific option. It's is complex to do that on the product thumbnail view, so I redirect to the detail view.
I am thinking about changing the text of the button to "See options" for this case.

I see. "See options" makes sense but customers prefer  to see details before buying each product. Have a look here : http://www.cdiscount.com/ or here : https://www.aliexpress.com/

In some cases, when we know clearly about the product, we can add to cart without go to the product details

Even if we know the product, we should make sure to read the details. No one garantee that details is not updated.

This just an option, people can go to the detail very easily if they want to :)
Like: https://www.amazon.com/gp/goldbox/


Circular dependence with jekyll:2.5.3

Hi, we are using jekyll:2.5.3 on some legacy doc static site and we encountered a circular dependence while installing jekyll:2.5.3
This is due to this file changed yesterday:
https://github.com/jekyll/jekyll-coffeescript/blob/b2322d7020905eefff1eb795bd1cf20c2c5ab161/Gemfile#L6
If we could evaluate this if statement to false I think this will fix the circular dependence issue, but it will always evaluate to true because ruby can't eval string to false in if statement.
Would you mind to enhance this code so we could evaluate it to false some how?
Maybe check for "false" string and skip the gem command.

That change affects only the development of jekyll-coffeescript not its usage.
Is the legacy site available as a public repository?

Thanks for the quick reply, the repo is public and can be viewed here:
https://github.com/bigpandaio/docs.bigpanda.io
I'm new to ruby so I might be wrong, but the build worked 2 days ago and it fails now.

Actually, you're right. Jekyll 2.5.3 has jekyll-coffeescript as a runtime_dependency which now has jekyll as a runtime_dependency as well.
I'll push a new version a.s.a.p.

Thanks!

I've pushed a new version. This should be resolved now.
Please check and close.
Thank you for reporting.

Thanks, the issue has been fixed.


Compiling error MacOS 11.2 M1 MacBook Pro

I tried installing SimpleElastix as mentioned here, but I am having the following error:
In file included from /Users/vickyparmar/collection/git/simelastix/build/ITK/Modules/Core/Common/src/itkFloatingPointExceptions.cxx:127:
/Users/vickyparmar/collection/git/simelastix/build/ITK/Modules/Core/Common/src/itkFloatingPointExceptions_unix.cxx:140:3: error:
      use of undeclared identifier 'itk_feenableexcept'
  itk_feenableexcept(FE_DIVBYZERO);
  ^
/Users/vickyparmar/collection/git/simelastix/build/ITK/Modules/Core/Common/src/itkFloatingPointExceptions_unix.cxx:141:3: error:
      use of undeclared identifier 'itk_feenableexcept'
  itk_feenableexcept(FE_INVALID);
  ^
/Users/vickyparmar/collection/git/simelastix/build/ITK/Modules/Core/Common/src/itkFloatingPointExceptions_unix.cxx:162:3: error:
      use of undeclared identifier 'itk_fedisableexcept'
  itk_fedisableexcept(FE_DIVBYZERO);
  ^
/Users/vickyparmar/collection/git/simelastix/build/ITK/Modules/Core/Common/src/itkFloatingPointExceptions_unix.cxx:163:3: error:
      use of undeclared identifier 'itk_fedisableexcept'
  itk_fedisableexcept(FE_INVALID);
  ^
4 errors generated.
make[5]: *** [Modules/Core/Common/src/CMakeFiles/ITKCommon.dir/itkFloatingPointExceptions.cxx.o] Error 1
make[4]: *** [Modules/Core/Common/src/CMakeFiles/ITKCommon.dir/all] Error 2
make[3]: *** [all] Error 2
make[2]: *** [ITK-prefix/src/ITK-stamp/ITK-build] Error 2
make[1]: *** [CMakeFiles/ITK.dir/all] Error 2
make: *** [all] Error 2

Can anyone help me?

I've been having the same problem too.

Same problem here!
Any thoughts?

Same problem on my Mac mini M1. Any solutions?

I've changed to the develop branch today, and I was able to compile OK! Natively on my Mac mini M1.
I have tested my registration code and it worked.
Potentially important note:
Only installed the Python wrap:
WRAP_PYTHON:BOOL=ON
All other wraps OFF.
I have also turned OFF testing:
BUILD_TESTING:BOOL=OFF

Although compilation succeeds, for me only 3D registration works, while 4D with any combination of SimpleITK pixeltypes always results in (e.g. for pixeltype sitk.sitkFloat32):
sitk::ERROR: ElastixImageFilter does not support the combination of 4-dimensional 32-bit float fixed image and a 4-dimensional 32-bit float moving image.
I tried adding:
  -DELASTIX_IMAGE_DIMENSIONS:STRING=2;3;4
to
~/SimpleElastix/SuperBuild/External_Elastix.cmake
and adding
set( SITK_MAX_DIMENSION ${SimpleITK_MAX_DIMENSION_DEFAULT} )
to
~/SimpleElastix/Code/Common/CMakeLists.txt
without success, although compilation completes without errors.
I'm on a M1 MacBook pro running macOS 12.3.1 and using miniforge python 3.9
Can anyone confirm 4D registration not working on the develop branch? Any ideas how to restore this functionality?

I've changed to the develop branch today, and I was able to compile OK! Natively on my Mac mini M1.
I have tested my registration code and it worked.
Potentially important note:
Only installed the Python wrap: WRAP_PYTHON:BOOL=ON All other wraps OFF.
I have also turned OFF testing: BUILD_TESTING:BOOL=OFF

This helped me! Although I had to process more errors after that for Python wrapping. https://github.com/SuperElastix/SimpleElastix/issues/438#issuecomment-1221599390


[Complex Text Layouts] Implement TextServer interface.

Part of https://github.com/godotengine/godot-proposals/issues/1180 implementation.
~Depends on #40999~
TODO:

TextServer interface. ✔

TextServer Fallback implementation (based on existing Font implementations) ✔

Dynamic font data ✔
Bitmap font data ✔

TextServer ICU + HarfBuzz implementation. ✔

Dynamic font data ✔
Bitmap font data ✔

TextServer documentation ✔
TextServer unit test + test project ✔

Font class refactoring ✔
Simple controls (everything except Label, LineEdit, TextEdit, RichTextLabel) TS base text ✔
Interface mirroring ✔
Add BiDi override for path LineEdits and CodeEdit ✔
Complex controls ✔

Label ✔
LineEdit ✔
TextEdit + CodeEdit ✔
RichTextLabel (probably will be done as the separate PR)

Editor tools for Font substitution config and TS data export ✔
Update controls / font documentation ✔
Bump MessageQuery size to 2048 KB to handle additional LineEdit / TextEdit popup submenus (superseded by #42296) ✔

Breaking changes:

BitmapFont, DynamicFont and DyamicFontData are removed and replaced with universal Font + FontData, actual implementation is handled by TextServer.
Font size and outline parameters are no longer font properties and can be passed to draw functions directly, theme properties added accordingly.
Font and CanvasItem API changes:

Added draw_multiline_string function.
Added additional parameters to all draw functions.
New font fallback API similar to DynamicFont fallback (single list of FontData).

Major Font API changes:
Old:
	Size2 get_string_size(const String &p_string) const;
	void draw(RID p_canvas_item, const Point2 &p_pos, const String &p_text, const Color &p_modulate = Color(1, 1, 1), int p_clip_w = -1, const Color &p_outline_modulate = Color(1, 1, 1)) const;

	void draw_halign(RID p_canvas_item, const Point2 &p_pos, HAlign p_align, float p_width, const String &p_text, const Color &p_modulate = Color(1, 1, 1), const Color &p_outline_modulate = Color(1, 1, 1)) const;

	Size2 get_wordwrap_string_size(const String &p_string, float p_width) const;

	Size2 get_char_size(char32_t p_char, char32_t p_next = 0) const;
	float draw_char(RID p_canvas_item, const Point2 &p_pos, char32_t p_char, char32_t p_next = 0, const Color &p_modulate = Color(1, 1, 1), bool p_outline = false) const;

New:
	Size2 get_string_size(const String &p_text, int p_size = -1) const;
	void draw_string(RID p_canvas_item, const Point2 &p_pos, const String &p_text, HAlign p_align = HALIGN_LEFT, float p_width = -1, int p_size = -1, const Color &p_modulate = Color(1, 1, 1), int p_outline_size = 0, const Color &p_outline_modulate = Color(1, 1, 1, 0), uint8_t p_flags = TextServer::JUSTIFICATION_KASHIDA | TextServer::JUSTIFICATION_WORD_BOUND) const;

	Size2 get_multiline_string_size(const String &p_text, float p_width = -1, int p_size = -1, uint8_t p_flags = TextServer::BREAK_MANDATORY | TextServer::BREAK_WORD_BOUND) const;
	void draw_multiline_string(RID p_canvas_item, const Point2 &p_pos, const String &p_text, HAlign p_align = HALIGN_LEFT, float p_width = -1, int p_max_lines = -1, int p_size = -1, const Color &p_modulate = Color(1, 1, 1), int p_outline_size = 0, const Color &p_outline_modulate = Color(1, 1, 1, 0), uint8_t p_flags = TextServer::BREAK_MANDATORY | TextServer::BREAK_WORD_BOUND | TextServer::JUSTIFICATION_KASHIDA | TextServer::JUSTIFICATION_WORD_BOUND) const;

	Size2 get_char_size(char32_t p_char, char32_t p_next = 0, int p_size = -1) const;
	float draw_char(RID p_canvas_item, const Point2 &p_pos, char32_t p_char, char32_t p_next = 0, int p_size = -1, const Color &p_modulate = Color(1, 1, 1), int p_outline_size = 0, const Color &p_outline_modulate = Color(1, 1, 1, 0)) const;

TextServer interface structure:

Test projects:
GDNative plugin template: https://github.com/bruvzg/gdnative_text_server_template
Current status:

Backend: Working.
Controls: All controls except RichTextLabel and containers support mirroring and use TexeServer base text rendering.

Input:
Input of the characters outside BMP (codes > 0xFFFF, emoji, rare/ancient scripts, e.t.c.) is fully tested on macOS, Windows 10, Android and Wine under macOS.
Should work on Linux (input is received as UTF-8 string), but might need some more testing with different input methods.
On iOS, it should work as well (input is received as UTF-16 string), but I can't test it since I do not have any iOS device, and simulator currently do not have all Metal features supported to run Godot.

Screenshots - click to expand

Fixed and related issues / PRs:
Previous implementations: #21791, #10546
Fixes #40688
Fixes #28371
Fixes #3081
Fixes #9961
Fixes #982

Everything seems to be working now (except for the RichTextLabel, which will be done as separate PR), but probably I have missed some glitches.
List of changes in the PR:

Added TextServerManager (control loading, enumeration and switching for TextServers).
Added TextServer interface (handles fonts, text rendering and line breaking and input related stuff).

Handles:

BiDi and Text shaping.
Inline object/image embedding to the text flow.
Line/word breaking.
Fitting text to width and aligning to tab stops.
Input carets, selections and hit testing.

Implementations:

TextServerFallback module (simple text server without BiDi and shaping support).
TextServerAdvanced module (ICU/HarfBuzz/Graphite based text server), note: after godot-cpp catch up with the master, it can be converted to GDNative library with minimal changes (changing header names, build config, and adding wrapper from the demo repository - https://github.com/bruvzg/gdnative_text_server_template) and we'll need something like https://github.com/godotengine/godot-proposals/issues/831 to used it as library with the editor and project manager.

ICU optional dictionary data (cut down to 4 MB) can be embedded into the executable (default for tools build) or loaded for PCK (default for templates).

GDNative interface for text servers.

Font

Font management moved to the TextServer to better handle shaping and font substitution.
BitmapFont and DynamicFont replaced with generic Font+FontData
Text can be drawn using LRU cached font->draw_string/font->get_string_size calls or by using TextLine / TextParagraph objects.

Font size and outline color/size moved from base font to separate theme and draw functions options.
Added interface mirroring for:

Child order in the containers.
Internal elements of complex controls (tree, itemlist, etc)
Added some mirrored icons and styles.
Interface mirroring can be overridden for each control, inherited or determined based on locale.

Modified Windows and macOS input to handle UTF-16 input (multiple codepoints for one character).
All controls modified to use new text rendering, line/word breaking and have additional properties added to control font features and text layout.
BiDi override for handling specially structured text (URIs, paths, source code) added to TextEdit, Label and LineEdit (with optional used defined callback support for custom overrides).
Added editor plugins for:

Font substitution control.
ICU data export.

Screenshots

I'll write a more detailed description with the use case samples for all changes in the PR in the next few days.

Changes to the Node API:
Control changes:

Layout mirroring control (in Control and Window):
is_layout_rtl(), layout_direction property and NOTIFICATION_LAYOUT_DIRECTION_CHANGED
Layout mirrors the order of the controls in the container and internal components of the control, manually places controls are not moved, but additional layout dependent anchor presets are added PRESET_xxx_BEGIN/PRESET_xxx_END in addition to PRESET_xxx_LEFT/PRESET_xxx_RIGHT:

(top to bottom: LTR, RTL)

For the testing purpose, layout can be force to RTL be setting display/window/force_right_to_left_layout_direction project setting.
layout_direction values:

LAYOUT_DIRECTION_INHERITED - use layout direction of the parent control, or locale for root control (default).
LAYOUT_DIRECTION_LOCALE - use locale to determine direction, to work with editor Translation::get_tool_locale() function is added (identical to get_loacle() for running projects).
TEXT_DIRECTION_LTR and TEXT_DIRECTION_RTL - force specific direction, useful if you need fixed layout (e.g. buttons with directional arrows).

Text layout control (only for controls with text, or their elements, e.g. TreeItem ):
text_direction property -  controls base direction (default direction for not strongly directional text).

TEXT_DIRECTION_INHERITED - use the same direction as layout direction (default).
TEXT_DIRECTION_AUTO - use locale and text content (first strongly directional character) to determine direction.
TEXT_DIRECTION_LTR and TEXT_DIRECTION_RTL - force specific default direction.

(Base direction can affect order of the elements in the mixed text: top-to-bottom Auto, LTR, RTL).

In most cases base direction should be the same as the language of text (default behavior).

structured_text_bidi_override property and _structured_text_parser callback (only for controls with text):
BiDi algorithm is designed for natural text and in can't correctly display strings with a special structure (e.g URI, file path, regular expressions or source code):

For example path for this directory structure will be displayed incorrectly (top string), structured text override add a callback function to split text into segments, then BiDi is applied to each of them individually (bottom string).

language property (only for controls with text):
Overrides locale for the control, and also controls language specific line breaking rules and shaping:

ot_features property (only for controls with text):
Controls OpenType font features for the control: e.g. ligature types to use, number styles, small caps etc. (list of tags: https://docs.microsoft.com/en-us/typography/opentype/spec/featuretags)

Control and Window functions add_theme_font_size_override, get_theme_font_size, has_theme_font_size, has_theme_font_size_override and Theme functions: clear_font_size, get_font_size, get_font_size_list, has_font_size, set_font_size
Control font size in the similar manner to existing function for the Font, value -1 is used as unset/default (same as null for the font).

Label: outline_size and shadow_outline_size - used to set outline size for the label.

LineEdit and TextEdit: caret_mid_grapheme disabled by default.
If enabled caret can be moved to each individual component of grapheme (e.g. diacritics and base character), if not moves over the whole grapheme.
(e.g in this case pressing delete will only remove diacritic, but pressing ← will jump over the full combined character)

(with mid caret enabled ← will jump to the position in between diacritic and the base character, caret will be displayed in the middle of combined character).

I have encountered apps using both, but default behavior seems to be most common, not sure mid caret mode is useful at all.

LineEdit and TextEdit: display_control - if enabled control characters will be visible in the text (as special symbols if available in the font or hex codes if not), useful for more complex BiDi layout control. Also, popup menu to insert some of them as well as joiner characters to control line breaking added to the LineEdit and TextEdit.

Font and FontData:
Actual font implementation is move to text server, Font and FontData classes are used for easy access to TS font API.
FontData:
Single font file (or memory buffer), handles both dynamic and bitmap fonts:
Additional language and script overrides can be set for each font data, these are used for font substitution in following cases:

for the languages that are using the same script but different style: e.g. different Arabic languages use Naskh and Nastaliq styles and different fonts but it's the same script (writing system), used by editor to handle Urdu and Persian locales.
script overrides can be useful for, rare languages and big font sets to select proper font faster (TrueType fonts have flags only for some scripts, if not selected manually shaped will try every font in the list instead of going directly to the correct one).
script overrides can be used for the fonts with incomplete character sets, e.g many Latin fonts have limited set of Greek characters for scientific text, that is not enough for real Greek text, but such font will have flag for Greek support. In this case you may want to add override to avoid using it for Greek and add separate font.

Note: Shaped will try all fonts until all character are found, overrides only affect search order.
Note: there was distance_field_hint property in the BitmapFont that seems to be not implemented, I have preserved it as is in new FontData as is.
FontData have base_size used to load on font creation and which is used for draw function with p_size == -1, but it is capable to load and use any font size on demand.
Font:
Font "fallback"/substitution uses single list of the FontData in the similar manner DynamicFont was, but there's no primary one since order is determined by language/script support and overrides.
draw/draw_haling Function merged to the single one, and multiline draw function was added, each of of this have size function with the same API and use LRU cache to reuse shaped data.
Additionally, core/math/math_defs.h:: HALIGN_FILL is added for use of haligned draw.
CanvasItem text draw functions are changed in the same way.
If font size is set to -1, base_size is used.
	Size2 get_string_size(const String &p_text, int p_size = -1) const;
	Size2 get_multiline_string_size(const String &p_text, float p_width = -1, int p_size = -1, uint8_t p_flags = TextServer::BREAK_MANDATORY | TextServer::BREAK_WORD_BOUND) const;

	void draw_string(RID p_canvas_item, const Point2 &p_pos, const String &p_text, HAlign p_align = HALIGN_LEFT, float p_width = -1, int p_size = -1, const Color &p_modulate = Color(1, 1, 1), int p_outline_size = 0, const Color &p_outline_modulate = Color(1, 1, 1, 0), uint8_t p_flags = TextServer::JUSTIFICATION_KASHIDA | TextServer::JUSTIFICATION_WORD_BOUND) const;
	void draw_multiline_string(RID p_canvas_item, const Point2 &p_pos, const String &p_text, HAlign p_align = HALIGN_LEFT, float p_width = -1, int p_max_lines = -1, int p_size = -1, const Color &p_modulate = Color(1, 1, 1), int p_outline_size = 0, const Color &p_outline_modulate = Color(1, 1, 1, 0), uint8_t p_flags = TextServer::BREAK_MANDATORY | TextServer::BREAK_WORD_BOUND | TextServer::JUSTIFICATION_KASHIDA | TextServer::JUSTIFICATION_WORD_BOUND) const;

Char draw functions are preserved (for drawing single chars, numbers and other simple stuff), these functions do not use TextServer shaping or BiDi and draw chars directly:
	Size2 get_char_size(char32_t p_char, char32_t p_next = 0, int p_size = -1) const;
	float draw_char(RID p_canvas_item, const Point2 &p_pos, char32_t p_char, char32_t p_next = 0, int p_size = -1, const Color &p_modulate = Color(1, 1, 1), int p_outline_size = 0, const Color &p_outline_modulate = Color(1, 1, 1, 0)) const;

Note: font functions like get_ascent/get_descent return average of the FontData ascents/descents, in the real text, character elements can be outside of font ascent and descent and these functions are only useful as rough estimate (e.g. for empty text field size).
For the static texts, local (control specific) cache, and more precise control TextLine and TextPragraph classes are added as the easy-to-use wrapper over TS API.

Layout mirrors the order of the controls in the container and internal components of the control, manually places controls are not moved, but additional layout dependent anchor presets are added PRESET_xxx_BEGIN/PRESET_xxx_END in addition to PRESET_xxx_LEFT/PRESET_xxx_RIGHT:

I am not really sure this is the best implementation. Those are presets used by the set_anchors_and_margins presets, which is basically a helper to call several set_anchor and set_margin. As this one is a helper, it kind of annoys me to allow RTL feature only in the preset setting function, but not in the normal calls to set_anchor and set_margin.
I would eventually suggest to instead add an argument to all those function, to switch a to a RTL layout. So for set_margin, set_margins_preset, set_anchor, set_anchors_preset, set_anchor_and_margin and set_anchors_and_margins_preset I would add an argument to switch to the opposite layout. We could also rename (or create an alias for compatibility reasons) the MARGIN_LEFT and MARGIN_RIGHT contants to MARGIN_HBEGIN and MARGIN_HEND (or somehow like that).

TextServer API:
TextServer provides the following APIs:
font functions for Font creation and control, a backend for FontData.
shaped_text functions for text buffers, a backend for Font draw/size functions and TextLine, TextPragraph:
Shaped text buffer APIs are lazy and won't do any processing until output data is requested, substring will reuse shaping results of the parent string until they are changed.
bool shaped_text_add_string(RID p_shaped, const String &p_text, const Vector<RID> &p_fonts, int p_size, const String &p_ot_features = "", const String &p_language = "");
bool shaped_text_add_object(RID p_shaped, Variant p_key, const Size2 &p_size, VAlign p_inline_align = VALIGN_CENTER);

Functions are used to fill up the buffer with segments of text and inlined objects (e.g. images and tables in RichTextLabel, object placement are affected by BiDi and sizes used during line breaking).
Text server provides functions for breaking text into lines and words (can use optionally use ICU data dictionaries for better breaking) and extraction of substrings (without reshaping).
Also, it has helper functions for input controls:

caret handling: when caret is in between the text segments with different directionally, it can be displayed in multiple locations in the same time (input will appear in the different places of text depending on the inputted text direction). As well as caret movement over grapheme (see. mid gr. caret above.)

getting selection rectangles, since selection in the bidirectional text is not always continues and characters can overlap, it's easier to get it in one go.
hit testing for caret placement.

Text buffer workflow looks as following:

Buffer is filled with text spans and objects (for the rest of processing it's just single "Object replacement character" with the specified size) and its properties are set. (at this stage no processing is done, input data is stored as is).

As soon as any output is requested (e.g. get_size, draw, or get_glyphs is called).

Text is split to the segments (runs) based on the script used (custom iterator based on ICU Unicode data functions).
ICU BiDi is used to detect directions and order of the text segments (in case structured text override is active it's used multiple times), BiDi context is saved to be reused with substrings.
Each segment of the text with the uniform script, direction, language and font (language and font are taken from the spans) is shaped (characters are transformed to the font specific glyphs and offset of the glyphs are determined) using HarfBuzz, in the order returned by BiDi. FontData order is determined based on script and language, shaper will try to use each one until all subruns are shaped successfully or there are no more fonts in the list. Failed characters are stored as is and later displayed as the hexcodes when string is drawn.
As the result all glyphs are stored to the vector in the order in which they are displayed.

As soon as any of the line breaking functions is called.

ICU break iterator is used to determine line and word breaks, in case there's no space character between the words, virtual zero width glyph is added, flags for breaks are added to existing glyphs.
Glyphs are sorted in the logical order (as their source characters were in the original string).
Sorted glyph widths and flags are used to determine line breaks.

As soon as fit to wight is called:

Word breaking is done if it was not called by line breaking.
Kashidas are detected in word, or added to the word in appropriate places.
First kashidas and then spaces are extended to fit the text.

(top-to-bottom: kashida and space justification, no justification, space justification)

Breaks and kashidas are reused for the substring alignment without repeating the step.

I would eventually suggest to instead add an argument to all those function, to switch a to a RTL layout.

This might be better solution indeed.

Note: Rebased and temporary re-added env.AppendUnique(CCFLAGS=["/utf-8"]) flag that was removed in #42634 (will rebase again after #42668).
There are multiple UTF-8 constant strings used in the tests and in the editor (cause tests to fail) and as well as in ICU (cause build failure).

Rebased and replace preset PRESET_xxx_LEFT/PRESET_xxx_RIGHT with full anchor/margin mirroring.

Demos for the main new features: https://github.com/godotengine/godot-demo-projects/pull/538

Rebased, added option to enable/disable coding ligatures (contextual alternates) in the built-in code editor.

Some docs for better understanding of what "base direction" is:
https://www.w3.org/International/articles/inline-bidi-markup/uba-basics
https://www.w3.org/International/questions/qa-bidi-unicode-controls
And Godot demo project with the same samples: W3.zip

Rebase after #42841, and added C# code samples to the new Font docs.

-- END OF BACKTRACE --

Here's my test project: Mahi.zip
This project was created when I last tested this PR in Oct 14, and there the Label seemed show Farsi fine without having to set a custom font, though I might be misrembering. Anyway, I copied DejaVuSans.ttf today to try to fix it with the current version of the PR (I don't know if it has necessary glyphs, but it was just a test) and got this crash when assigning it.

Edit: I'm not getting a crash on a brand new project when creating a Label with text ماهی سیاه کوچولو and assigning DejaVuSans.ttf as the font (which does have needed glyphs as I see now).

In that new test project, the root node was Control, so I tried to change it to Node2D as in my other project.
Then I tried to move the Label and got a new crash:
Dumping the backtrace. Please include this when reporting the bug on https://github.com/godotengine/godot/issues
[1] /lib64/libc.so.6(+0x3a3a0) [0x7f2f2bcbd3a0] (??:0)
[2] /lib64/libc.so.6(__libc_malloc+0xcc) [0x7f2f2bd08cbc] (??:0)
[3] Memory::alloc_static(unsigned long, bool) (/home/akien/Projects/godot/godot.git/core/os/memory.cpp:76 (discriminator 4))
[4] DynamicFontDataAdvanced::is_script_supported(unsigned int) const (/home/akien/Projects/godot/godot.git/modules/text_server_adv/dynamic_font_adv.cpp:569)
[5] TextServerAdvanced::font_is_script_supported(RID, String const&) const (/home/akien/Projects/godot/godot.git/modules/text_server_adv/text_server_adv.cpp:435 (discriminator 2))
[6] FontData::is_script_supported(String const&) const (/home/akien/Projects/godot/godot.git/scene/resources/font.cpp:357)
[7] EditorFontPreviewPlugin::generate_from_path(String const&, Vector2 const&) const (/home/akien/Projects/godot/godot.git/editor/plugins/editor_preview_plugins.cpp:866 (discriminator 1))
[8] EditorFontPreviewPlugin::generate(Ref<Resource> const&, Vector2 const&) const (/home/akien/Projects/godot/godot.git/editor/plugins/editor_preview_plugins.cpp:917)
[9] EditorResourcePreview::_generate_preview(Ref<ImageTexture>&, Ref<ImageTexture>&, EditorResourcePreview::QueueItem const&, String const&) (/home/akien/Projects/godot/godot.git/editor/editor_resource_preview.cpp:158 (discriminator 3))
[10] EditorResourcePreview::_thread() (/home/akien/Projects/godot/godot.git/editor/editor_resource_preview.cpp:238 (discriminator 3))
DisplayServer::_create_window 7 want rect: 702, 498, 516, 83 got rect 702, 498, 516, 83
early out of data
[11] EditorResourcePreview::_thread_func(void*) (/home/akien/Projects/godot/godot.git/editor/editor_resource_preview.cpp:100)
[12] ThreadPosix::thread_callback(void*) (/home/akien/Projects/godot/godot.git/drivers/unix/thread_posix.cpp:73)
[13] /lib64/libpthread.so.0(+0x8df0) [0x7f2f2c177df0] (??:0)
[14] /lib64/libc.so.6(clone+0x3f) [0x7f2f2bd790ef] (??:0)
-- END OF BACKTRACE --

re-assigned the DejaVuSans.ttf

Seems like something wrong with assigning file as resource directly, creating FontData instance and setting path works fine, assigning file as FontData crashes.

Rebased, crash should be fixed.

Thanks, I confirm that both crashes seem fixed (at least I couldn't reproduce them).
I found this issue where strings without translation (i.e. using the source English string) are still treated as RTL (see "...Install Android Build Template").

I guess this can be done as a second step once this is merged, but we'll likely need UX feedback from native speakers to see how to configure UI mirroring for different parts of the editor, as e.g. in the mostly English Editor Settings (as settings sections and names can't be localized), this can be confusing IMO:

But I'm just mentioning it for reference, I do think that it's better to handle this editor-specific configuration work in follow up PRs and keep this one focused on the feature implementation.

I found this issue where strings without translation (i.e. using the source English string) are still treated as RTL (see "...Install Android Build Template").

Bug in the PopupMenu, the default direction was set to Inherited instead of Auto.

but we'll likely need UX feedback from native speakers to see how to configure UI mirroring for different parts of the editor

Definitely need feedback from native speakers, I have no idea what's the best way to handle it (we can easily set some parts of the editor to be always LTR if it's desired).

as settings sections and names can't be localized

What's the reason for not translating editor/project settings and property names?

What's the reason for not translating editor/project settings and property names?

Mostly that those settings are generated directly from their identifier (some_section/some_setting becomes "Some Section / Some Settings"), and if we translate them we introduce some additional friction:

The visual setting name will no longer match the identifier.
It will also not match what is being described in the class reference.
When you add new settings yourself in Project Settings, you'd need to be able to provide both an identifier that can match existing categories if you wish so, and a translation for the sections and name substrings.

Initially it was considered simpler to just keep it automated and thus in English. We could reconsider this if we find ways to alleviate the issues, but it would require a significant rethinking of the UI to accommodate it without losing the flexibility of the current automated system.

Note: #28537 is still relevant for the new FontData.
When a font file is assigned as FontData directly (saved in the parent .tres as "ext_resource") none of the properties is saved, when new FontData is instanced first (saved as separate .tres or "sub_resource" in the parent .tres) properties are saved/loaded correctly.

Updated OpenType features (and variations in #43030) to use individual getters/setters instead of a single string property, and added editor inspector plugin to config it (readable names for standard features, only supported features shown).

Added RTL control to the demo (https://github.com/godotengine/godot-demo-projects/pull/538) to show setting OpenType features for the span of text.

Did another test of this PR today and got a crash again when assigning a FontData resource using Load for an in-use custom Font for a Label:

Added Label
Copied Test আমি খেলছি as text
Add custom font in inspector with "New Font"
Expand "Data", use the "Load" option to pick DejaVuSans.ttf
Crash

ERROR: Texture is not initialized.
   at: update (scene/resources/texture.cpp:178)

Thread 1 "godot-git" received signal SIGSEGV, Segmentation fault.
0x000000000535c11f in af_glyph_hints_reload (hints=0x7fffffff9040, outline=0x23690e78) at thirdparty/freetype/src/autofit/afhints.c:1042
1042                out_x += next->fx - point->fx;
(gdb) bt
#0  0x000000000535c11f in af_glyph_hints_reload (hints=0x7fffffff9040, outline=0x23690e78) at thirdparty/freetype/src/autofit/afhints.c:1042
#1  0x0000000005362dad in af_latin_hints_apply (glyph_index=72, hints=0x7fffffff9040, outline=0x23690e78, metrics=0x2514f3b0) at thirdparty/freetype/src/autofit/aflatin.c:3544
#2  0x0000000005363980 in af_loader_load_glyph (loader=0x7fffffff8fc0, module=0x237d9d30, face=0xac66a60, glyph_index=72, load_flags=75777) at thirdparty/freetype/src/autofit/afloader.c:425
#3  0x0000000005364e2b in af_autofitter_load_glyph (module=0x237d9d30, slot=0x2322c2f0, size=0x23854980, glyph_index=72, load_flags=65536) at thirdparty/freetype/src/autofit/afmodule.c:535
#4  0x00000000052c66b5 in FT_Load_Glyph (face=0xac66a60, glyph_index=72, load_flags=65536) at thirdparty/freetype/src/base/ftobjs.c:939
#5  0x00000000024df11c in DynamicFontDataAdvanced::update_glyph (this=0xabf46b0, p_size=16, p_index=72) at modules/text_server_adv/dynamic_font_adv.cpp:446
#6  0x00000000024de48a in DynamicFontDataAdvanced::draw_glyph (this=0xabf46b0, p_canvas=..., p_size=16, p_pos=..., p_index=72, p_color=...) at modules/text_server_adv/dynamic_font_adv.cpp:890
#7  0x00000000024ba1c5 in TextServerAdvanced::font_draw_glyph (this=0x91ea7b0, p_font=..., p_canvas=..., p_size=16, p_pos=..., p_index=72, p_color=...) at modules/text_server_adv/text_server_adv.cpp:774
#8  0x0000000003ed2737 in Label::_notification (this=0x238c5a50, p_what=30) at scene/gui/label.cpp:324
#9  0x0000000003db76c6 in Label::_notificationv (this=0x238c5a50, p_notification=30, p_reversed=false) at ./scene/gui/label.h:37
#10 0x00000000051a1d87 in Object::notification (this=0x238c5a50, p_notification=30, p_reversed=false) at core/object/object.cpp:793
#11 0x0000000003d07f37 in CanvasItem::_update_callback (this=0x238c5a50) at scene/main/canvas_item.cpp:434
#12 0x0000000002060735 in call_with_variant_args_helper<__UnexistingClass>(__UnexistingClass*, void (__UnexistingClass::*)(), Variant const**, Callable::CallError&, IndexSequence<>) (p_instance=0x238c5a50,
    p_method=(void (__UnexistingClass::*)(__UnexistingClass * const)) 0x3d07e48 <CanvasItem::_update_callback()>, p_args=0x7fffffffcae8, r_error=...) at ./core/variant/binder_common.h:212
#13 0x000000000205ffb8 in call_with_variant_args_dv<__UnexistingClass> (p_instance=0x238c5a50, p_method=(void (__UnexistingClass::*)(__UnexistingClass * const)) 0x3d07e48 <CanvasItem::_update_callback()>,
    p_args=0x0, p_argcount=0, r_error=..., default_values=...) at ./core/variant/binder_common.h:333
#14 0x000000000205f100 in MethodBindT<>::call(Object*, Variant const**, int, Callable::CallError&) (this=0x9f530e0, p_object=0x238c5a50, p_args=0x0, p_arg_count=0, r_error=...)
    at ./core/object/method_bind.h:287
#15 0x00000000051a1c6a in Object::call (this=0x238c5a50, p_method=..., p_args=0x0, p_argcount=0, r_error=...) at core/object/object.cpp:784
#16 0x0000000004f798d1 in Callable::call (this=0x7ffff596e698, p_arguments=0x0, p_argcount=0, r_return_value=..., r_call_error=...) at core/variant/callable.cpp:53
#17 0x000000000519aff4 in MessageQueue::_call_function (this=0x91d3e60, p_callable=..., p_args=0x7ffff596e6b0, p_argcount=0, p_show_error=false) at core/object/message_queue.cpp:258
#18 0x000000000519b30d in MessageQueue::flush (this=0x91d3e60) at core/object/message_queue.cpp:304
#19 0x0000000003d752a9 in SceneTree::iteration (this=0x9a3c170, p_time=0.0166666675) at scene/main/scene_tree.cpp:414
#20 0x0000000001f616fd in Main::iteration () at main/main.cpp:2472
#21 0x0000000001f2a1a8 in OS_LinuxBSD::run (this=0x7fffffffd150) at platform/linuxbsd/os_linuxbsd.cpp:261
#22 0x0000000001f27c07 in main (argc=2, argv=0x7fffffffd658) at platform/linuxbsd/godot_linuxbsd.cpp:58

Expand "Data", use the "Load" option to pick DejaVuSans.ttf
Crash

It was caused by EditorFontPreviewPlugin::generate_from_path drawing a sample string (and updating font glyphs) from the separate thread simultaneously to the Label update (seems like it's the same crash as the previous one, but I did not notice it was running in a thread first time).
Changed TS and Font to be _THREAD_SAFE_CLASS_ classes.

This is an incredible piece of work. I think its really good, probably best to leave it up to the community to use and give feedback on usage but I think it should be good enough. My main fear is backwards compatibility with older scenes, but I guess it should work?

We are discussing a way to do compatibility filters between older and newer Godot versions, so there might be a way I guess.

Here we go! A huge thank you for this amazing feature!

bool Control::is_layout_rtl() const {
	if (data.layout_dir == LAYOUT_DIRECTION_INHERITED) {
		Window *parent_window = Object::cast_to<Window>(get_parent());
		Control *parent_control = get_parent_control();
		if (parent_control) {
			return parent_control->is_layout_rtl();
		} else if (parent_window) {
			return parent_window->is_layout_rtl();
		} else {
			if (GLOBAL_GET("display/window/force_right_to_left_layout_direction")) {
				return true;
			}

It seems that this can fail in the project manager. GLOBAL_GET will fail in the project manager because there is no ProjectSettings singleton, and Control::is_layout_rtl is used in the project manager. So if data.layout_dir == LAYOUT_DIRECTION_INHERITED and neither parent_control or parent_window exist, the project manager will crash.
[1] /lib/x86_64-linux-gnu/libc.so.6(+0x46210) [0x7f92652e4210] (??:0)
[2] Object::get(StringName const&, bool*) const (/home/aaronfranke/workspace/godot/core/object/object.cpp:445)
[3] Control::is_layout_rtl() const (/home/aaronfranke/workspace/godot/scene/gui/control.cpp:442 (discriminator 4))
[4] BoxContainer::_resort() (/home/aaronfranke/workspace/godot/scene/gui/box_container.cpp:47 (discriminator 2))
[5] BoxContainer::set_alignment(BoxContainer::AlignMode) (/home/aaronfranke/workspace/godot/scene/gui/box_container.cpp:310)

So I noticed it just now, but why does this PR introduce theme font sizes instead of using theme constants for this purpose?

So I noticed it just now, but why does this PR introduce theme font sizes instead of using theme constants for this purpose?

Font size have some extra fallback logic for the Theme and global default values, constants use 0 when net set.


Enhance namespace deployment to include labels of enabled extensions

How to categorize this PR?

/area control-plane
/kind enhancement
What this PR does / why we need it:
This PR adds labels of enabled extensions to the shoot namespaces in the seed clusters. This will allow extensions that implement webhooks to easily define a label selector in order to trigger for the correct namespaces.
Which issue(s) this PR fixes:
Fixes #4460
Special notes for your reviewer:
Release note:

Extensions enabled through the shoot spec will be added as labels in the namespace for that specific shoot in the seed cluster. Labels will be as follow extensions.gardener.cloud/my-service: "true" where `my-service` is the type of the extension.

/invite @vpnachev

There is also the case when an extension is globally enabled (ref):

If spec.resources[].globallyEnabled is true then the Extension resources of the given type is created for every shoot cluster. Set to false, the Extension resource is only created if configured in the Shoot manifest.

Thanks for the hint @timuthy. I reworked the PR to include globally enabled extensions as well as take into consideration the spec.extensions[].disabled property.

@ialidzhikov @vpnachev I addressed your suggestions and comments. Can you please check if everything looks OK to you now? Let me know if any questions occur.


enhancement: Support optional measure_name in wr.timestream.write()

Enhancement

Adds new optional parameter measure_name to wr.timestream.write().
Column measure_name can be named to a string value that does not come from any measure column names.

This is intended for use with multi-measure records , but is available as an override for single (scalar) records as well.

Unit tests for both multi-measure and single record puts are included.

Relates

#1885

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

AWS CodeBuild CI Report

CodeBuild project: GitHubCodeBuild8756EF16-4rfo0GHQ0u9a
Commit ID: bab7bab855e0555f158f58b45b8df0633090b083
Result: FAILED
Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

AWS CodeBuild CI Report

CodeBuild project: GitHubCodeBuild8756EF16-4rfo0GHQ0u9a
Commit ID: 0083cd205edd360a23abb5a502da5360d2149713
Result: FAILED
Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

AWS CodeBuild CI Report

CodeBuild project: GitHubCodeBuild8756EF16-4rfo0GHQ0u9a
Commit ID: b30f497509b546a919f2aed1c41e802b789a6e43
Result: SUCCEEDED
Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

AWS CodeBuild CI Report

CodeBuild project: GitHubCodeBuild8756EF16-4rfo0GHQ0u9a
Commit ID: 0d9632b21254072028a8aabd8327f6f3d2e430e2
Result: FAILED
Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

AWS CodeBuild CI Report

CodeBuild project: GitHubCodeBuild8756EF16-4rfo0GHQ0u9a
Commit ID: 0d9632b21254072028a8aabd8327f6f3d2e430e2
Result: FAILED
Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository