[Weapon]s now sometimes end up misplaced relative to player when poiting left (casually happenned along with #26)

I have checked this and the shot is created with a collider, BUT when debugging it just deos not appear, and collisions are skipped.
(Exactly the same both for player collider shots and enemy particle shots)

A probable cause would be the "volatile out of screen" boolean.
The IsOnCamera method may be incorrect (in map won't work properly), thus the collider
would be destroyed even if spawned on camera.

Very curious update:
When this happens, shots keep appearing without visual collider for a while...
..BUT, after half a minute or so, they start appearing with working collider

update:
I have detected that the player colldier rect (x,y) differs from the player position (x,y) (though collisions are calculated properly).
This fucked up some enemy raycast shots and didn't aim well (now they take the pos rather than the collider pos)


Making Hugging Face the place to go for Graph NNs datasets

Let's make Hugging Face Datasets the central hub for GNN datasets :)
Motivation. Datasets are currently quite scattered and an open-source central point such as the Hugging Face Hub would be ideal to support the growth of the GNN field.
What are some datasets worth integrating into the Hugging Face hub?
Instructions to add a new dataset can be found here.
Special thanks to @napoles-uach for his collaboration on identifying the first ones:

[ ] SNAP-Stanford OGB Datasets.
[ ] SNAP-Stanford Pretrained GNNs Chemistry and Biology Datasets.
[ ] TUDatasets (A collection of benchmark datasets for graph classification and regression)

cc @osanseviero

It will be indeed really great to add support to GNN datasets. Big :+1: for this initiative.

@napoles-uach identifies the TUDatasets (A collection of benchmark datasets for graph classification and regression).
Added to the Tasks in the initial issue.

Thanks Omar, that is a great collection!

Great initiative! Let's keep this issue for these 3 datasets, but moving forward maybe let's create a new issue per dataset :rocket: great work @napoles-uach and @omarespejel!


issue 492: Create distribution that returns <: Real

This draft PR introduces RealUnivariateDistribution with an eltype method
Base.eltype(::Type{<:Sampleable{F,RealValued}}) where {F} = Real

This means that rand is no longer hard encoded to expect either Float64 or Int values.
Flagging for @seabbs. I want to see the CI and benchmarks before possible merge.
NB: This branch is not using the change in CI from #491 ... which was accidental but actually might be a good test case.

Note that the benchmarks for observations are worse.
This might suggest going for something a bit more specialised like Union{Int,BigInt}

Closing this as #497 looks much more promising.


Is there any ongoing work on this project?

Hello 👋
Thanks for your project
I checked README and found that several statements and features are not implemented yet.
Is it some plan to continue work on this repo?
How far is this project from ready to use state?

We're not actively working on this right now. Just curious though what features are you looking for specifically?

@sfc-gh-pkommini are you not working on it because it's feature complete for your use case or did you end up using other tools besides codemirror for a browser based snowsql editor? I'm looking to implement something similar and would love to know if you guys chose to go w/ something like monaco editor or another option

Also pardon my confusion, but is "snowsql" the name of the CLI or is it a name for a snowflake specific sql grammar that runs in the snowflake worksheets? or both? I've seen this which implies its a cli to run sql statements, though I know the worksheets execute some snowflake specific variant of sql dialect.


Displaying details of Point Cloud

I have a point cloud that displays in the pptk.viewer(), however, I can't seem to zoom the camera to get close enough to see the data.
The data is a point cloud of a road collected from lidar on a vehicle on that road, but whenever I view it in the viewer, it just comes out as what looks like a line (presumably the line of the dots that make the road), but I can't seem to zoom in to look at the details of the road.
The lidar LAS file was converted to an X,Y,Z numpy array using liblas and lat, lon, alt values.

Hi MarkerMovement7,
I know it's been a long time since you asked this question, but I just figured out how to solve this issue and figured I'd post in case anyone in the future stumbles upon this problem.
The issue is that your x and y values are in units of degrees, while you z values are in units of height (m or ft or whatever). You need to convert your x and y lat/lon values in degrees into the same units as your z values, i.e. you need to project your points into a coordinate reference system that does not use degrees (e.g. UTM). There are a number of ways to do this, and GIS forums online should help. I found it easiest to convert my x and y in lat/lon into UTM coordinates using the UTM package.

Thank you for taking the time to write a response. I could not figure out why in the world every lidar viewer I was tried would end up looking the same way: zoomed out with a tiny line of dots. What the heck?!? Every time! Wow, so yes sir. That is extremely valuable information, thank you! Whew, it took a while to get an answer but man it feels good to get one. Sincerely,JamesSent via the Samsung Galaxy S7, an AT&T 4G LTE smartphone
-------- Original message --------From: Matthew Conlin<EMAIL_ADDRESS>Date: 5/21/19  10:22 AM  (GMT-08:00) To: heremaps/pptk<EMAIL_ADDRESS>Cc: MakerMovement7<EMAIL_ADDRESS>Author<EMAIL_ADDRESS>Subject: Re: [heremaps/pptk] Displaying details of Point Cloud (#8) Hi MarkerMovement7,
I know it's been a long time since you asked this question, but I just figured out how to solve this issue and figured I'd post in case anyone in the future stumbles upon this problem.
The issue is that your x and y values are in units of degrees, while you z values are in units of height (m or ft or whatever). You need to convert your x and y lat/lon values in degrees into the same units as your z values, i.e. you need to project your points into a coordinate reference system that does not use degrees (e.g. UTM). There are a number of ways to do this, and GIS forums online should help. I found it easiest to convert my x and y in lat/lon into UTM coordinates using the UTM package.
—You are receiving this because you authored the thread.Reply to this email directly, view it on GitHub, or mute the thread.
[
{
"@context": "http://schema.org",
"@type": "EmailMessage",
"potentialAction": {
"@type": "ViewAction",
"target": "https://github.com/heremaps/pptk/issues/8?email_source=notifications\u0026email_token=AHYXSTYYPHMAQKG3X6ETGJ3PWQVXDA5CNFSM4GUQQ3T2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODV4TH6Y#issuecomment-494482427",
"url": "https://github.com/heremaps/pptk/issues/8?email_source=notifications\u0026email_token=AHYXSTYYPHMAQKG3X6ETGJ3PWQVXDA5CNFSM4GUQQ3T2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODV4TH6Y#issuecomment-494482427",
"name": "View Issue"
},
"description": "View this Issue on GitHub",
"publisher": {
"@type": "Organization",
"name": "GitHub",
"url": "https://github.com"
}
}
]


learning rate vs eta - master vs 0.47

Hello,
I am not sure, what is correct behavior but:
Python version (win and linux):
in 0.47 release (checkpoint before xgboost-brick) and older:

setting learning_rates as list in train() is not working (I guess i should work at least at 0.47 right - according to release notes?)
only working is bst:eta as parametr (float scalar)
--> this I guess correct behavior...

in master branch:

learning_rate in train() is working correctly (tested for list)
but setting bst:eta = 0.002 is not working (learning_rates in train() is not set), seems to me it takes only default value

So now I need to specify constant learning_rate only as list of constant values in train()?
Actually it is no so big issue, but older scripts specifing bst:eta as tree parametrs are not compatible with master branch...
Or I am missing something? Because docs are telling still bst:eta = something is only correct way...
thx

The bst prefix is now deprecated, remove bst prefix shoulw ork

Thanks for point out the outdate of the doc, can you submit a PR to fix this problem?

@tqchen
thx for pointing out on prefix 'bst:' - I missed that.. now it is working
I did some more experiments before PR and I have some questions:
1]
I am running some code with
a] eta: 0.01 as tree parameters and not set learning_rate in train()
b] not set eta, but set learning_rates in train() to list: lr_list = [0.01] * iteration_count
And I got slicy different result (but signifacant over stochasticity of xgboost).. Better result are for case a] (running several times)
Is it implementation of learning_rates same? I have no idea why it is different... Only tip is first iteration or different for gblinear
2] in docs there are tree specific parameters, but actually they are working for gblinear as well:
a] eta
b] subsample
I assume this parameteres should be noticed for gblinear as well..?

1] is not supposed to happen, but I see the same effect.
As soon as you call _LIB.XGBoosterSetParam before a boosting round, the results begin to differ. For example: If you call bst.set_param('foobar',0) before bst.update(dtrain, i, obj) in python, the result is different. @tqchen any idea why that is happening?

Most likely, it's because random seed is reset every time Configure is called:
https://github.com/dmlc/xgboost/blob/b3c9e6a0db0a7eb755949ac6b26e3ef805738350/src/learner.cc#L194
With the same seed every iteration, subsampling would be picking the same sets - and performance would suffer.
An easy check might be to turn the seed_per_iteration on
https://github.com/dmlc/xgboost/blob/b3c9e6a0db0a7eb755949ac6b26e3ef805738350/src/learner.cc#L285
But I cannot think of any well motivated need for the seed resetting within Configure after a model is initiated. I can submit a PR.

Yep, I can see the same random numbers at every iteration when running in python.
I didn't see it in R as it uses a custom random generation engine seeded from R, so the seed method is dummy in there.

thx for pointing that out @khotilov. I would like to see a PR for that issue. If that change is not wanted at the C++ core level, I guess the only workaround would be to set a different seed in thy py-wrapper for each iteration.

I think not resetting seed everytime reconfigure happens is reasonable @khotilov a PR is welcomed


JME functions to format numbers should have LaTeX versions

While resolving #889, it became apparent that we really need to produce a different string version of a number for LaTeX, rather than assuming the plain-text version will be fine. Commas inside numbers shouldn't be followed by an extra space.
There are several JME functions which format numbers as strings: formatnumber, dpformat, sigformat, and scientificnumber[latex|html]. These should produce LaTeX code when called inside a call to latex().
The latex function should set a stringSyntax attribute on the scope which gets passed through as Numbas.math.niceNumber's syntax option.

Another option is to produce both versions and store them in the TString token. When the string is subbed into LaTeX, the LaTeX version would be used.
This might need all string operations to also operate on the LaTeX version.


Redirect with a 308 rather than 301 in a specific case

With strict slashes enabled and the route defined with a trailing
slash e.g. /a/ a request to /a currently results in a 301 response
to redirect to /a/. This is good for GET and HEAD requests, but
problematic for other verbs as clients will typically treat a 301
response as meaning redirect as a GET verb as noted in RFC 2616
section-10.3.2 (RFC 2616 stated this was erroneous, and then RFC 7231
allowed this behaviour). RFC 7538 later introduced a 308 code to work
as 301 was originally intended.
In principle I think the 301 could be changed to 308 wholesale, but
that would likely create some confusing changes to existing code. So I
hope this is a good compromise.
Note: I need to add a changelog entry. However first I'd like to see if this makes sense to others...

I don't think the build failure is related to this change.

Makes sense, this has come up before. I'm fine with changing this to 308 by default everywhere. What confusing changes would that cause?

I couldn't find a previous discussion, could you link?
I've seen a lot of test cases that assert there is a redirect with a 301 status code, it isn't really confusing (so I'll reword) but I suspect this would catch people out. That said I think 308 everywhere makes more sense. I'll update.

According to MDN, 308 is supported in all browsers except IE on Windows <= 8. Windows 8 is EOL. If anyone still needs to support very old browsers, they can do RequestRedirect.code = 301.

Realized that the test client doesn't handle 308, and doesn't pass the body on for 307 or 308. Started to work on that and realized I can't find an exact definition of what data must be copied to the new request. At minimum it's the data and content type so the next request will be able to see form data.

Apparently it sends the headers for 302 as well, so the test client needs a bigger change.

OK, got way too deep with the test client rewrite, I'm just going to make that its own PR. Force pushed to resolve conflicts here.

#1402


codigniter model issue

when i was looking to run 'nonImg_QA'  controller index page there was an error - Unable to locate the model you have specified: nonimg_qa_model..
my model class name file is nonImg_QA_model
class name as NonImg_QA in model file ...src working in localhost..please fine my error ..

This is a bug tracker, we don't provide help for such requests here.
Please post on our forums instead.


put is not supported

Which version of apisix is currently supported?
start Error when starting apisix

xxx:apisix-2.13.1/ $ apisix start                                                                                [10:32:24]
/usr/local/Cellar/openresty/<IP_ADDRESS>_2/luajit/bin/luajit ./apisix/cli/apisix.lua start
got malformed key-put message: "{"error":"put is not supported","code":2,"message":"put is not supported"}" from etcd "http://<IP_ADDRESS>:12379/v3/kv/put"

@soulbird pls take a look at this issue, many thx

@siaron Yes, the current Kine dependency does not support put and delete functions; there is currently a PR implementation of this feature #4 , but it has been implemented in a very hack way, and we plan to refactor this feature, but currently lack sufficient manpower to complete this work.

Happy to be a part of it.  Are there any relevant design documents or materials?

so this etcd-adapter can not work as apisix etcd now?

so this etcd-adapter can not work as apisix etcd now?

It can do a lot but it's still an experimental project. You try play it but be careful when you want to use it on prod env.

thanks. let me try try


Port codebase to Swift

I'll still retain the Objective-C codebase for as long as it's deemed necessary. Just need to do some real-world Swift coding now.
Onwards and Upwards!

Interested on pairing on this now? Swift 1.1 seems relatively stable…

Yes, relatively soon actually. Its one of the projects I'm tackling this week. Should be a pretty easy port. I'll ping you when I have some sample up and running.

@getaaron and I have released a Swift port of Harpy. We've called it Siren, and it can be found here: http://github.com/ArtSabintsev/Siren


Fix broken links in README

It seems like because a few links lack a protocol, GitHub is treating them as Relative Links.
Changes
Just cosmetic fixes to the README.
How I tested this
Previewing my changes in the rich diff shows the links are now correct.
Notes
N/A
Checklist

[x] PR has an informative and human-readable title (this will be pulled into the release notes)
[x] Changes are limited to a single goal (no scope creep)
[x] Code passed the pre-commit check & code is left cleaner/nicer than when first encountered.
[x] Any change in functionality is tested
[x] New functions are documented (with a description, list of inputs, and expected output)
[x] Placeholder code is flagged / future TODOs are captured in comments
[x] Project documentation has been updated if adding/changing functionality.

Good catch! Thank you for the Pull request


Clicking on item in widget opens wrong item in editor

I have 2 of multiple task lists displayed on the screen in the 2x1 widget (enlarged to 2x3). The items are sorted by due date/creation date only, so the 2 lists are mixed, which is fine or even preferable.
In the editor however, all items are first sorted by the list, to which they belong, which is perfect for organizational reasons, and then by alphabet (which I would prefer being the date, too, but that's not, what this bug is about).
The bug now is: When you click on the n'th item in the widget, the editor opens and jumps also to the n'th item. The problem is: Those are not the same items.
Just a note: Rather than syncing the sortings I would prefer some kind of ID, by which the widget identifies the clicked item so that the editor can load the fitting one.
System: I use Android 4.1.2 (phone) and 6.0.1 (tablet). The behavior is identical.
Thanks for all efforts!

@pgroe can you reproduce this issue in the latest version 1.1.9?

The version 1.1.9 has not been rolled out yet. Can I install it manually from somewhere?


v0.0.5: HTLC, Bridge, Spork, and more

This PR adds support for the following:

Embedded contracts:

HTLC
Spork
Bridge
Liquidity

platformFamily was added to Stats.OsInfo
Updated AmountUtils value conversations to mitigate lossy results
In order to support some Bridge/Liquidity functions, the following changes were made to the ABI logic:

Handle empty string arguments
Invalid offset calculation and type casting

Caveats
The implementation of certain list classes like BridgeNetworkInfoList and WrapTokenRequestList are repetitive.
These could be summarized with a generic class.
Testing
This PR has been tested with HyperCore One versions of znn-cli and Syrius.
The client PRs will be submitted shortly after this one has been merged.

Maybe you could remove the pubspec.lock file from the repository.

Maybe you could remove the pubspec.lock file from the repository.

Done


**@BOXING/LIVE!! Man United vs Tottenham LIVE STREAMS FIGHT ON TV CHANNEL in 29 September 2024

Man United vs Tot Live Streaming: Where To Watch EPL Manchester United FC vs Tottenham Hotspur FC Match Live In India?
🅻🅸🆅🅴🔴▶ CLICK HERE TO WATCH LIVE ONLINE
🆆🅰🆃🅲🅷🔴▶ CLICK HERE TO LIVE STREAM
Manchester United will be taking on Tottenham Hotspur in the English Premier League on September 29 in what promises to be a thrilling top 6 clash at Old Trafford on Sunday. With both teams at 7 points at the moment, it will be a tight game with a lot at stake as well.
Manchester (England): The spirited Manchester United is all set to square off against top four rivals Tottenham Hotspur in their next English Premier League (EPL) match on Sunday, September 29, 2024.
Manchester United faced a disappointing 1-1 draw against Dutch side FC Twente in the Europa League midweek. Christian Eriksen scored the Red Devils' solitary goal for the Man United. On the other hand, Tottenham Hotspur, convincingly defeated Qarabag 3-0 despite going down to 10 men in the Europa League clash.
Currently, Manchester United sits at 11th place while Tottenham is just above them at 10th, with both teams accumulating only seven points ahead of their clash at Old Trafford. United's situation worsened after a disappointing draw against Twente in the Europa League, while Spurs managed to relieve some pressure with a victory over Qarabag.
Hence, let's have look at the key details ahead of this game, including how to watch the match, kickoff times and the latest lineup news.
Man United vs Tottenham Live Streaming Details
Man United vs Tottenham- What is the date for the Man United vs Tottenham match?
Man United vs Tottenham Premier League clash will take place at Old Trafford in Manchester, United Kingdom and kicks off on Sunday, September 29 at 4:30 p.m. local time.
When will the Man United vs Tottenham match start?
Man United vs Tottenham Premier League clash will begin from on September 29 at 4:30 p.m. local time.
When will the Man United vs Tottenham match start in India?
Man United vs Tottenham Premier League clash will kick off on September 29 at 9:00 p.m. IST.
Where to Watch live stream of Man United vs Tottenham match in India?
The Man United vs Tottenham match will be live-streamed through the Disney+ Hotstar And Website as well as the Fancode App and website in India.
Which channel will show the live telecast of Manchester United vs Tottenham Hotspur in India?
The live telecast of the match between Manchester United and Tottenham will be available on the Star Sports network.
Man United vs Tot Live Streaming: Where To Watch EPL Manchester United FC vs Tottenham Hotspur FC Match Live In India?
🅻🅸🆅🅴🔴▶ CLICK HERE TO WATCH LIVE ONLINE
🆆🅰🆃🅲🅷🔴▶ CLICK HERE TO LIVE STREAM
Manchester United will be taking on Tottenham Hotspur in the English Premier League on September 29 in what promises to be a thrilling top 6 clash at Old Trafford on Sunday. With both teams at 7 points at the moment, it will be a tight game with a lot at stake as well.
Manchester (England): The spirited Manchester United is all set to square off against top four rivals Tottenham Hotspur in their next English Premier League (EPL) match on Sunday, September 29, 2024.
Manchester United faced a disappointing 1-1 draw against Dutch side FC Twente in the Europa League midweek. Christian Eriksen scored the Red Devils' solitary goal for the Man United. On the other hand, Tottenham Hotspur, convincingly defeated Qarabag 3-0 despite going down to 10 men in the Europa League clash.
Currently, Manchester United sits at 11th place while Tottenham is just above them at 10th, with both teams accumulating only seven points ahead of their clash at Old Trafford. United's situation worsened after a disappointing draw against Twente in the Europa League, while Spurs managed to relieve some pressure with a victory over Qarabag.
Hence, let's have look at the key details ahead of this game, including how to watch the match, kickoff times and the latest lineup news.
Man United vs Tottenham Live Streaming Details
Man United vs Tottenham- What is the date for the Man United vs Tottenham match?
Man United vs Tottenham Premier League clash will take place at Old Trafford in Manchester, United Kingdom and kicks off on Sunday, September 29 at 4:30 p.m. local time.
When will the Man United vs Tottenham match start?
Man United vs Tottenham Premier League clash will begin from on September 29 at 4:30 p.m. local time.
When will the Man United vs Tottenham match start in India?
Man United vs Tottenham Premier League clash will kick off on September 29 at 9:00 p.m. IST.
Where to Watch live stream of Man United vs Tottenham match in India?
The Man United vs Tottenham match will be live-streamed through the Disney+ Hotstar And Website as well as the Fancode App and website in India.
Which channel will show the live telecast of Manchester United vs Tottenham Hotspur in India?
The live telecast of the match between Manchester United and Tottenham will be available on the Star Sports network.


🐛 [firebase_performance] Missing implementation

Bug report
I follow doc to enable plugin :
  dependencies {
        classpath 'com.android.tools.build:gradle:3.5.4'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath 'com.google.gms:google-services:4.3.4'

        classpath 'com.google.firebase:perf-plugin:1.3.2'
    }

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.google.firebase.firebase-perf'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'com.android.support:multidex:1.0.3'
    implementation platform('com.google.firebase:firebase-bom:25.12.0')

    implementation 'com.google.firebase:firebase-analytics-ktx'
    implementation 'com.google.firebase:firebase-perf-ktx'
}

But i got

So i add :
implementation 'com.google.android.gms:play-services-base:17.4.0'

And it works and error disappear :).

[√] Flutter (Channel stable, 1.22.1, on Microsoft Windows [version 10.0.19042.546], locale fr-FR)
    • Flutter version 1.22.1 at C:\Users\engue\Documents\Softwares\flutter
    • Framework revision f30b7f4db9 (3 days ago), 2020-10-08 10:06:30 -0700
    • Engine revision 75bef9f6c8
    • Dart version 2.10.1

[√] Android toolchain - develop for Android devices (Android SDK version 30.0.2)
    • Android SDK at C:\Users\engue\AppData\Local\Android\sdk
    • Platform android-30, build-tools 30.0.2
    • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)
    • All Android licenses accepted.

[√] Android Studio (version 4.0)
    • Android Studio at C:\Program Files\Android\Android Studio
    • Flutter plugin version 50.0.1
    • Dart plugin version 193.7547
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)

[√] Connected device (1 available)
    • sdk gphone x86 arm (mobile) • emulator-5554 • android-x86 • Android 11 (API 30) (emulator)

• No issues found!

Thanks @EArminjon
Do you have a link for the documentation you have used as a guide?

I use to official flutterfire doc and google doc. And when facing the issue, many post on stack overflow / github.

Thanks, @EArminjon! This saved a lot of my time.
This issue still exists. I think we should mention this in the docs until the plugin gets updated and we don't need to add this manually. @dackers86, I would love to send a PR for this. WDYT?

Closing due to inactivity.


PV1 value being multiplied by 1000

Is there an existing issue for this?

[X] I have searched the existing issues

Current Behavior
After latest update PV1 value is being multiplied by 1000
PV2 is correct
Steps To Reproduce
No response
Expected behaviour
..
Card Version
Lastest
Home Assistant Version
Latest
Configuration
type: custom:sunsynk-power-flow-card
cardstyle: full
panel_mode: true
show_solar: true
large_font: false
inverter:
  autarky: 'no'
  modern: true
battery:
  energy: 10500
  shutdown_soc: 20
  show_daily: false
  auto_scale: true
  full_capacity: 95
solar:
  show_daily: false
  mppts: 2
  pv1_name: Front
  pv2_name: Rear
  auto_scale: false
load:
  show_daily: false
  show_aux: false
  dynamic_colour: true
  max_power: 8000
grid:
  show_daily_buy: true
  show_daily_sell: false
  show_nonessential: false
  max_power: 8000
  dynamic_colour: true
entities:
  use_timer_248: sensor.current_use_timer_248
  priority_load_243: sensor.energy_mode_243
  inverter_voltage_154: sensor.sunsynk_output_voltage_154
  inverter_load_freq_192: sensor.sunsynk_output_frequency_192
  inverter_out_164: sensor.sunsynk_output_current_164
  inverter_out_175: sensor.sunsynk_output_total_power_175
  inverter_power_175: sensor.sunsynk_output_total_power_175
  grid_status_194: sensor.sunsynk_grid_online_194
  grid_connected_status_194: sensor.sunsynk_grid_online_194
  inverter_status_59: sensor.sunsynk_inverter_status_59
  batchargeday_70: sensor.sunsynk_battery_daily_charge_70
  batdischargeday_71: sensor.sunsynk_battery_daily_discharge_71
  battery_voltage_183: sensor.sunsynk_battery_voltage_183
  battery_soc_184: sensor.sunsynk_battery_soc_184
  battery_out_190: sensor.sunsynk_battery_power_190
  battery_current_191: sensor.sunsynk_battery_current_191
  inverter_load_grid_169: sensor.sunsynk_grid_power_169
  grid_power_169: sensor.sunsynk_grid_power_169
  day_grid_import_76: sensor.sunsynk_daily_grid_buy_76
  grid_buy_day_76: sensor.sunsynk_daily_grid_buy_76
  day_grid_export_77: sensor.sunsynk_daily_grid_sell_77
  grid_sell_day_77: sensor.sunsynk_daily_grid_sell_77
  grid_external_power_172: sensor.sunsynk_grid_power_169
  grid_ct_power_172: sensor.sunsynk_grid_power_169
  loadday_84: sensor.sunsynk_daily_load_84
  essential_power: sensor.sunsynk_load_power_ess
  nonessential_power: none
  aux_power_166: sensor.sunsynk_output_aux_power_166
  solarday_108: sensor.sunsynk_daily_pv_108
  pv1_power_186: sensor.sunsynk_pv1_186
  pv2_power_187: sensor.sunsynk_pv2_187
  pv3_power_188: none
  pv4_power_189: none
  pv1_v_109: sensor.sunsynk_pv1_voltage_109
  pv1_i_110: sensor.sunsynk_pv1_current_110
  pv2_v_111: sensor.sunsynk_pv2_voltage_111
  pv2_i_112: sensor.sunsynk_pv2_current_112
  pv3_v_113: none
  pv3_i_114: none
  pv4_v_115: none
  pv4_i_116: none
  load_frequency_192: sensor.sunsynk_output_frequency_192
  inverter_current_164: sensor.sunsynk_output_current_164
  battery_power_190: sensor.sunsynk_battery_power_190
show_grid: true
decimal_places: 2
title: Waterworth Family Solar

Relevant log output
No response

Hi. Can you share your sensor details for sensor.sunsynk_pv1_186 What is the unit of measurement set to?

Pfft , perfect call.
One of then was in as kwh. Had been for some time and not sure how.
Anyway fixed now
Thanks


use project dir in getGitVersion

Rather than running git describe in the current working dir, run it in
the directory of the gradle project. This allows projects that come from
git submodules to use the versions from their repo's tags.

I have not yet signed the Cinnober CLA, but I'll send it to you soon.

Zombiedev, have you signed the CLA and heard anything from Cinnober yet?
I'm not working at Cinnober anymore but I think this should be merged and released as a bug-fix, i.e. as version 2.2.2.

@mbrannstrom, I just emailed it to them.
I don't know how active this project is or when they'll merge this PR, but you can always do something like this in the meantime:
buildscript {
    repositories {
        mavenCentral()
        jcenter()
        maven { url "https://jitpack.io" }
    }

    dependencies {
        classpath "com.github.zombiedev:semver-git:98f7bb63b0"
    }
}

Thank you for your contribution. I will try to find out who are on the mailing list aforementioned and why no response was sent to you.


|| acting as an inclusive "through" instead of "OR"

Godot version:
v3.1.1.stable.official
OS/device including version:
Windows 10 Pro
i5 @3.10 Ghz 12 GB RAM
Issue description:
|| is acting as an inclusive "through" when working with integer numbers
Steps to reproduce:
Start a new project and just add a node2D and a script attached
var num
func _ready():
    randomize()
    num = randi()% 10 + 0
    print (num)

    if (num == 1 || num==10):
	   print("WEIRD RIGHT")
   pass # Replace with function body.

Output:
** Debug Process Started **
OpenGL 3.0 Renderer: GeForrce GT 740/PCIe/SSE2
4
WEIRD RIGHT

Sorry, this was my own misunderstanding.
if (num == 1 || num==10):

will mean 1 OR 10
if (num == 1 || 10):

will mean 1 THROUGH 10

if (num == 1 || 10):

will mean 1 THROUGH 10

If I'm reading it right, it will always evaluate to true since 10 is a truthy value.

if num in range(1,10):


[Q] wandb instance in spawned processes

wandb version: 0.13.9
python version: 3.7.15
Issue:
I have to spawn new processes in order to achieve parallel training, however the wandb.run object will get lost in the spawned process. This means that logging in the child process will not be logged to wandb. I can try to resume the wandb within the child process, but it seems to overwrite the one in the parent process.
Here is the minimum code to reproduce what I am trying to ask:
import wandb
from multiprocessing import get_context

run_id = 'abcdef'

def run_function():
    print(f"is wandb.run None? {wandb.run is None}")
    print("check_point B")

if __name__ == "__main__":
    wandb.init(id=run_id)
    print("check_point A")

    with get_context('spawn').Pool(processes=1) as pool:
        pool.apply(run_function)

    print("check_point C")

In the wandb logs tab, I will only see check point A and C, but not B, since wandb.run object is empty in the child process.
If I add wandb.init(id=run_id, reinit=True), then I will have check point B and C, but not A. When I check the local wandb folder, I can see, if I reinit the instance, there will actually be a new run-{date}_{random_numer}-{run_id} folder.
Any suggestion how I can make this work? Thank you in advance!

@ustcscgyer Thanks for reporting this issue.
There is indeed some inconsistencies with our console logging that we are actively working on resolving and should be included in the next release.
In the meantime, I wasn't able to reproduce your second example where you say you see "check point B and C, but not A" only the first case.
If are you trying to use the same run in multiple processes, i would suggest you take a look at our multiprocessing docs.
Caveat on this solution, as i mentioned earlier the console logging might still have some issues, but everything else should be logged as expected.

@kptkin thanks a lot for your fast responses. Could you double check the second test? To clarify, here is the exact code:
from multiprocessing import get_context

import wandb

run_id = 'abcdef'

def run_function():
    wandb.init(id=run_id, reinit=True)
    print(f"is wandb.run None? {wandb.run is None}")
    print("check_point B")

if __name__ == "__main__":
    wandb.init(id=run_id)
    print("check_point A")

    with get_context('spawn').Pool(processes=1) as pool:
        pool.apply(run_function)

    print("check_point C")

And here is a screenshot in the log view:

And here is the first test:
from multiprocessing import get_context

import wandb

run_id = 'abcdef'

def run_function():
    # wandb.init(id=run_id, reinit=True)
    print(f"is wandb.run None? {wandb.run is None}")
    print("check_point B")

if __name__ == "__main__":
    wandb.init(id=run_id)
    print("check_point A")

    with get_context('spawn').Pool(processes=1) as pool:
        pool.apply(run_function)

    print("check_point C")

@kptkin  Also, the solution mentioned in the doc works great for logging metrics, but my true problem here is to get console logging work :)

Hi @ustcscgyer
Thanks for providing the detailed example! It was very helpful for me to reproduce your issue.
I want to give you some context on the two examples you shared and explain what you are seeing:

In your first example (when you don't do reinit) in the other process there is no run (since it is only available in the first process, hence I suggested the multiprocessing documentation) so it won't log anything, no run to do the logging, so you only see the A and C.

In your second example, using reinit will work as follows:
It will basically finish wandb.run if one is available (i.e. is not None, in this case as you saw it would be None) and start a new run. Since you provide an explicit id it will overwrite any previous information to that run, hence you see only the information that is relevant to run that was created while doing reinit, i.e. points B and C.

Hope this makes more sense now :)
Also, we are actively working on a fix for the console issue in multiprocessing and I will update this issue once it is available. Apologies of the inconvenience!

Thanks @kptkin! Your explanation makes total sense! It's good to know that console logging has its limitation now, so I don't have to waste too much time digging into it. Now I just look forward to the update! Do you have a rough idea when this support will be added?

@ustcscgyer, the plan is to include this fix in the upcoming (beginning of) march release, but it still being tested and we are trying to decide between 2 different approaches. So it might not be completed by then, in that case we are probably going to include it in the April release.

As @kptkin mentioned, there are two approaches we are still evaluating and plan to have this released in the april release.   I will provide an update when a dev version of the SDK is available if you want to test it.

Hi @raubitsj I am wondering if there is any update for this issue? Was it fixed in the recent release?

@kptkin @raubitsj @dmitryduev Has there been any progress on this issue? Is there a recommended way to capture logs from different Python processes?
For context our use case is slightly different: We're using subprocess.Popen to spawn different processes from a Python script, but manually capturing STDOUT/STDERR from the main process is quite cumbersome.

@lgeiger sorry for the delay here, we are currently working on a new client backend and the plan is to add the support for this feature in the new backend, it is currently behind other issues, but we have a new person working on and it should be available soon. There are some subtleties that we need to consider here to work this problem out.
cc: @timoffex for visibility

We would be interested in console redirection support in spawned processes as well.

@alsrgv Thanks for letting us know, it is on our roadmap probably will take a few more releases before we get to it, but i will be updating this issue, once we have a release with this change!
Thanks for your patience with us :)


Button for shutting down the Linux VM

There should be a button to explicitely shutdown the linux VM. I think the default of not shutting it down when quitting Kitematic is fine, but I should be able to shut it down after I'm done trying stuff out without changing the default behaviour on app quit which is the right one.

The button wouldn't work in your use-case, since you've already shutdown Kitematic to do something else and would need to start it back up to shutdown the VM.
Instead you can do: docker-machine stop default


Syntax Error - Section "StackExchange.Redis timeout exceptions", Point 11.

Hello,
The sentence "A large difference means there is memory fragmentation (internal or external. When Used Memory RSS is less than Used Memory, it means part of the cache memory has been swapped by the operating system. If this swapping occurs, you can expect some significant latencies." in point 11 of section "StackExchange.Redis timeout exceptions" doesn't have a closing ")" too match the opening "(" after the word "internal."
Thanks.

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

ID: fc313a9d-c17f-6ed0-197f-b8fb3f290ccc
Version Independent ID: 71a434f0-9f56-3803-a818-1a7aa301682c
Content: How to troubleshoot Azure Redis Cache
Content Source: articles/redis-cache/cache-how-to-troubleshoot.md
Service: cache
GitHub Login: @wesmc7777
Microsoft Alias: wesmc

@frostygoth Thanks for the feedback! I have assigned the issue to the content author to evaluate and update as appropriate.

@frostygoth Thank you. This update should be published on Monday.


Featured Content Module: Default video image should be shrunk down slightly

Bug
The cropping of the default video image is very tight when it appears in a featured content module at desktop sizes, or in the case of the tablet sizes it IS cropped.
Current behavior

Default video image is cropped in the featured content module at desktop and tablet sizes.

Expected behavior

Content area of the default video image would be shrunk down so it fits comfortably in view at most/all screen sizes.

Steps to replicate behavior

Visit https://www.consumerfinance.gov/prepaid-rule/
Open the dev console settings and disable JavaScript.
Reload the page to show the default video image.
Resize the window and note that the image is cropped at certain sizes.

Screenshots

PR --> https://github.com/cfpb/consumerfinance.gov/pull/6284

@anselmbradford This ready to be closed?

Yup!


On-page navigation does not scroll

The On-page navigation page does not scroll until the main content is scrolled to the bottom of the page.
See https://snakemake.readthedocs.io/en/latest/snakefiles/rules.html
Not sure if this is using an out-of-date version of the theme. If so I will bring it up with the snakemake team.

I am happy to provide a PR. However, I have no clue what might be wrong here. The div with the on-page-nav already has vertical scrolling overflow activated. I would be happy to consider any hint.

It works, thank you so much!


Simplify signature

Content
This PR removes the verification key and the stake from the signature. These values are no longer required, as individual signatures no longer contain the merkle paths (it is now responsibility of the aggregator to include these values in the certificate). This required some changes in the multi_signer and single_signer, as these folders were verifying single signatures.
Now, in order to verify aggregate signatures, they include not only the individual signatures but also the corresponding RegParty, to be able to verify the batched membership proof (batched merkle path).
Pre-submit checklist

Branch

[x] Commit sequence broadly makes sense
[x] Key commits have useful messages

PR

[x] No clippy warnings in the CI
[x] Self-reviewed the diff
[x] Useful pull request description
[x] Reviewer requested

Issue(s)
This PR closes #619 .

Good catch. But I count 64 bytes + linear increase. 48 from sigma + 8 from the signer index + 8 from at least one index. Do you get the same?
cc: @curiecrypt

Yes, I got the same. I wrote 72 bytes because if we create a signature it must include at least one winning index. So, 72 bytes = sigma + signer index + winning index @iquerejeta

The extra 8 bytes coming from the number of indexes are included in serialized version of StmSig. @iquerejeta

Right! good catch.


feat: option to prettyprint fvarid instead of binder name in LCNF

For debugging, I often need to pretty print LCNF declarations and these declarations are not really internalized:
set_option trace.Compiler.result true in
#eval runOnDecls [``String.toSubstring] <|
  Probe.ppDecl

And here is an example of what I get:
def Array.getD α a i v₀ : _uniq.1 :=
  let _x.1 := @Array.size _ _uniq.2;
  let _x.2 := Nat.decLt _uniq.3 _uniq.5;
  cases _uniq.6 : _uniq.1
  | Decidable.isFalse x.3 =>
    return _uniq.4
  | Decidable.isTrue h =>
    let _x.4 := @Fin.mk _uniq.5 _uniq.3 ◾;
    let _x.5 := @Array.get _ _uniq.2 _uniq.9;
    return _uniq.10

One possibility is to explicitly internalize before pretty printing, but this changes the compiler state.
This PR proposes an alternative one: a new option, namely pp.letShowFVarId, to use fvarid's instead of binderNames when pretty printing (we always have fvarId's). We lose the pretty binder names, but we now are able to link let terms in LCNF when debugging. And without changing the compiler state.
For instance:
set_option pp.letShowFVarId true in
set_option trace.Compiler.result true in
def add1 (x : Nat) : Nat := x + 1

And the corresponding pretty-printed LCNF:
 def add1 _uniq.3652 : Nat :=
      let _uniq.3653 := 1;
      let _uniq.3654 := Nat.add _uniq.3652 _uniq.3653;
      return _uniq.3654

One possibility is to explicitly internalize before pretty printing, but this changes the compiler state.

Could you elaborate on this? What's wrong with internalizing purely for pretty-printing as in ppDecls'?

I may have misunderstood this the last time we spoke about this in the dev meeting: I thought it was an open issue.
def ppDecl' (decl : Decl) : CoreM Format := do
  runCompilerWithoutModifyingState do
    ppDecl (← decl.internalize)

If I can assume that ppDecl' will not modify the compiler state, as the code suggests, then I can get rid of this PR.

Sorry for the noise. Indeed it addresses my pain:
def ReaderT.read (ρ : Type u) (m : Type u → Type v) (inst.1 : Monad m) (a.2 : ρ) : m ρ :=
  let _x.3 : Applicative m := inst.1 # 0;
  let _x.4 : Pure m := _x.3 # 1;
  let _x.5 : {α : Type u} → α → m α := _x.4 # 0;
  let _x.6 : m ρ := _x.5 _ a.2;
  return _x.6

Closing since this PR is unnecessary.


chore: pre-release v0.3.0

NEW RELEASEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE

OH MY GOD! GREAT WORK !!! LGTM 🚀💙


Spanish translation es-MX

Please refer my translation in your project
https://gist.github.com/yovasx2/dc0e9512e6c6243f840c

I try to fork the repo but the mantainer reject to mantain locales

Hi Giovanni, you may have file the issue in the wrong repository. Your translation is already shown in the readme at https://github.com/stephskardal/rails_admin_import#community-contributed-translations

Yeah thanks


Discrepancy in expression values between VIP and CellXGene

Hi, I'm noticing that the expression range seems to differ between CellXGene and the VIP plugin.
In the example dataset (https://cellxgenevip-ms.bxgenomics.com) it looks like CD79A has a max normalized expression of 7.485:

But when I plot the distribution of this gene across clusters I see that the y-axis is capped at 20:

How is this 20 computed? Also what does the Expression cutoff: field correspond to? How can I get these values on the same scale?

Please change "Scale data ... ..." option to "No".

Perfect - thank you!


PromiseKit breaks @objc(ClassName)

PromiseKit breaks @objc(ClassName) swift modifier because of redefined SWIFT_MACRO in PromiseKit. Here is an example project:
https://dl.dropboxusercontent.com/u/7272802/TestingBridge.zip

Found the problem:

PromiseKit redefines SWIFT_CLASS but not SWIFT_CLASS_NAMED
Project-Swift.h checks defined(SWIFT_CLASS) before defining both
So if PromiseKit is imported before Project-Swift.h (as instructed), SWIFT_CLASS_NAMED never gets defined.

I'm preparing a Pull Request with a fix.

Merged: a334234d4248637dbe419b1d6dd7820abc45b75c


Fixlets

First round of bugs reported by @tomreyn
These are the easy ones, the others will have to wait a bit more. :P

#2624 wasn't reported by me but by @h-collector , so that's in-excess credit.

Ouch, copy&paste fault. :P
Fixed and thanks for reporting! :D

Time to merge this in ... rebase if you want to add more to this branch

TBH I forgot about it, otherwise I was going to merge it myself. lol
I think it was fine to merge. :smile_cat:


[Question] What would it happen if the acknowledge message from the consumer times out?

Hello @cressie176,
More than an issue, this is a question.
We have been doing some load test for an application using Rascal. We have seen that sometimes messages hang on RabbitMQ queues as unacknowledged until we restart the consumers. Our theory is the acknowledge message fails due to a ETIMEDOUT or ECONRESET. Is our theory plausible? What are your thoughts? We are thinking to add a timeout, after which, the message would be nacked. Obviously, we would need to be prepared for redeliveries of messages as explained on https://www.rabbitmq.com/confirms.html#automatic-requeueing. The problem would be that the ackOrNack is not a promise we can put into a Promise.all with a timeout, neither does return any value. So I am not sure how we could do this. Do you have any suggestions?
Thanks in advance.

Actually, if there is such a ETIMEDOUT or ECONRESET errors, would ackOrNack call throw an error?

I'm pretty sure if the connection drops (or probably even if the channel dies) RabbitMQ will rollback any unacknowledged messages.

Yes, that is correct, according to the RabbitMQ documentation. And that's what happens when we restart the consumers. The problem is that we think the connection does not drop, neither the channel dies, but we still get a timeout from the load balancer in our infrastructure.

ETIMEDOUT or ECONRESET would be emitted as an error event from the connection, causing amqplib to bork the channel and connection, so I don't think it's that. Furthermore providing you have heartbeats enabled both server and the client to detect situations where the other is not responding and close the connection.
If you're doing load testing, are you sure you're not saturating the event loop, causing the application to be unresponsive?
The latest version of rascal exposes amqplib's native flow control so this might be of some use in checking when your application is getting saturated. You may also need to configure the channel pool options.

Thanks for the feedback @cressie176. We will keep investigating. We'll check the different options/suggestions you are providing.

FYI There's an example for using flow control with Rascal here


Environment stripping improvements - Lambda stripping

Sided lambdas have been quite terrible to modders, every month at least one modder falls under its wrath.
But what is actually the issue?
Let me pull up a very simple example code:
@Environment(EnvType.CLIENT)
public void hello() {
    this.hi(client -> client.player.sendMessage(new LiteralText("Hi!"), false));
}

@Environment(EnvType.CLIENT)
public void hi(ClientConsumer toDo) {
    toDo.consume(MinecraftClient.getInstance());
}

@Environment(EnvType.CLIENT)
public interface ClientConsumer {
    void consume(MinecraftClient client);
}

And let's consider this is in a common class, when loaded on a dedicated server 2 methods will be stripped: hello and hi.
BUT WAIT! There isn't just 2 methods, there's 3! The lambda is another method too, but wait, it doesn't have the annotation, meaning it won't get stripped.
When loading the class, the server will crash due to ClientConsumer not existing, which will be quite unintuitive to modders unaware of this specific behavior.
The loader should strip lambda methods that are generated from a stripped method, it's not trivial but it would resolve a lot of seemingly "random" crashes.
Now there's the argument of "you should not use sided methods, you should separate your client code"! Which I partially agree, in some cases separating a feature to the opposite part of the codebase and have all the remaining code in another part will make understanding and maintaining the feature more difficult, sided methods are very practical in that case, they should not be the "always" go-to, but they should not be straight out rejected from designs.
Fixing this will make codebases significantly more stable when those kind of methods are involved.

When loading the class, the server will crash due to ClientConsumer not existing

I can't reproduce that with the example given - even if I remove the  @Environment(EnvType.CLIENT) from both the hello and hi methods. Can you link to a crash report where this issue actually occurs?

Actually, I suppose I was being a bit pedantic with my previous comment - the example given can actually be loaded safely on the server, but the following can't:
public void hello() {
        this.hi(client -> {
            ClientWorld cw = client.world;
            World w = cw; // This requires the java verifier loads both ClientWorld and World to make sure you can perform this implicit upcast
            w.random.nextBoolean();
        });
    }

This has now been implemented as of 0.17.5-beta.8 - although a full release should follow in a couple of days.

Okay, now released in 0.17.5!


Show player start step template

Coverage increased (+0.0005%) to 92.819% when pulling<PHONE_NUMBER>70e863d91bc4b3095b29850bedc4b1 on show_player_start_step_template into a6cc262ddebeb430a70ac7b3e13bad0f99196f28 on dev.

Coverage increased (+0.003%) to 92.822% when pulling<PHONE_NUMBER>70e863d91bc4b3095b29850bedc4b1 on show_player_start_step_template into a6cc262ddebeb430a70ac7b3e13bad0f99196f28 on dev.


RimWorld Steamworks update

Hi, I'm the Community Manager for Ludeon Studios - there is a Steamworks update coming out for RimWorld on April 6. Since TookitPolls is "using: Steamworks", your mod needs to be updated for it to work with the new Steamworks API. Please update ahead of time so that your mod doesn't break!
The official announcement is here: https://store.steampowered.com/news/app/294100/view/3128319129435462402
Some mod authors are discussing this issue in our Official Development server on discord here:
https://discord.gg/SuTeKfdcpH

Done 👍🏼


Add supplementary subClassOf assertions. Fixes #714.

Fixes #714.
This PR contains:

A new ontology file, gistSubClassOfAssertions.ttl, which contains supplementary rdfs:subClassOf assertions that cannot be inferred by some reasoners. (For completeness, it also contains the already-explicit rdfs:subClassOf assertions from gistCore.)
Tweaks to the bundle.yaml file to ensure that the new ontology file will be bundled into the release. Instead of adding the file name to the growing list of files, I have used a wildcard *.ttl, which seems to be generating the package correctly, so that we get three file types for the subClassOf supplement.

Note: I have included the subClassOf assertions ontology here mainly for review. If it's not something we want to store in the gist git repository, I can remove it before merging and then we can add it back during the v12 release process.

which contains supplementary rdfs:subClassOf assertions that cannot be inferred by some reasoners

How about give an example of one that will not infer them and why. E.g. RL reasoners ignore cannont handlye equivalentClass axioms.

Thank you for comments, @rjyounes & @uscholdm. I've added a release note, tweaked the yaml file, and adjusted the annotations in the new file. Ready for another look when you get a chance.


ChunkSource::buffer_next_batch_chunks_blocking doesn't handle std::bad_alloc exception correctly

DynamicChunkBufferLimiter will alloc memory in pin method and may throw std::bad_alloc exception.

this method is invoked in ChunkSource::buffer_next_batch_chunks_blocking, if it throws std::bad_alloc exception ,BE will crash.

crash stack like this:
*** Aborted at<PHONE_NUMBER> (unix time) try "date -d @1685943281" if you are using GNU date ***
PC: @     0x7f87de170387 __GI_raise
*** SIGABRT (@0x3e8000010d1) received by PID 4305 (TID 0x7f86b7b99700) from PID 4305; stack trace: ***
    @          0x5ac27c2 google::(anonymous namespace)::FailureSignalHandler()
    @     0x7f87de517630 (unknown)
    @     0x7f87de170387 __GI_raise
    @     0x7f87de171a78 __GI_abort
    @          0x24aa711 _ZN9__gnu_cxx27__verbose_terminate_handlerEv.cold
    @          0x7982bea __cxxabiv1::__terminate()
    @          0x7982c55 std::terminate()
    @          0x7982da8 __cxa_throw
    @          0x24aa622 _Znwm.cold
    @          0x29e392a starrocks::pipeline::DynamicChunkBufferLimiter::pin()
    @          0x29ca5ee starrocks::pipeline::ChunkSource::buffer_next_batch_chunks_blocking()
    @          0x2726c62 _ZZN9starrocks8pipeline12ScanOperator18_trigger_next_scanEPNS_12RuntimeStateEiENKUlvE_clEv
    @          0x273039e starrocks::workgroup::ScanExecutor::worker_thread()
    @          0x49c0bf7 starrocks::ThreadPool::dispatch_thread()
    @          0x49bb480 starrocks::Thread::supervise_thread()
    @     0x7f87de50fea5 start_thread
    @     0x7f87de238b0d __clone
    @                0x0 (unknown)

Steps to reproduce the behavior (Required)

CREATE TABLE '...'
INSERT INTO '....'
SELECT  '....'

Expected behavior (Required)
Real behavior (Required)
StarRocks version (Required)
baseline version: main e0a3851490abf3583d4d3513d7de762897de8e84

not a bug


Refactor proof setup

This PR refactors the first step of foundry_prove, namely selecting and initializing tests for proving.

Extract class FoundryTest that encapsulates a Contract, a Method and a version int. This way steps that follow don't have to pass and validate test signatures as str.
Extract functions for loading FoundryTest instances for test and setUp() methods.
Pull loading the setUp final state from _get_final_accounts_cell to method_to_apr_proof. This makes _method_to_cfg a pure function.
Extract function method_to_initialized_cfg that computes the initial proof KCFG.
Other small code quality improvements.

It looks like foundry_prove is now completely ignoring the exclude_tests parameter. I guess that's because of a prior code change that somehow made us ignore that. So I guess we can just remove that parameter to both foundry_prove, the CLI, nad matching_tests function, since no one has complained.


[📚] FutureBuilder initialization sample is broken on Flutter 1.20

I'm attempting to implement the Initializing Flutterfire FutureBuilder approach with Flutter 1.20 and hitting the following exception:
$ flutter --version
Flutter 1.20.3 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 216dee60c0 (7 days ago) • 2020-09-01 12:24:47 -0700
Engine • revision d1bc06f032
Tools • Dart 2.9.2
$ flutter run -d iPhone
Launching lib/main.dart on iPhone 8 in debug mode...
Running Xcode build...

 └─Compiling, linking and signing...                        13.4s
Xcode build done.                                           36.1s
Waiting for iPhone 8 to report its views...                          4ms
[VERBOSE-2:ui_dart_state.cc(166)] Unhandled Exception: ServicesBinding.defaultBinaryMessenger was accessed before the binding was initialized.
If you're running an application and need to access the binary messenger before `runApp()` has been called (for example, during plugin initialization), then you need to explicitly call the `WidgetsFlutterBinding.ensureInitialized()` first.
If you're running a test, you can call the `TestWidgetsFlutterBinding.ensureInitialized()` as the first line in your test's `main()` method to initialize the binding.
#0      defaultBinaryMessenger.<anonymous closure> (package:flutter/src/services/binary_messenger.dart:93:7)
#1      defaultBinaryMessenger (package:flutter/src/services/binary_messenger.dart:106:4)
#2      MethodChannel.binaryMessenger (package:flutter/src/services/platform_channel.dart:145:62)
#3      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:151:35)
#4      MethodChannel.invokeMethod (package:flutter/src/services/platfor<…>
Syncing files to device iPhone 8...                                135ms

Flutter run key commands.
r Hot reload. 🔥🔥🔥
R Hot restart.
h Repeat this help message.
d Detach (terminate "flutter run" but leave application running).
c Clear the screen
q Quit (terminate the application on the device).
An Observatory debugger and profiler on iPhone 8 is available at: http://<IP_ADDRESS>:63589/nxc57idb0bs=/

Application finished.

My main.dart looks like this:
import 'package:flutter/material.dart';

import 'package:firebase_core/firebase_core.dart';

void main() {
  runApp(App());
}

class App extends StatelessWidget {
  // Create the initilization Future outside of `build`:
  final Future<FirebaseApp> _initialization = Firebase.initializeApp();

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutterfire Demo',
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutterfire Demo'),
        ),
        body: FutureBuilder(
          // Initialize FlutterFire:
          future: _initialization,
          builder: (context, snapshot) {
            // Check for errors
            if (snapshot.hasError) {
              return Center(child: Text('${snapshot.error}'));
            }

            // Once complete, show your application
            if (snapshot.connectionState != ConnectionState.done) {
              return Center(child: Text('Loading'));
            }

            // Otherwise, show something whilst waiting for initialization to complete
            return Center(child: Text('Success!'));
          },
        ),
      ),
    );
  }
}

While I can work around this by adding WidgetsFlutterBinding.ensureInitialized(); to main, that is an ugly hack. It'd make more sense to only promote the StatefulWidget approach.

/cc @kroikie FYI

I can reproduce the issue
This solves it
void main() {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(MyApp());
}

I'd prefer not to promote WidgetsFlutterBinding.ensureInitialized(); if at all possible =)

An idea is to add some form of widget to the FirebaseAuth package that handles initialization along the lines of the following:
class FirebaseInit extends StatefulWidget {
  FirebaseInit({@required this.child});
  final Widget child;

  @override
  _FirebaseInitState createState() => _FirebaseInitState();
}

class _FirebaseInitState extends State<FirebaseInit> {
  bool _initialized = false;
  String _error;

  void initializeFlutterFire() async {
    try {
      await Firebase.initializeApp();
      setState(() {
        _initialized = true;
      });
    } catch (err) {
      setState(() {
        _error = '$err';
      });
    }
  }

  @override
  void initState() {
    super.initState();
    initializeFlutterFire();
  }

  @override
  Widget build(BuildContext context) {
    if (_error != null) {
      return Center(child: Text(_error));
    }
    if (!_initialized) {
      return Center(child: CircularProgressIndicator());
    }

    return widget.child;
  }
}

The above is just a sketch, and I'm sure that we could harden it (like, say, logging the error message instead of splatting it to screen).

Hey @ditman, am I being over zealous by trying to avoid WidgetsFlutterBinding.ensureInitialized();?

Hey @ditman, am I being over zealous by trying to avoid WidgetsFlutterBinding.ensureInitialized();?

@domesticmouse not sure, but I had similar doubts earlier :) I checked the docs and it seems it can be used exactly for this purpose:

You only need to call this method if you need the binding to be initialized before calling runApp.

(I normally had only seen this used within tests)
It'd be awesome to figure out what "asynchronous" thing your Future is losing its race against and the FutureBuilder case Just Worked™, I've used a similar approach to make a deferred-loaded app before (note how the ensureInitialized was also added there :/).

I remember WidgetsFlutterBinding.ensureInitialized(); becoming required in various places in about the 1.17 timeframe for various usecases. I'm happy to roll back my stance and just add the ensure initialized call to the sample in the documentation to prevent people hitting it and getting confused at the error.
I'm unsure who to chat with about debugging why this is required. I'm guessing it is something deep in the FFI bindings =)

What reservations do you have against calling WidgetsFlutterBinding.ensureInitialized()? It's exactly what runApp does internally as well, there really shouldn't be any harm in doing so.

@goderbauer personally, I had only seen it used in tests before, never had seen a "normal" app calling it directly (but I didn't find anything in the docs advising against it).

Okiday, we just had a meeting on this and calling ensureInitialized in main before runApp is totally ok to do. So if we can get the sample updated as @TahaTesser suggested in https://github.com/FirebaseExtended/flutterfire/issues/3490#issuecomment-688816602 that'd be fantastic =)

I suspect this is the affected file: https://github.com/FirebaseExtended/flutterfire/blame/master/docs/overview.mdx#L67

I'm still a bit confused here. Wouldn't this effect other plugins which call a native method immediately? What is FlutterFire doing which causes this issue specifically (when you don't add WidgetsFlutterBinding.ensureInitialized();)?

With version 1.22.4 (stable), even adding the
WidgetsFlutterBinding.ensureInitialized()

as the first line in the main() does not solve the issue.  I am still getting the exception.
I am running
firebase_core: ^0.5.2+1
firebase_remote_config: ^0.4.2


Add fujitsu ETERNUS DX driver

What this PR does / why we need it:
Adding fujitsu ETERNUS DX driver.
Which issue this PR fixes (optional, in fixes #<issue number>(, fixes #<issue_number>, ...) format, will close that issue when PR gets merged): fixes #
N/A
Special notes for your reviewer:
This driver has below functions for now.

List/Show/Create/Update/Extend/Delete volume.
List/Show/Create/Delete volume attachment.
Create/Delete snapshot.

Release note:

Fujitsu ETERNUS DX driver.
This driver is for evaluation purpose only and limited support will be given.
This driver has below functions for now.
- List/Show/Create/Update/Extend/Delete volume.
- List/Show/Create/Delete volume attachment.
- Create/Delete snapshot.

@xing-yang @wisererik PTAL, thanks!


Symmetric Binary Tree

Submission Title
Given a binary tree, check whether it is a mirror of itself.
Submission Type
Data Structure
Submission Description
We will check if a Binary Tree is mirror image of itself and have the symmetry
Submission Directory
algo_ds_101 => Data_Structures =>  Tree => Binary_Tree => SymmetryBTree.extension
Contributors

[x]  C++ -
[x]  C -
[x]  Python -
[x] Java -
[ ] JavaScript -
[ ] TypeScript -
[ ] Golang -
[ ] Ruby -
[ ] php -
[ ] Swift -
[x] C# -

Please assign me this issue for Java

Hi @ahampriyanshu please assign C++ to me.

Please assign me this issue for Python

Hey, @ahampriyanshu, please assign me the issue for c language

assign me this for c#

Hi, Please assign me this issue for Golang.

Hi, please assign me this for JavaScript.

hi, pls issue me this for java

hi, pls issue me this for java

Please opt a different language/issue.

Can do any other data structure algorithm in java
On Wed, 14 Oct 2020, 19:58 Priyanshu Tiwari<EMAIL_ADDRESS>wrote:

hi, pls issue me this for java
Please opt a different language/issue.
—
You are receiving this because you were assigned.
Reply to this email directly, view it on GitHub
https://github.com/ahampriyanshu/algo_ds_101/issues/1339#issuecomment-708440799,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AOHRDP2AKLJBXCG5RCNAMG3SKWYRZANCNFSM4SNDFL3A
.

thanks everyone :v:


process spider level exceptions fix #63

Passes spider level exceptions to the backend process_exception function.

This could work, but would be nice to pass:

Error type: where it came from, e.g. downloader or spider?
in case of spider, response object.

anyone here to estimate consequences of that?


Add unit-testing

Added in 4639f8ee24ef078095ae5bcd2ad783f4199f8b71. Not sure if I entirely like the tests I've chosen but at least it's something for now to verify the functions are outputting the right values.


Create new doc for delete and mute errors

PTAL

Thanks @sgray. I added the image files @stuartmoore1023 referenced in the doc. I also moved the new doc to the "Features" category.


Fix missing @ escape in template

See googleapis/api-client-staging#157 for context
cc: @bjwatson

Codecov Report

Merging #981 into master will not impact coverage.

@@            Coverage Diff            @@
##             master     #981   +/-   ##
=========================================
  Coverage     85.15%   85.15%
  Complexity     3332     3332
=========================================
  Files           340      340
  Lines         13306    13306
  Branches       1508     1508
=========================================
  Hits          11331    11331
  Misses         1542     1542
  Partials        433      433

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 e271906...5bb5f74. Read the comment docs.


New baselines for HtmlToCodeSwitchTest

Mostly testing the same code paths as the previous PRs. No need to review super hard.

:shipit: - I did a quick skim of this, seemed right.


NullReferenceException at React.AspNet.HttpContextLifetimeProvider.get_Registrations() during Startup

Please verify these steps before filing an issue, and check them off as you go

[X] The relevant native JavascriptEngineSwitcher library packages are installed (such as JavaScriptEngineSwitcher.V8.Native.win-x64)
[X] The VC++ 2017 runtime is installed
[X] The value of SetUseReact and SetUseBabel is correct in ReactConfig.cs or Startup.cs
[X] I've looked at the sample projects in this repo to verify that my app is configured correctly

I'm using these library versions:

ReactJS.NET: 4.2.0-beta1
JavaScriptEngineSwitcher: 3.1.1
react and react-dom: N/A
webpack: N/A
node: N/A
JavaScriptEngineSwitcher.V8.Native.win-x64

Runtime environment:

OS: Windows 2016 DataCenter, 64-bit
.NET Framework 4.7.2

VS 2019 Build Tools workloads installed in Azure Service Fabric VMs:

Microsoft.VisualStudio.Workload.MSBuildTools
Microsoft.VisualStudio.Workload.NetCoreBuildTools
Microsoft.VisualStudio.Workload.NodeBuildTool
Microsoft.VisualStudio.Workload.WebBuildTools --includeRecommended --quiet
Microsoft.Net.Component.4.6.2.SDK
Microsoft.Net.Component.4.6.2.TargetingPack
Microsoft.Net.Component.4.7.1.SDK
Microsoft.Net.Component.4.7.1.TargetingPack
Microsoft.Net.Component.4.7.2.SDK
Microsoft.Net.Component.4.7.2.TargetingPack

I'm trying to run my ASP.NET Core project, running under .NET Framework 4.7.2, to run in Azure Service Fabric. However I'm getting System.NullReferenceException at React.AspNet.HttpContextLifetimeProvider.get_Registrations() , when running app.UseReact(...).
The exception looks similar to https://github.com/reactjs/React.NET/issues/600 [Rendering without HTTPContext]
It works in Azure Service Fabric on my development computer, but I cannot for the life of me figure out what's wrong in Azure or what's missing in the VMs.
Startup.cs, ConfigureServices contains this code before call to services.AddMvc(...):
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddReact();
services.AddJsEngineSwitcher(options => options.DefaultEngineName = ChakraCoreJsEngine.EngineName).AddChakraCore();

Startup.cs, Configure contains this code (no custom configuration) before call to app.UseStaticFiles();:
app.UseReact(config =>{});
I've tried changing
void ConfigureServices(...)
to
IServiceProvider ConfigureServices(...)
...
return return services.BuildServiceProvider();

Any tips on how to hunt this down?
Exception:
System.RA' reported Warning for property 'ReplicaOpenStatus'. Replica had multiple failures during open on _Primary_0. API call: IStatelessServiceInstance.Open(); Error = System.NullReferenceException (-2147467261) Object reference not set to an instance of an object.
at React.AspNet.HttpContextLifetimeProvider.get_Registrations()
at React.AspNet.HttpContextLifetimeProvider.ReleaseObject()
at React.TinyIoC.SafeDictionary2.set_Item(TKey key, TValue value)
at React.TinyIoC.TinyIoCContainer.RegisterRegisterType,RegisterImplementation
at React.AssemblyRegistration.Register(TinyIoCContainer container)
at React.Initializer.InitializeIoC(Func2 requestLifetimeRegistration)
at React.AspNet.ReactBuilderExtensions.UseReact(IApplicationBuilder app, Action`1 configure, BabelFileOptions fileOptions)    at AdminWeb.Startup.Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) in C:\CloudIDE\Workspaces\Codemander\Azure Service Fabric\AdminWeb\Startup.cs:line 1082
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at Microsoft.AspNetCore.Hosting.ConventionBasedStartup.Configure(IApplicationBuilder app)    at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()
at Microsoft.AspNetCore.Hosting.Internal.WebHost.d__26.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)    at Microsoft.AspNetCore.Hosting.Internal.WebHost.Start()
at Microsoft.ServiceFabric.Services.Communication.AspNetCore.AspNetCoreCommunicationListener.OpenAsync(CancellationToken cancellationToken)
at Microsoft.ServiceFabric.Services.Runtime.StatelessServiceInstanceAdapter.d__20.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.ServiceFabric.Services.Runtime.StatelessServiceInstanceAdapter.d__13.MoveNext()

Hmm.. if service fabric explicitly disallows IHttpContextAccessor from accessing the current context then you may be out of luck here for right now. The library needs some form of temporary storage for DI to work properly.
That said, we may be able to swap out TinyIoCContainer with a lightweight wrapper around .NET Core DI when targeting netcoreapp (which might fix your issue). I have not done enough digging in this area to say for sure whether that will work; if you end up forking the library and taking a stab this, I would love to support this scenario, since HttpContext is only really used to facilitate DI.

Going to close this since reworking the DI system is not on the roadmap...


Multi-start shortest path

Summary
~Adds the ability to cache a the open/closed sets from a call to findPath.  This is useful as you can then very quickly get to path to a new goal from the same starting location.~
Changes to core search algorithm to support multiple starting locations.  Multiple start searching has little extra code complexity and no extra asymptotic complexity.  Multiple start also allows multiple goal as you can simple search from goals to start and then reverse the path.
Changes
~## Caching support changes~
~Adds a dtQueryPathState struct which contains its own version of the openList and nodePool and the list of starting points used for the last search.  findPath now takes an optional pointer to a dtQueryPathState.  If given a valid pointer, it will use the openList and nodePool in the dtQueryPathState and will reuse any partial state if possible.  Otherwise, it will use the openList and nodePool provided by dtNavMeshQuery and function as it does currently.~
~Adds dtAllocQueryPathState and dtFreeQueryPathState to support the allocation and deletion of the search states.~
Multi-start support changes
Adds a new method to dtNavMeshQuery called findPathFromAny and re-implements findPath as a special case of findPathFromAny.
findPathFromAny takes the number of starting locations as its first argument, and then all arguments relating to the start locations (poly refs and (x, y, z) locations) are now lists.  The returned path will start at the closet (minimal cost/geodesic distance) starting location to the goal.
Testing
These changes are backwards compatible with all existing tests and code.
To test multi start
query->findPathFromAny(numStartingLocations, startPolyRefs,
        endPolyRef, startPoses, endPos, ....);

P.S. Sorry for the large diffs, I left my whitespace trimmer on and didn't notice until I had made too many changes to turn it off :(
This is a much simpler PR than the number of changes would indicate.

Thanks for the contribution.
From a cursory glance, it seems like you are introducing allocations in the default case to some of the most commonly used methods in the library. This is not a change we can accept. The dtQueryPathState class and parameters your are introducing seem largely unnecessary anyway -- the preferred way (if we were to want these features, see below) would be to simply have the user create multiple dtNavMeshQuery instances.
However I am not quite sold on these features. First of, the caching: I don't think the A* heuristic used on the old nodes is going to be admissible when you try to search for a path to a new destination, so I am not convinced that you can reuse cached nodes and be guaranteed to get an optimal path. Additionally I don't see you handling the case where the user performs searches from different points within the same polygons (maybe this does not matter due to convexity? Not sure offhand). Also, you are not handling the fact that the user may update the navmesh between path queries, which will invalidate all node state.
In any case I'm not sure this is the best way to accomplish this. The most obvious usage of this kind of thing is to find paths to multiple destinations from a single start point. But for this purpose we already have Dijkstra searches (findPolyAround*) and a well-documented helper method (getPathFromDijkstraSearch) to obtain paths from such a search. If you have few destinations your solution may be faster, but I don't think it's worth the potential headaches with keeping the data consistent.
With regards to the multi-start queries: this is not a feature I have seen requested before. It seems rather strange to find a path from any start point rather than a path from all start points. Do you have a use-case in mind for this?

Caching

Allocating memory in the default call.  Yep, that was a poor implementation decision on my part.  I can fix that.

Can the old nodes be used for a search to a new destination?  Yes, they can.  After an A* search returns, there are two types of nodes, reachable nodes (in the closed set or in the open set), and unreachable nodes.  Unreachable nodes aren't of concern, so I will address the reachable nodes.  For nodes that are closed, those certainly can be reused as the path from start to any of them is already guaranteed to be minimal.  For nodes in the open set, those nodes can be re-used, but the heuristic must be recalculated and the nodes must be resorted based on their new total cost, which is being done.

Same polygon but a different point.  This is something I hadn't considered and thank you for pointing it out!  My current thought on that is that I can come up with contrived examples where the returned path would be incorrect.  I am not sure if those cases are possible in practice, but probably the best thing to do is change the interface for a search with caching to only take polygon references (much like the Dijkstra interface), or think about how to fix this.

However, the bigger question is "Does recast need/want A* caching?".  The use case for A* caching instead of Dijkstra is fairly slim, so the answer is probably not.  I can drop that addition from this PR.
Multi-start
Multi-start queries.  Multi-start queries have a very important use case for implementing the much more important/desirable multi-goal query.  If the navigation graph is made of solely undirected edges (which it commonly is), then a shortest path is valid/minimal in both directions (start to end or end to start).  This allows you to perform a multi-goal query by searching from goals to start and then reversing the resulting path.  This is what I am currently using the multi-start query to perform.  Based on Issue #106, it does seem that others are interested in multi-goal shortest paths.
For my use cases, multi-start is essential (due to multi-goal).  I can expand this PR to include multi-start like functionality for Dijkstra.  Does cutting caching and expanding multi-start seem reasonable for recast's wants/needs?

For nodes that are closed, those certainly can be reused as the path from start to any of them is already guaranteed to be minimal.

These nodes are minimal with respect to the cost to get to them plus the distance to the previous target.
It doesn't seem immediately obvious that this implies that they are also minimal for the new target, though I think you might be right.

If the navigation graph is made of solely undirected edges (which it commonly is), then a shortest path is valid/minimal in both directions (start to end or end to start). This allows you to perform a multi-goal query by searching from goals to start and then reversing the resulting path. This is what I am currently using the multi-start query to perform.

That makes sense. I suppose this is faster than simply using Dijkstra for your use-case?
The only thing that worries me here is that, as you say, this is only valid for undirected nav meshes. The thread you link to implements "correct" multi-goal search, that properly supports unidirectional jump-links. I would typically advice to use Dijkstra search in these cases. As you can tell, I am not a big fan of adding another less-general way of accomplishing this, but I am easily convinced if this is worth it in your case. It is a quite elegant addition to the search. 😄

Does cutting caching and expanding multi-start seem reasonable for recast's wants/needs?

I think that would be a good way to continue. I would still like some way to clarify that this is a search from any of the starting points -- perhaps by naming it something like findPathFromAny?

I did some testing for my use case and it seems adding caching was premature optimization :)
I severally underestimated just how fast A* is on the navmesh is compared to the setting I used previously (A* on a fine occupancy grid) for a very similar use case.  Caching reduces runtime by about 5% in my tests and that certainly isn't worth the extra code complexity.
I have changed to PR to just be an addition of multi-start to findPath and have renamed the method to findPathFromAny.

If you are only interested in the path from the closest start (maybe the method should be findPathFromClosest?), then it’s a faster (it’s still A*, so the normal benefits still apply) and, IMO, a much more elegant than looping over all starts and taking the shortest solution.

@jakobbotsch some old & dusty memories on the topic (in Fast Show drunk guy voice) :)
Multi-target pathfinding is sometimes used to pick closest goal. I.e. goto nearest health pack or goto cover or goto exit (in crowd sim), or to plan longer term goals (i.e. which base to attack).
Those above decisions are generally not just distance based, but the evaluation has other attributes too (i.e. distance to enemy, etc). Or in the case of covers and pickups it is often faster to first create a "mask" of locations which the agent can reach, and the look up if there are pickups or covers at those locations (i.e. bloom filter + poly ID hashmap -> cover). Also, it has more predictable performance, since you wont try to path find path to that health pack which is 5m away, across a river that cannot be crossed.
For longer term tactics, i've found that is usually cheaper to do time sliced individual path queries because that uses less memory. This also allows you to early out based on decision cost or time budget.
So, my observation has been that the multi target path query is something that often comes to mind first when solving multi-target problems, but in the end it ends up too costly or inflexible solution.

@memononen I definitely agree that finding paths from one source to the closest goal can have many use cases, but this PR is adding the ability to find paths from the closest source to a single goal. I am having trouble thinking of use cases for this scenario. Maybe you have some thoughts on that?
With re. to finding reachable polygons I have considered adding a data structure to do this, similar to #352 except supporting unidirectional offmesh connections. It can answer queries such as "is there are path from A to B?" efficiently. The main problem is that it is not dynamic and has to be recomputed if the nav mesh changes. But I have personally used such a data structure heavily in my projects indeed to avoid the unpredictable performance resulting from finding paths to unreachable locations.

@jakobbotsch I think a common way to implement multi-target is to seed multiple start locations for A* and reverse path. My understanding is that that is what this PR does. My point was that this type of search often feels like the right solution, but as more (game)logic gets added to the "find path to nearest goal", that particular solution never survives.
The "mask" in referred earlier meant array of polygons returned by findPolysAround() or similar constrainted dijkstra.
Something akin to #352 is super useful too, i agree. I once prototype hierarchical pathfinding which simplified each tile into a graph and then use the high level graph to find path or check accessibility. I think there was something related to query filter which I was not quite able to figure out.

@jakobbotsch I think a common way to implement multi-target is to seed multiple start locations for A* and reverse path. My understanding is that that is what this PR does. My point was that this type of search often feels like the right solution, but as more (game)logic gets added to the "find path to nearest goal", that particular solution never survives.

That makes sense. In my own applications I have often used path distance as a factor in which goal is chosen, but not at all as the only factor. For those situations I would just use a Dijkstra search.
That said, I am not against adding "multi-goal" functionality, even if you typically have more factors to consider than just path distance. But the "seed multiple start locations for A* and reverse path" is obviously incorrect for unidirectional off-mesh connections. And it is not too hard to do better, simply by writing an A* that considers edges reversed. So if this is the only use of multi-start, then I am reluctant to take the change.

So if this is the only use of multi-start, then I am reluctant to take the change.

The only real use case I know of multi-start is to implement multi-goal on a graph with undirected edges.

it is not too hard to do better, simply by writing an A* that considers edges reversed.

I looked into this a little bit.  It seems the way the edges are stored makes this challenging and I don't see a clean solution (if you have thought about this at all and can give me a pointer, I am happy to try this).

It seems the way the edges are stored makes this challenging and I don't see a clean solution (if you have thought about this at all and can give me a pointer, I am happy to try this).

I would probably try to do it in two steps:

Implement a findReversePath (or better named if you have any ideas) which starts at multiple goals and searches towards a beginning, ignoring any offmesh connection that are not bidirectional. This at least means the paths are always traversable, even if they are not always optimal. It should not be hard to skip those off-mesh connections (query dtPoly::getType for DT_POLYTYPE_OFFMESH_CONNECTION, obtain the off-mesh connection info with getOffMeshConnectionByRef, and check dtOffMeshConnection::con. You can inline getOffMeshConnectionByRef to make this check very cheap).
Update dtCreateNavMeshData to also include off-mesh connections that end in the tile. Update dtNavMesh::addTile to properly support this situation (it should simplify off-mesh connection a lot). Update path finds to take into account that links can now be "reverse-directed".

If you wish I am also ok with just a PR for step 1 and I can look at step 2 when I have time (though I have some backlog at the moment). We should also measure along the way, but off-mesh connections are typically rare so I don't think it will be too bad. As a bonus step 2 will allow us to support offmesh connections to tiles that are not direct neighbors (currently off-mesh connections are only supported to direct neighbors). Actually @memononen I am curious if this was a deliberate decision -- to only include off-mesh connections in the start tile. I realize it saves some space, but the hassle/limitations with connecting them seem significant, and compared to the rest of the data I would guess the space usage is negligible.
Of course this last step may require us to bump the version as well -- so it should probably go in the next major version.
Overall this seems like significant complexity, but at least step 2 would be nice to have IMO. It is something I have personally run into that should not be too hard to fix (although there are other ways to fix it). Thoughts @memononen?

@jakobbotsch There are two reasons for the off-mesh connection limitation, both of which can be improved. Firstly, memory management. I wanted to avoid allocations at runtime, so currently the link pool is allocated along with the data. I think this was bad call. Secondly, wanted to simplify the link removal code. You need to remove the links from source and destination tile, so just checking the neighbours remove the bookkeeping.
At Unity we modified Detour and removed the links from the data, which allowed the tile data to be completely read-only. This meant that there was one shared link pool and we also had all the off-mesh connections dynamically allocated. Having that one link pool was key to make it work. IIRC offmesh connections had separate book keeping so you could look up which connections fell into which tile, so links could be added removed as tiles changed.
It was extensive rewrite, but I think it was well worth it. It meant more allocations and in some cases more fragmentation, but that happened at predictable times: when adding and removing tiles or off-mesh connections.

Took a stab at 1)  One thing that I thought of while reimplementing to deal with whitespace issues is that I hadn't accounted for the case of many positions in the same polygon.  This is now accounted for.  I also added an optional argument to multi-goal/multi-start that tells you which of the goal/start polygons was found as if there are many positions in the same polygon, there is no way for the caller to know which was found.

I was sleuthing around the code attempting to figure out a way to do 2) without requiring a large rewrite or version bump and I think I found one (although I don't particularly love it):
When building the navmesh, enough links are allocated for every off-mesh connection to be bidirectional (DetourNavMeshBuilder.cpp:385).  Since links are built at load-time instead of being saved to disk, we can modify  dtNavMesh::connectExtOffMeshLinks to create a dummy link represent a backwards traversal.
This would probably require modifying dtLink to include a flag to indicated it's a backwards traversal link and, without default initialization, wouldn't be backwards compatible with existing user code that creates dtLink's (although comments imply this is rare).   I haven't found an already existing field in dtLink that could safely also store this information.
This is also a reasonably dangerous change as the backwards traversal links will look identical to normal links unless the flag is checked, so I imagine there is a fair amount of existing code that will need to be updated to check this flag and to not traverse backwards links.
Thoughts?

When building the navmesh, enough links are allocated for every off-mesh connection to be bidirectional (DetourNavMeshBuilder.cpp:385). Since links are built at load-time instead of being saved to disk, we can modify dtNavMesh::connectExtOffMeshLinks to create a dummy link represent a backwards traversal.

Unfortunately the multiplication by 2 you are seeing in that code is because each off-mesh connection is a polygon that is bidirectionally linked to its starting poly (by baseOffMeshLinks). Either way it has not been a requirement that off-mesh connections that end in a tile need to be passed to dtCreateNavMeshData so it would be hard to have users update to this and ensure it to be the case (even with a version update). The global link pool suggested by @memononen is probably the best idea. @memononen did you keep the neighbor-only limitation in Unity or add bookkeeping for this? As you can tell I am also interested in getting rid of this :)

This is also a reasonably dangerous change as the backwards traversal links will look identical to normal links unless the flag is checked, so I imagine there is a fair amount of existing code that will need to be updated to check this flag and to not traverse backwards links.

You are right that storing it together with other links would be bad for existing code. It is probably ok to expand dtPoly. There are also some bits available in dtPoly::vertCount. It would also be possible to do something more clever by using the value of dtPoly::firstLink, but it is complicated by the fact that a poly could have no regular links but still have reverse links. But this may all be outdated if we end up doing the global link pool.

Timing procedure:  On a reasonably small navmesh (the paths used for this test have between 2 and 15 polygons), sample 3000 pairs of points that have a path between them.  Then for each pair of points, compute the shortest path between them 4000 times and time that entire loop (reduce the effects clock overhead).  All timing done in nanoseconds with std::chrono::high_resolution_clock.
Current recast master:
Average time per call to findPath:  2584.74
On this PR:
Average time per call to findPath: 2576.08 nanoseconds
Average time per call to findBidirPathToAny:  2771.6 nanoseconds  (This is still just find a path a single point, but now measuring overhead of the extra checks and reversal)
There does seem to be a measurable overhead in the extra checks and reversal when using findBidirPathToAny when findPath would suffice, but there doesn't appear to be a measurable change in performance between findPath on master and findPath on this PR.

I have finally had some time to play with this feature and there are a few things that makes it very confusing to use as a user. The biggest is because with partial paths, the return values do not really make any sense the way the API is described:

Here, the path returned starts somewhere between start and end and then goes to the end. This is really surprising behavior compared to findPath.
The second thing is because the API does not return which goal was found. It seems to me that it makes the API almost unusable for meshes with large polygons (where multiple goals may be on the same polygon). You can get a path, but it is then very inconvenient to actually continue using the path because it is hard for you to know which end point it is belonging to. I am curious how you are resolving this in your own projects?

Yeah, partial paths are unfortunately not something that can be resolved easily.
In terms of not returning the goal found, we tend to have quite small polygons, and thus we rarely have more than one target location per polygon.  If there is more than one goal per polygon, I just brute-force search for the closest one in the findStraightPath stage.

RE determining which goal node was found:  I haven't thought about this enough to be 100% certain that it works, but I think the goal node found will be the one that is closest by L2 distance to the location of path[pathCount - 1].  That is a fairly simple/cheap thing and could be easily added -- assuming there isn't something I am missing and it actually works.

This wasn't as simple as I thought as you need get the value of crossSide to get the correct position for path[*pathCount - 2].  It does pass a test I wrote that uses a different method that I am sure works (I just increased the value of DT_NODE_STATE_BITS and put the index of each goal there) to generate ground truth.  To generate the set of goals, I sampled a couple points, and then randomly jittered each of them a couple times to ensure there were multiple end points in the same polygon.

Thank you for the attempts, but this change turned out to be more complex than I would have anticipated. Unfortunately it still comes with some rather particular "quirks" from the user's perspective (partial paths, bidirectionality and the "goal" finding which I am also not too sure about). For those reasons I don't really think it is worth it to integrate this into the library in the current state. The crux of the matter being that Detour's data is simply not set up to handle this kind of query in a natural way so that it can come without surprises to users.
I realize you have spent a lot of time and I am sorry about that, but unfortunately stuff has just gathered up to a point where I don't think it is worth it anymore.

Yeah, I agree that this has gotten a too convoluted and has too many caveats for there to be a nice user experience. I have been implementing this as a reversed as that provides an elegant algorithm, but has one caveat I knew about (requiring bidirectional edges) and one I didn't know about (partial paths not making any sense).  There is also the complication of figuring out which goal was found.  With the way recast is currently structured, none of these caveats and complications are easy to deal with.
I will take one more shot at this functionality however:  Finding the closest goal from a list of goals can also be implemented with a forward search.  This isn't as nice of an algorithm, and it has worse worst case asymptotic complexity (O(N * num_goals) as opposed to staying O(N)).  However, it doesn't have the caveats and complications that a reverse search does.  There are two caveats that I know of 1) if you have more than O(log(N)) goals, you'd be better of doing a full dijkstra expand, 2) partial paths will still be kinda weird as the goal the algorithm believes will be the closest can change as you increase the length of the search.
One note: The way I am constructing a multi-goal heuristic is by taking the min of all the individual heuristics.  This will result in an admissible heuristic (if all the individual ones are admissible) and a consistent heuristic (once again, if all the individual ones are).  So A* will work as expected.
If forward search seems like a more reasonable way of achieving this functionality, I can clean up the code a bit and add some comments.


Update class_generator.py to handle output file name - 1962

[Auto generated]
Number: [#1962]

openshift-python-wrapper[pull_request][4d98-11ef-9fdf-e9e7cbd53712][PR 1962]: Closing issue for PR: Update class_generator.py to handle output file name.
PR was closed.


Improve nested loop operator

Also adds a constructor to the Page class for when no blocks are passed as arguments.

Marking as WIP - I think I have a much better approach

@pettyjamesm which of the optimizations in this PR are valid when we assume that cross join cannot do build pruning? Can the PR be simplified then?

@pettyjamesm which of the optimizations in this PR are valid when we assume that cross join cannot do build pruning (which it cant)? Can the PR be simplified?

Good to know and thanks for the review. I've stripped out the parts that aren't necessary when we can safely assume no pruning actually happens. Should be ready for another review now.


Sample groups

Charlie converted the sample_groups variable (in yaml files) to a sample_set variable. This solves the following problems with the sample_groups variable:

sample_groups grabs both the sample_set and the probe_set as a list (instead of as separate variables)
it requires an exact match to the probe_set column, resulting in the potential exclusion of valid samples (e.g. if a user inputs ['JJJ', 'DR1,VAR4'] then any matches to JJJ with 'DR1,VAR5' would be ignored.
it makes the assumption that there might be multiple probe sets to analyze (inherent in being a list) when in reality our variant calling system can only handle one probeset at a time
it's completely redundant with the probe_set variable (which actually specifies the probe set a user wants to analyze), which also confuses new users.

created this pull request on Charlie's behalf after reviewing changes, which I'm now approving


Update to ReactiveKit 3.2.2

Current coverage is 71.28% (diff: 100%)

Merging #367 into master will not change coverage

@@             master       #367   diff @@
==========================================
  Files            51         51
  Lines          2476       2476
  Methods           0          0
  Messages          0          0
  Branches          0          0
==========================================
  Hits           1765       1765
  Misses          711        711
  Partials          0          0

Powered by Codecov. Last update 3dadbe0...59340fb