text:
Powerstrip socket 3 ports not switching individually

The Lidl Powerstrip socket 3 ports not switching individually. When connected to the Lidl Zigbee hub all three ports can be switched individually.
But when connected to Homey, when you press one of the three added buttons, all power ports switch.
Tested with the Lidl and Tuya zigbee Homey app. But same results.
Does anyone have a suggestion?

Hi,
is your Homey and the app up to date?
Mine is and I have 3 independent switches to control.
I had a problem earlier with a 4 relais card with Tuya Zigbee 3.0 and when contacted Homey with this problem they told me to Re-Upgrade the Homey by a special proces.
I can explain it here, but the best way is to contact them, i had a responce within 4 hours.
I had some problem doing the upgrade with Chrome, but with their support it went super...
Succes and please let us know how it went

Yes, homey and apps are up to date.I will contact homey !Thank you!Op 27 nov. 2021 13:03 schreef Paul @.***>:
Hi,
is your Homey and the app up to date?
Mine is and I have 3 independent switches to control.
I had a problem earlier with a 4 relais card with Tuya Zigbee 3.0 and when contacted Homey with this problem they told me to Re-Upgrade the Homey by a special proces.
I can explain it here, but the best way is to contact them, i had a responce within 4 hours.
I had some problem doing the upgrade with Chrome, but with their support it went super...
Succes and please let us know how it went
—You are receiving this because you authored the thread.Reply to this email directly, view it on GitHub, or unsubscribe.Triage notifications on the go with GitHub Mobile for iOS or Android.

Hi @jellelambers, do you still have the problem?

@jellelambers, if this still is a problem please ask to reopen this issue.

@JohanBendz To me this is still a problem. The problem is described very well over here: https://github.com/Koenkk/zigbee2mqtt/issues/9564, and the PR with a similar fix is over here: https://github.com/Koenkk/zigbee-herdsman-converters/pull/3967

authors: JohanBendz jellelambers kb-net martijnpieters


text:
Device Request - MOES Smart Dimmer Switch Dimmable 1-3Gang - _TZE204_hlx9tnzb / TS0601

"ids": {
"modelId": "TS0601",
"manufacturerName": "_TZE204_hlx9tnzb"
},
"endpoints": {
"endpointDescriptors": [
{
"endpointId": 1,
"applicationProfileId": 260,
"applicationDeviceId": 81,
"applicationDeviceVersion": 0,
"_reserved1": 1,
"inputClusters": [
4,
5,
61184,
0
],
"outputClusters": [
25,
10
]
},
{
"endpointId": 242,
"applicationProfileId": 41440,
"applicationDeviceId": 97,
"applicationDeviceVersion": 0,
"_reserved1": 0,
"inputClusters": [],
"outputClusters": [
33
]
}
],
"endpoints": {
"1": {
"clusters": {
"groups": {},
"scenes": {},
"basic": {}
},
"bindings": {
"ota": {},
"time": {
"attributes": [
{
"acl": [
"readable"
],
"id": 65533,
"name": "clusterRevision",
"value": 1
}
]
}
}
},
"242": {
"clusters": {},
"bindings": {}
}
}
}

Added

source: gharchive/issue

license: MIT

license_type: permissive

license_source: github-api


text:
Error when using multiple entry points.

When you are using multiple input entry points you get no response so it triggers the foreach error
https://github.com/JohnPremKumar/vite-plugin-favicons-inject/blob/main/src/index.js#L61-L62

export default defineConfig(({ mode }) => {
  const env = loadEnv(mode, process.cwd(), '');
  let faviconPlugin = () => null;
  if (env.NODE_ENV === 'production') {
    faviconPlugin = vitePluginFaviconsInject('./src/favicon.svg');
  }
  return {
    test: vitestConfig.test,
    resolve: {
      alias: {
        '@': path.resolve(__dirname, './src'),
      },
    },
    define: {
      __APP_ENV__: env.APP_ENV,
    },
    root: './',
    base: './',
    build: {
      sourcemap: true,
      outDir: './dist',
      assetsDir: 'assets',
      rollupOptions: {
        input: {
          main: path.resolve(__dirname, './index.html'),
          fonts: path.resolve(__dirname, './src/fonts.ts'),
        },
        output: {
          entryFileNames: 'assets/[name].js',
          chunkFileNames: 'assets/[name].js',
          assetFileNames: 'assets/[name].[ext]',
        },
      },
    },
    plugins: [
      vue(),
      faviconPlugin(),
      createHtmlPlugin({
        minify: false, // true,
        inject: {
          data: {
            title: env.VITE_APPLICATION_TITLE,
          },
        },
      }),
    ],
  };
});

Is there any way to disable this plugin for my other separate entry points.

As suggested, I have added the parameter to fail without errors on such above mentioned cases. You can refer the documentation for the same from here.
I am planning to add support for multiple entry points in the future version. So keeping this issue open for the meantime

authors: JohnPremKumar michaelmano


text:
[Auth] Unable to use custom callback without server port parameter

What do you think about merging the property's redirectUrl with the listeningPort on the creation of the WebAPIFactory ?
I'm unable to use a custom URL without port
WebAPIFactory webApiFactory = new WebAPIFactory(
               "http://mydomain.com/spotify/oauth:80",
               "26d287105e31491889f3cd293d85bfea",
               Scope.UserReadPrivate | Scope.UserReadEmail | Scope.PlaylistReadPrivate | Scope.UserLibraryRead |
               Scope.UserReadPrivate | Scope.UserFollowRead | Scope.UserReadBirthdate | Scope.UserTopRead | Scope.PlaylistReadCollaborative |
               Scope.UserReadRecentlyPlayed | Scope.UserReadPlaybackState | Scope.UserModifyPlaybackState);

Could be used like this then, as it doesn't require to use a listening port parameter
WebAPIFactory webApiFactory = new WebAPIFactory(
               "http://mydomain.com/spotify/oauth",
               "26d287105e31491889f3cd293d85bfea",
               Scope.UserReadPrivate | Scope.UserReadEmail | Scope.PlaylistReadPrivate | Scope.UserLibraryRead |
               Scope.UserReadPrivate | Scope.UserFollowRead | Scope.UserReadBirthdate | Scope.UserTopRead | Scope.PlaylistReadCollaborative |
               Scope.UserReadRecentlyPlayed | Scope.UserReadPlaybackState | Scope.UserModifyPlaybackState);

https://github.com/JohnnyCrazy/SpotifyAPI-NET/blob/master/SpotifyAPI/Web/Auth/WebApiFactory.cs#L24

So, on which port should it listen on in your second example? 80?

Is it not possible to redirect to a url without listening port ? Like redirecting it directly to http://mydomain.com/spotify/oauth

But ether way, it's just a proposal. I'll have to use the AutorizationCodeAuth anyway myself, since the ImplicitGrantAuth will not be able to refresh the token.

http://mydomain.com/spotify/oauth should be treated the same as http://mydomain.com/spotify/oauth:80. Is there anything wrong with using
WebAPIFactory webApiFactory = new WebAPIFactory(
               "http://mydomain.com/spotify/oauth",
                80
               "26d287105e31491889f3cd293d85bfea",
               Scope.UserReadPrivate | Scope.UserReadEmail | Scope.PlaylistReadPrivate | Scope.UserLibraryRead |
               Scope.UserReadPrivate | Scope.UserFollowRead | Scope.UserReadBirthdate | Scope.UserTopRead | Scope.PlaylistReadCollaborative |
               Scope.UserReadRecentlyPlayed | Scope.UserReadPlaybackState | Scope.UserModifyPlaybackState);

Or is some stuff not working then?

Indeed I tried that (technically it should work fine since 80 is the default http port, but for some reason the callback url is not working.
Perhaps it's my .htaccess file that's messing with the redirect.
http://jimmyappelt.be/spotify/oauth/
http://jimmyappelt.be/spotify/oauth:80

Ohhhh wait, the schema is simply wrong. It has to be http://jimmyappelt.be:80/spotify/oauth. Guess we didn't think of HTTP Paths back when we did the factory.
Maybe we can use some internal URI class to generate the correct one, including the path and port

@JohnnyCrazy oww of coarse, how did I overlooked that :) Perhaps the UriBuilder is a good option.

authors: JimmyAppelt JohnnyCrazy

repo: JohnnyCrazy/SpotifyAPI-NET

license: mit

license_source: bigquery


text:
批量下载失效，求更新

现在是www.iesdouyin.com/share/user/61991094632?XXXXXXXXXXXX
这种，跳转后是
https://www.douyin.com/user/MS4wLjABAAAAt7VyKvSkkHz_WufLbS8dKIR5tQwCprWUJATHh49BTRU
这种，
配置文件放上面两种都会失败闪退
求更新

注意看readme，配置文件中输入的是app内分享的链接，不是这种格式

authors: Johnserf-Seed jayvzh

repo: Johnserf-Seed/TikTokDownload


text:
Proposals: Evaluation Phase

Specification
Evaluation Phase

After a proposal is approved, it can be voted down by all those who voted for it - that is every yes vote can change into a no vote during the evaluation phase
Partial payouts: In the first cycle, 10% of total is paid out. Over the total number of cycles the proposal is running, each cycle a number of additional funds is paid out. Either in a linear or in a stepping up fashion.
Minimum run time is 3 cycles
Default payout is 10% (initial), 30% (end of cycle 1), 30% (end of cycle 2), 30% (end of cycle 3)

Stepped payout
We could also use a stepping function where each cycle the number paid out increases, i.e.

10%
20%
30%
40%

Implementation
New state: evalulate
Instead of "passed" / "closed", proposal goes into "evalulate" state
onperiod changes
In onperiod, we check all eval state proposals

if the votes changed, it is closed down
if the votes didn't change (still passing) we pay out the next chunk

Data changes and create action changes
In the creation of a proposal, and the props table, there's additional parameters

Initial payout (default 10%, can't be higher than 20%)
number of cycles (minimum 3)
props table: add "cycle this proposal was passed" so we know which cycle we are in, compared to total cycle, which we're already counting.
Alternatively, add "age" and increase age every time on onperiod, until it reached number of cycles. Age seems more intuitive and less error prone here.

Add a function that calculates the number of Seeds to pay out in a given cycle, given the following parameters:
total cycle, cycle proposal was passed, total number of seeds requested

Discussion today with Nik:

Move the proposal data structure to a JSON-like(map) data prop.
We need to validate the schema for the map, based on the version (Json schema like validation)
This will allow the evolution of Proposals, to evolve using Roles etc.

Hello I have some questions:

If a user voted no, then that user can't change their vote later on in the next proposal's cycles, right?
Is there an upper limit on the number of cycles a proposal can run?

Either in a linear or in a stepping up fashion

Does this have to be chosen when the proposal is created?

Instead of "passed" / "closed", proposal goes into "evalulate" state

Just to make sure I understood, if a proposal passes, then it goes to evaluate state and the initial payout is given, but if the proposal didn't pass, then it does not enter in the evaluation phase, it simply gets rejected. Then in the next cycles the proposal can still get rejected if their votes changed.

If a user voted "no", then that user can't change their vote to a "yes" later on in the next cycles, a user can only change their vote if it was a "yes" initially, right? --> Yes

Also, users that didn't vote, they can't vote in the future cycles for the already passed proposal, right? --> Yes

When a user changes their vote, the first favour points the user granted are removed and replaced by the new against points? or the favour points remain the same and just count the against points as a new vote? --> Just reverse the sign: positive votes become negative votes

Is there an upper limit on the number of cycles a proposal can run? --> 1 year (24 cycles)

Should the staked amount and the reputation be refunded as soon as the proposal gets in the evaluation phase? --> Yes

Can the initial payout be smaller than 10%? --> Yes

Is it a good idea to store the amount of Seeds already given to a proposal? I mean, in the proposal table --> Yes

When a proposal is an alliance type, it sends the requested amount to the escrow locks, if the amount is sent in different payments, then a user (or the recipient) will have several escrow lock entries, is that a problem? --> Maybe Alliance types  work different, will talk to Rieki

In the example of the stepped function: --> We will use a default distribution, will be decided with Rieki

Does this have to be chosen when the proposal is created? --> It can be edited until the proposal is live

Just to make sure I understood:
1- The proposal is created, and its creator has to stake the required amount during the cycle the proposal was created
2- Then, in onperiod the staged proposal changes to active if it has enough stake, now users can vote
3- Then, then next cycle, in onperiod the active proposal is checked, if it passes, then it goes to the evaluate state and the initial payout is given, here the age counter starts in 0. If the proposal didn't pass, then it does not enter in the evaluation phase, it simply gets rejected.
4- Then in the next cycles the proposal can be rejected if their votes changed.
5- If the proposal wasn't rejected, at the end of its cycles, then it gets into the close state
--> Yes, this is correct, add an index to find the ones by status

authors: IanMendozaJaimes juliolrmonteiro n13

repo: JoinSEEDS/seeds-smart-contracts


text:
Deprecate Quilt support

27/06: Quilt seems to be falling apart for the worse. We should consider deprecating Quilt support and eventually removing support altogether.

Maybe replace Quilt with NeoForge, that seems to pick up right now.

repo: Jomcraft-Network/JomcraftAPI


text:
[question] How are things like tauri's AppHandle / Window being passed to async_graphql's Context

Note: I would have made this a discussion but it seems like they're not enabled for this repo

I'm using this plugin (still works great btw), but am curious how something like ctx.data::<AppHandle>() is working? ctx is from async_graphql, and AppHandle is something from tauri.
I've been searching through the source code of this plugin, hoping to find an obvious place where you're saying "add tauri's app handle to async_graphql's context", but the only reference to it is in an example in a comment. So, it seems very magical at the moment.

Of course, after posting this I noticed this, which probably answers my question:
https://github.com/JonasKruckenberg/tauri-plugin-graphql/blob/78b092deda2e8621a2291c480372d7b3e814b735/src/lib.rs#L246
Now I'm wondering why .inner is needed in subscriptions
https://github.com/JonasKruckenberg/tauri-plugin-graphql/blob/78b092deda2e8621a2291c480372d7b3e814b735/src/lib.rs#L258

repo: JonasKruckenberg/tauri-plugin-graphql


text:
the images explains everything

Describe your bug here. Mind you, if you are modding, please try testing your bug in a clean version of the engine instead, this ensures the bug is actually caused by the engine itself. Also, if you're using an older version of JSE, please try the latest action build in the Actions tab or the latest release build. The issue has probably been fixed since that version. Oh yeah, and also be sure to check the pinned 'JS Engine: Known Issues' issue, to double check if your issue hasn't already been found!

Command Prompt/Terminal/Crash logs (if existing)
jgh

Have you identified any steps to reproduce the bug? If so, please describe them below in as much detail as possible. Use images if possible.
ghjfghj

Are you modding a build from source or with Lua?
Lua
What is your build target?
Windows
Did you edit anything in this build? If so, mention or summarize your changes.
I only added scripts
If you use 1.12.0 or earlier, did you have Optimized Chart Loading turned on?
None
Did you check for any similar issues to what you're reporting? Check, then come back here. If there is a similar issue, then do not report the issue, otherwise it will be marked as a duplicate.
Yes

yeah, idk how to fix this 🤷♂

yeah, it happens to me too, it doesn't annoy me since it doesn't get in the way of charting

Oh no, a blud just fucked up the custom note types system 💀. How sadly for JS Engine users

#evryone it's the hurt notes skin


text:
Doesn't support threading

Got the following error trying to create notification:
  File "/lib/python3.12/site-packages/mac_notifications/manager.py", line 48, in __init__
    signal.signal(signal.SIGINT, handler=self.catch_keyboard_interrupt)
  File "/lib/python3.12/signal.py", line 56, in signal
    handler = _signal.signal(_enum_to_int(signalnum), _enum_to_int(handler))
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: signal only works in main thread of the main interpreter

Curious question. Why would u want to use this as multithreading app ? I mean if u want to use in more threads, just make it in rust,go whatever and let their own schedulers to spawn their threads, where those threads can run some py script (like this example) or you can compile it into binary thru python c compiler and exec this like any other bin command.

First of all, thank you for raising this @azhuchkov. I think you can use threading, but you will need to launch the notification from the main thread. That means you'll have to setup communication channels between your new threads and the main threads.
I will add this to the README to be more clear.
@Spuxy I do understand your point, but switching between programming languages might be easy for you, but might make it much more complicated for someone else's use-case if they don't know these languages.
Closing the tread :)

authors: Jorricks Spuxy azhuchkov

repo: Jorricks/macos-notifications


text:
Fetch collections

ItchioLibrary: import free games not owned from all the collection of the user as per #112

Before I actually review this, can you please clean the code up? It's a mismatch of tab and space indentation:
https://github.com/JosefNemec/PlayniteExtensions#contributions

I also think that this should be configurable option, not everyone may want to import games from collections.

I fixed the indentation, about the configurable option: can I expand it to let the user choose what type of media to be imported, besides "game" and "tool"?
I think there could be 2 options:

Import free games from my collections (yes/no)
Type of media to be imported (multiple selection)

Owned games are already imported regardless of being into a collection, so they would not be affected by the former.

Those two options sound good to me.

Added both options to the plugin settings, I still need a hint on how the localization is handled: I tried to edit en_US.xaml and run UpdateLocExtFiles.ps1, but it removes the new lines.

source: gharchive/pull-request

repo: JosefNemec/PlayniteExtensions


text:
Starcraft 2 bugs

Software information
Starcraft 2 Extreme (max) settings
System information

GPU: RX Vega 56

Driver: Mesa 19.3.0-devel (git-0142dcb990) + RADV + LLVM 10.0.0

Wine version: ge-protonified-nofshack-4.9 (Lutris)

D9VK version: 0.20-frogcookie

[x] When setting Post-processing to Ultra (it enables Depth of Field effect) I experience a strange effect.   See this video: https://youtu.be/YKQ9JByuivs : Fixed with b738c422

[x] When setting shadows to Ultra, they aren't being shown correctly or at all.  Also I notice a black square with what looks like some of the shadows, but scaled really small, see last image. : Fixed with b738c422

[x] When switching from Ultra to High shaders, game crashes with e_gfxErrorShaderCompilerFailed  See video: https://youtu.be/k94a-S6Wkzk : Fixed with b738c422

Native:

D9VK:

D9VK:

Apitrace file(s)

Depth of Field trace
Shadows trace

Log files

d3d9.log: SC2_x64_d3d9.log << new 30/8/19
dxgi.log: SC2_x64_dxgi.log << new 30/8/19

I don't see the "Depth of Field" issue on Nvidia.
The shadows issue is known, with Low Shaders you have small circular shadows (Low Shadows) below the units, anything above it doesn't work yet. But should get implemented once Josh finds the time.
Awesome bug report btw, and thank you for the traces,

On my machine, I see the same problem, but not just on ultra settings. The shadows do not show up on medium, either.

On my machine, I see the same problem, but not just on ultra settings. The shadows do not show up on medium, either.

Yes you're correct, I should have said shadows are broken on anything above Low settings.  I was just testing with Extreme settings with all features on.

Just here to confirm on NVIDIA I also see no Shadows.

Just here to confirm on NVIDIA I also see no Shadows.

Same here, tested for each graphic level settings.
If I'm right, shadows implementation is not done yet.

Any update on these issues?  I was also wondering if we knew whether the 1st bug was a d9vk issue or a mesa driver issue?  I notice nvidia users don't experience this problem and it could be reported on the mesa bug tracker if it's not a d9vk problem.

Any update on these issues? I was also wondering if we knew whether the 1st bug was a d9vk issue or a mesa driver issue? I notice nvidia users don't experience this problem and it could be reported on the mesa bug tracker if it's not a d9vk problem.
For the last few months I was experiencing a crash, that I thought was due to an old LLVM, but I'm getting it with LLVM 10 and I've figure out how to replicate it. It could be related the first bug.
By switching from Ultra shaders > Medium the game crashes with e_gfxErrorShaderCompilerFailed
The last things in the log file:

warn:  ConvertFormat: Unknown format encountered: D3D9Format::AL16
warn:  ConvertFormat: Unknown format encountered: D3D9Format::R16

Video showing the crash: https://youtu.be/k94a-S6Wkzk
SC2_x64_d3d9.log

Only the 2nd issue happens with nvidia proprietary driver.
No shadows at all with any graphic level. This issue can also be found in other games like half-life blackmesa

Can you test with: https://github.com/doitsujin/dxvk/commit/b738c4220b7f2ea71cf2f1f61521a08606ee7022

I can test it but I cannot produce the dlls.

https://git.froggi.es/doitsujin/dxvk/-/jobs

The first 2 bugs are fixed for me now.  I need further testing for the 3rd bug as I've experienced random crashes in previous builds with the same error message.  Thanks!  Will do some more testing =)

The game definitely looks better now and the improvement does not seem to cost any fps.
b738c42:

DXVK 1.5:

All 3 of the original bugs I found appear to be fixed, however I've experienced some random crashes with older builds resulting in the familiar e_gfxErrorShaderCompilerFailed message, and also had the same message when trying to load certain custom games.  It appears to happen a lot less with this new build so far, and some games that crashed before now work....  However I'm still experiencing a crash with a Tower Defense map.  It either hangs or crashes on the loading screen with that error message e_gfxErrorShaderCompilerFailed.
I've created a trace.
Tower Defense trace
SC2_x64_d3d9.log

Here are two more maps that crash on the loading screen with the same error message as above.   Hopefully it's all the same issue causing the crashes.
Direct Strike trace
Hero Line Wars Starlight trace
FYI these crashes have been happening since early d9vk builds, I just didn't bother reporting as I thought they were related to bug #3.

Tested with DXVK 1.5.1 - it works great now. Shadows are present at 60 fps. Great job!

@LeJimster You'll need to use native d3dx9 and d3dcompiler as Wine's impls make invalid calls/shaders.
If it still happens can you open an issue about it on the main DXVK tracker? Cheers.

authors: EldarAgalarov IngeniousDox Joshua-Ashton LeJimster LiamDawe LinLo Venemo duramuss v21cesc

license: Zlib


text:
query from two table

Creates a  prepared Statement from the SQL string like this:
"select a.id ,b.id from table_a as a ,table_b as b "
there is one "id" property in the result object

This is consistent with the behavior of SQLite itself. The SQLite
documentation says:

The name of a result column is the value of the "AS" clause for that
column, if there is an AS clause. If there is no AS clause then the
name of the column is unspecified and may change from one release of
SQLite to the next.

The following program demonstrates that SQLite uses the same name id
for each column in your above query (code adapted from quickstart):
#include <stdio.h>
#include <sqlite3.h>

static int print_row(void *unused, int argc, char **argv, char **column_names) {
  int i;
  for (i = 0; i < argc; i++) {
    printf("%s = %s\n", column_names[i], argv[i] ? argv[i] : "NULL");
  }
  printf("\n");
  return 0;
}

static void run(sqlite3 *db, const char *stmt) {
  int rc;
  char *err = NULL;
  rc = sqlite3_exec(db, stmt, print_row, 0, &err);
  if (rc != SQLITE_OK) {
    fprintf(stderr, "SQL error: %s\n", err);
    sqlite3_free(err);
  }
}

int main(int argc, char **argv){
  sqlite3 *db;
  char *err = NULL;
  int rc;
  if (sqlite3_open(":memory:", &db) != SQLITE_OK) {
    fprintf(stderr, "fatal: failed to open database: %s\n", sqlite3_errmsg(db));
    sqlite3_close(db);
    return 1;
  }
  run(db, "CREATE TABLE table_a (id)");
  run(db, "CREATE TABLE table_b (id)");
  run(db, "INSERT INTO table_a (id) VALUES (1)");
  run(db, "INSERT INTO table_b (id) VALUES (2)");
  run(db, "SELECT a.id, b.id FROM table_a AS a, table_b AS b");
  sqlite3_close(db);
  return 0;
}

(Build and run with gcc main.c -lsqlite3 && ./a.out.)
The output is
id = 1
id = 2

As you can see, both columns have the same name.
The better-sqlite3 package uses the sqlite3_column_name function to
determine the result set, so it is subject to the same
restrictions. Specifically: if you want to have any guarantee about the
names of keys in your result set, you must use an AS clause in your
SELECT statement.

@wchargin thank you for your detailed explaination

This will be an optional feature of version 5 (coming soon).

This is now possible in version 5.0.0, via the new statement.expand() method.

authors: JoshuaWise wchargin zhouever


text:
fix the installing guide for Windows

The old guide do not work anymore, update the guide to latest toolchain.

Thanks for helping with this!

authors: JoshuaWise Losses


text:
Fixed navbar links

I was actually browsing Bulbs documentation earlier trying to integrate it into a side project, when I realized that both the releases and "report a bug" links point to Input...
This PR just changes it to bulbs repo.

lmao thank you

authors: JujuAdams tabularelf

repo: JujuAdams/Bulb


text:
Update how to benchmark code with rust

This is how I benchmark my rust code.
It should return same results as you.

Nice, this is simpler! Same results:
❯ cargo +nightly bench
   Compiling lmp v0.1.0 (/Users/alec/prog/Learn/Benchmarks/LifeModelingProblem/rust)
    Finished bench [optimized] target(s) in 0.71s
     Running unittests src/main.rs (target/release/deps/lmp-7dfc874d669fe885)

running 2 tests
test bench_xor_1000_ints  ... bench:          22 ns/iter (+/- 1)
test bench_xor_1000_ints2 ... bench:          14 ns/iter (+/- 0)

authors: JeannotJeannot alecloudenback

repo: JuliaActuary/Learn


text:
AbstractDifferentiation stable docs 404

https://juliadiff.org/AbstractDifferentiation.jl/stable
Gives a 404 error

That's expected. Stable docs are only built when a new release is tagged, and there hasn't been a new release since the doc website was added. This will be fixed automatically once the next release is made (but this might take a few days since it will be a breaking release and we might want to include more breaking changes).


text:
Interpolate: Apply UniqueCoords when required

The Kriging models requires a geotable with unique coordinates.

Codecov Report
Attention: Patch coverage is 93.33333% with 1 line in your changes missing coverage. Please review.

Project coverage is 93.49%. Comparing base (103669c) to head (5f42134).

Files with missing lines
Patch %
Lines

src/utils.jl
85.71%
1 Missing :warning:

Additional details and impacted files
@@            Coverage Diff             @@
##             main      #59      +/-   ##
==========================================
- Coverage   94.73%   93.49%   -1.24%
==========================================
  Files          20       20
  Lines         835      846      +11
==========================================
  Hits          791      791
- Misses         44       55      +11

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

As discussed internally I believe we can document this Kriging restriction better instead of forcing the UniqueCoords. Closing for now.

authors: codecov-commenter eliascarv juliohm


text:
write to shapefile

PR to be able to export to shapefile using Shapefile.jl and improve geointerface functionality. Whem geometries are Multi, exporting to .shp is quite easy with SHP.write(fname, geotable), otherwise we need to convert to Multi and then write.

@juliohm I started a discussion in Shapefile.jl, let's see what they say. I will also like to be able to write to other formats using ArchGDAL. Should I start that in a separate PR? I think we can use something similar to GeoDataFrames.jl:
https://github.com/evetion/GeoDataFrames.jl/blob/fec887c71124adf1dd11c33878ed6186aba10bd3/src/io.jl#L73C1-L164
Let me know your thoughts.

Thank you @ErickChacon for these great additions. Can you explain why our save doesn't cover the ArchGDAL.jl case? If we pass a geotable with geometry column following the GeoInterface.jl shouldn't ArchGDAL.jl provide a similar AG.write function?

Thank you @ErickChacon for these great additions. Can you explain why our save doesn't cover the ArchGDAL.jl case? If we pass a geotable with geometry column following the GeoInterface.jl shouldn't ArchGDAL.jl provide a similar AG.write function?

Last time I checked it, there was no functionality to write from a table. I needed to manually convert a table to an ArchGDAL dataset iterating over rows to push features. I will check if this has been improved.

That would be great. Maybe it is another situation where we need to fix the issue upstream in ArchGDAL.jl, adding a write function there before coming back here. This is a good exercise to improve the status of these loaders.

That would be great. Maybe it is another situation where we need to fix the issue upstream in ArchGDAL.jl, adding a write function there before coming back here. This is a good exercise to improve the status of these loaders.

Just to let you know that there is an attempt at yeesian/ArchGDAL.jl#243 to create an IFeatureLayer from a Table. Once something like that is merged, we could easily use ArchGDAL to export to other format types.
With respect to Shapefile.jl, I started an issue, should we accept our current fix until that issue is solved? Or should we keep the adequate code (removing the conditional lines) and accepting that an error will be thrown when attempting to write a Chain and PolyArea to a .shp file?

Let's remove the conditional and wait for the Shapefile.jl fix then. I can
merge it here soon and release a new patch.
Em qua., 3 de mai. de 2023 20:40, Dr. Erick A. Chacón Montalván <
@.***> escreveu:

That would be great. Maybe it is another situation where we need to fix
the issue upstream in ArchGDAL.jl, adding a write function there before
coming back here. This is a good exercise to improve the status of these
loaders.
Just to let you know that there is an attempt at yeesian/ArchGDAL.jl#243
https://github.com/yeesian/ArchGDAL.jl/pull/243 to create an
IFeatureLayer from a Table. Once something like that is merged, we could
easily use ArchGDAL to export to other format types.
With respect to Shapefile.jl, I started an issue, should we accept our
current fix until that issue is solved? Or should we keep the adequate code
(removing the conditional lines) and accepting that an error will be thrown
when attempting to write a Chain and PolyArea to a .shp file?
—
Reply to this email directly, view it on GitHub
https://github.com/JuliaEarth/GeoTables.jl/pull/15#issuecomment-1533884587,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAZQW3MB7LKGBFA6T2PJLHTXELUE7ANCNFSM6AAAAAAXUWU53Q
.
You are receiving this because you were mentioned.Message ID:
@.***>

Do we need more tests for the save functionality?

I am wondering why our tests are failing only on GitHub Actions. Any clue why the HTTP requests are failing from GADM.jl?

Do we need more tests for the save functionality?

Yes, I forgot about it. Should I do it similar to the existing test with "geo.json"?

I am wondering why our tests are failing only on GitHub Actions. Any clue why the HTTP requests are failing from GADM.jl?

No, I haven't checked it. I will check it.

Should I do it similar to the existing test with "geojson"?

That would be great, but feel free to add other tests you have in mind too.

I've updated the test/Project.toml in GADM.jl to see if the issue was coming from there, and learned that ArchGDAL.jl is not even building there in GitHub Actions: https://github.com/JuliaGeo/GADM.jl/issues/49
I really dislike the whole GDAL experience, so full of issues...

Should I do it similar to the existing test with "geojson"?

That would be great, but feel free to add other tests you have in mind too.

Ok. Should it be better to make the writing test inside the formats testset, so we can take advantage of the already loaded data?

Makes sense to move the writing tests to inside the other test sets. Maybe we can remove the outer "load" test set then?

Makes sense to move the writing tests to inside the other test sets. Maybe we can remove the outer "load" test set then?

Yes, that is what I have in mind. I will do that.

I've updated the test/Project.toml in GADM.jl to see if the issue was coming from there, and learned that ArchGDAL.jl is not even building there in GitHub Actions: JuliaGeo/GADM.jl#49

It builds in Julia 1.6 - ubuntu, but there is still an HTTP problem.
get: Error During Test at /home/runner/work/GADM.jl/GADM.jl/test/GADM.jl:34
  Got exception outside of a @test
  HTTP.Exceptions.RequestError(HTTP.Messages.Request:
  """
  GET /data/gadm3.6/gpkg/gadm36_SUR_gpkg.zip HTTP/1.1
  Host: biogeo.ucdavis.edu
  Accept: */*
  User-Agent: HTTP.jl/1.6.7
  Content-Length: 0

I added tests for writing to .shp and .geojson for points, lines, polygons and multipolygons. I consider this PR completed.

Codecov Report

Merging #15 (37fa290) into master (cea71c8) will decrease coverage by 1.18%.
The diff coverage is 86.31%.

:mega: This organization is not using Codecov’s GitHub App Integration. We recommend you install it so Codecov can continue to function properly for your repositories. Learn more
@@            Coverage Diff             @@
##           master      #15      +/-   ##
==========================================
- Coverage   88.57%   87.39%   -1.18%
==========================================
  Files           3        3
  Lines          70      119      +49
==========================================
+ Hits           62      104      +42
- Misses          8       15       +7

Impacted Files
Coverage Δ

src/conversion.jl
83.87% <83.87%> (+12.44%)
:arrow_up:

src/geotable.jl
88.57% <86.66%> (-5.37%)
:arrow_down:

src/GeoTables.jl
95.45% <94.44%> (-4.55%)
:arrow_down:

Thank you @ErickChacon! ❤

authors: ErickChacon codecov-commenter juliohm


text:
Rename AwkwardArray.Tuple to AwkwardArray.SlotRecord

as discussed AwkwardArray.Tuple type can be confused with Julia Tuple type.

fixed in #77


text:
use jupyter kernelspec install when available

and use ipython kernelspec install for IPython 3, rather than attempting to reimplement the install process.
I didn't change the ipython2, ipython3 checks, but I'm not sure how one can get into a state where ipython2/3 exists but ipython does not.
closes #351

Changes you might want to make:

make --user install optional (allow system-wide install)

Looks good, thanks!  I think the --user is right for the Pkg.build script; if someone wants a system-wide install, they should probably do that manually.

Anaconda has a program called jupyter-kernelspec .... is that related?

jupyter-kernelspec is jupyter kernelspec. jupyter dispatches to subcommands like git, so jupyter foo calls jupyter-foo, etc.

The odd thing is that I got ipython and jupyter-kernelspec from ipython-notebook, but not jupyter unless I explicitly told conda to install jupyter.   Does ipython kernelspec dispatch to jupyter-kernelspec?

authors: minrk stevengj


text:
Add CITATION.cff

Missing identifiers, not sure if required.
For Zenodo generated identifiers the application needs access to the organization.
Closes #115

@NymanLauri are you OK with this?

This is perfect, thank you.

authors: NymanLauri haampie


text:
Non-allocating _firstnonzero and _circulate

As discussed in https://github.com/JuliaLinearAlgebra/ToeplitzMatrices.jl/pull/95#issuecomment-1570256157
julia> @btime Circulant{Int}(1:4, :U)
  1.684 ns (0 allocations: 0 bytes)
4×4 Circulant{Int64, SubArray{Int64, 1, Circulant{Int64, UnitRange{Int64}}, Tuple{Int64, Base.Slice{Base.OneTo{Int64}}}, false}}:
 1  2  3  4
 4  1  2  3
 3  4  1  2
 2  3  4  1

julia> @btime UpperTriangularToeplitz(4:5).vc
  1.682 ns (0 allocations: 0 bytes)
2-element FillArrays.OneElement{Int64, 1, Tuple{Int64}, Tuple{Base.OneTo{Int64}}}:
 4
 ⋅

cc @putianyi889

IMO it should be UpperTriangular{T, Toeplitz{T, Vector{T}, Vector{T}}}, which isn't a Toeplitz, but may have methods defined for it.  The current definition
julia> UpperTriangular(Toeplitz(1:2, 1:2)) |> typeof
UpperTriangularToeplitz{Int64, UnitRange{Int64}}

isn't ideal, as this should construct an UpperTriangular object

You might be right. Fortunately UpperTriangular as well as some other LinearAlgebra constructors on Toeplitz falls back to corresponding toeplitz constructors and can be removed safely.


text:
oversample and undersample always return classes as well

Fix #113 by having the implementation adhere to the docs instead of changing the docs.
The resampled classes are now always returned.
Also, made the under/oversample calls deterministic when shuffle=false.
Since the change is breaking with respect to previous behavior (but non-breaking with respect to the behavior declaimed in the docs) I'm also updating the minor version.

here b/c I am confused about how oversample works.
# 6 observations with 3 features each
X = rand(3, 6)
# 2 classes, severely imbalanced
Y = ["a", "b", "b", "b", "b", "a"]
# oversample the class "a" to match "b"
X_bal, Y_bal = oversample(X, Y)
# this results in a bigger dataset with repeated data
@assert size(X_bal) == (3,8)
@assert length(Y_bal) == 8
# now both "a", and "b" have 4 observations each
@assert sum(Y_bal .== "a") == 4
@assert sum(Y_bal .== "b") == 4

does not hold as advertised...

authors: CarloLucibello SimonEnsemble


text:
Add more convert methods

This supports, for example,
Matrix(Toeplitz([1.,1.],[1.,1.]))
Also adds support for Char inputs to create TriangularToeplitz

Coverage increased (+0.4%) to 71.893% when pulling a52672d1316f65b6dd9dbe93cb4cdc2f480d8c02 on dlfivefifty:pull-request/a52672d1 into af17cb05737751458a36985eec974b1c3883e8eb on JuliaMatrices:master.

Thanks. Looks great. Only thing is that I'd like to avoid is the constructor with the Char argument and only expose the Symbol version. That is the default in Base and I think it is better to only have a single version.

Ok no worries I'll update it
Sent from my iPhone

On 28 Aug 2016, at 08:38, Andreas Noack notifications@github.com wrote:
Thanks. Looks great. Only thing is that I'd like to avoid is the constructor with the Char argument and only expose the Symbol version. That is the default in Base and I think it is better to only have a single version.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub, or mute the thread.

This has now been changed.

Coverage increased (+0.4%) to 71.903% when pulling 327c6f58cba5a49e5f6c2e0610415afd681eaed5 on dlfivefifty:pull-request/a52672d1 into af17cb05737751458a36985eec974b1c3883e8eb on JuliaMatrices:master.

Coverage increased (+0.4%) to 71.903% when pulling 327c6f58cba5a49e5f6c2e0610415afd681eaed5 on dlfivefifty:pull-request/a52672d1 into af17cb05737751458a36985eec974b1c3883e8eb on JuliaMatrices:master.

Coverage increased (+0.4%) to 71.903% when pulling 327c6f58cba5a49e5f6c2e0610415afd681eaed5 on dlfivefifty:pull-request/a52672d1 into af17cb05737751458a36985eec974b1c3883e8eb on JuliaMatrices:master.

Great. Thanks.

authors: andreasnoack coveralls dlfivefifty


text:
Multi-objective optimization and Gurobi

Benoît,
This example doesn't seem to work.
I believe there is an error in:
function MOI.set(model::Gurobi.Optimizer, attr::MultiObjectiveFunction, priority::Int)
which I changed to:
function MOI.set(model::Gurobi.Optimizer, attr::MultiObjectivePriority, priority::Int)
however, I'm getting the following error (all lines of code above this one in your example execute w/out error):
julia> MOI.set(model, Gurobi.NumberOfObjective(), 2)
ERROR: UndefVarError: NumberOfObjective not defined
Stacktrace:
[1] getproperty(::Module, ::Symbol) at ./Base.jl:13
[2] top-level scope at REPL[15]:1
Any help or guidance would be appreciated.
********************** Prior Post *****************
We designed MOI to make solver-specific features such as this accessible through JuMP.
This is not currently support but you should be able to add it by creating new attributes along those lines:
struct NumberOfObjective <: MOI.AbstractModelAttribute
end

function MOI.set(model::Gurobi.Optimizer, ::NumberOfObjective, n::Integer)
    Gurobi.set_intattr!(model, "NumObj", n)
end
function MOI.get(model::Gurobi.Optimizer, ::NumberOfObjective)
    Gurobi.get_intattr!(model, "NumObj")
end

struct MultiObjectiveFunction <: MOI.AbstractModelAttribute
    id::Int
end

function MOI.set(model::Gurobi.Optimizer, attr::MultiObjectiveFunction, f::MOI.ScalarAffineFunction)
    num_vars = length(model.variable_info)
    obj = zeros(Float64, num_vars)
    for term in f.terms
        column = _info(model, term.variable_index).column
        obj[column] += term.coefficient
    end
    # This update is needed because we might have added some variables.
    _update_if_necessary(model)
    i0 = Gurobi.get_int_param(model.inner, "ObjNumber")
    Gurobi.set_int_param!(model.inner, "ObjNumber", attr.id - 1)
    Gurobi.set_dblattrarray!(model.inner, "ObjN", 1, num_vars, obj)
    Gurobi.set_dblattr!(model.inner, "ObjNCon", f.constant)
    Gurobi.set_int_param!(model.inner, "ObjNumber", i0)
    _require_update(model)
end

struct MultiObjectivePriority <: MOI.AbstractModelAttribute
    id::Int
end

function MOI.set(model::Gurobi.Optimizer, attr::MultiObjectiveFunction, priority::Int)
    i0 = Gurobi.get_int_param(model.inner, "ObjNumber")
    Gurobi.set_int_param!(model.inner, "ObjNumber", attr.id - 1)
    Gurobi.set_intattr!(model.inner, "ObjNPriority", priority)
    Gurobi.set_int_param!(model.inner, "ObjNumber", i0)
end

struct MultiObjectiveWeight <: MOI.AbstractModelAttribute
    id::Int
end

function MOI.set(model::Gurobi.Optimizer, attr::MultiObjectiveWeight, weight::Float64)
    i0 = Gurobi.get_int_param(model.inner, "ObjNumber")
    Gurobi.set_int_param!(model.inner, "ObjNumber", attr.id - 1)
    Gurobi.set_dblattr!(model.inner, "ObjNWeight", weight)
    Gurobi.set_int_param!(model.inner, "ObjNumber", i0)
end

Then you should be able to use it in JuMP with
using JuMP
model = Model(with_optimizer(Gurobi.Optimizer))
@variable(model, x)
@variable(model, y)
MOI.set(model, Gurobi.NumberOfObjective(), 2)
MOI.set(model, Gurobi.MultiObjectivePriority(1), 1)
MOI.set(model, Gurobi.MultiObjectivePriority(2), 1)
MOI.set(model, Gurobi.MultiObjectiveWeight(1), 3.0)
MOI.set(model, Gurobi.MultiObjectiveWeight(2), 2.0)
MOI.set(model, Gurobi.MultiObjectiveFunction(1), moi_function(x + y))
MOI.set(model, Gurobi.MultiObjectiveFunction(2), moi_function(2x - y))

PR adding this feature is welcome !
Originally posted by @blegat in https://github.com/JuliaOpt/Gurobi.jl/issues/264#issuecomment-545361143

If you define NumberOfObjective inside the Gurobi package then you can do Gurobi.NumberOfObjective(). If you define it outside of the Gurobi package then you should do NumberOfObjective()

authors: blegat heileman


text:
Problems with LaTeX strings

First of all, thank you very much for the LaTeX string support introduced in v0.15! :)
I've currently found two problems with it which I'd like to report.

Trying to concatenate strings for tick labels fails

xticks = ([0.0, 1.0, 2.0, 3.0],
            [L"a = 0", # regular LaTeXString works fine
            "b = " * "1", # concatenating two regular strings works fine
            "c = " * L"2", # concatenating regular string & LaTeXString causes all latex string rendering for ticks to break
            L"d = " * L"3"]), # concatenating two LaTeXStrings causes all latex string rendering for ticks to break

It would be great if we could use multiple types of strings together. This seems to be due to the fact that the result is always the supertype String and not the more specific LaTeXString.
julia> typeof(L"c = 2")
LaTeXStrings.LaTeXString

julia> typeof("c = " * L"2")
String

Line breaks don't work and cause parsing errors

xticks = ([0.0], [L"a = \\0"])

This would be awesome to have more formatting options.

Inserting regular text causes parsing errors

xticks = ([0.0], [L"a = \text{INPUT} 0"])

Would be cool if this would allow to "inject" regular strings into LaTeXStrings.

Forced spaces in equations cause parsing errors

xticks = ([0.0], [L"a \; = \; 0"])

This would allow for more formatting options.

I'm not sure if I understand the problem fully, but these look like feature requests for: https://github.com/stevengj/LaTeXStrings.jl

I think you're right, most of them should be mentioned over there.
One thing that's likely a suggestion for Makie would be that the following
xticks = ([0.0, 1.0], ["a = 0", L"b = 1"]),

causes both tick labels to be displayed as regular strings, i.e. the LaTeXString is just displayed as $b = 1$ instead of being rendered by the engine.
Maybe it's possible to render the ticks one by one so that they can be treated separately?

The last three things are MathTeXEngine feature requests. The example with the two different types needs a specific routine handling multiple different AbstractStrings in one text plot, that could be a bit more difficult than it sounds due to the special requirement of latexstrings that there needs to be a linesegments plot for sqrt and frac lines.

Cant we just promote ([0.0, 1.0], ["a = 0", L"b = 1"]) to   ([0.0, 1.0], [L"a = 0", L"b = 1"]) ( i dont know the escaping by hard, but I guess one should be able to render a normal string in a latex string

Cant we just promote

This would be a workaround to force math rendering but if a user deliberately wants to combine regularly rendered strings and MathTeXEngine rendered strings, this would get in the way.

I mean my point was, that you can render regular strings as latex strings, no? Am I overestimating the escaping powers for Latex strings?

I may be wrong, but it seem MathTexEngine.jl can't yet render basic fonts (\mathrm{something}) nor spaces (, ; : etc) in LaTeX, otherwise it would be possible to use LaTeXStrings to replace strings. Also, it can't render accent symbols like \vec{a} yet. Well, at least that's what the MathTexEngine.jl says in its current github description.

Yes, I also checked for that, @ghralima. It definitely seems like MathTexEngine.jl needs a bit more work to support usual commands like spaces and text parts. Once that's implemented, we can simply use those tex commands to get what I would like to achieve (mixed formatting of standard strings and latex strings). Once this is done, I suppose promoting all regular strings to tex strings would solve the aforementioned problem with the tex rendering being omitted.

I reported the issues that goes to MathTeXEngine to keep track of everything.

Line breaks don't work and cause parsing errors

This will ignore text alignment at first, because MathTeXEngine currently has no mechanism to deal with text alignment by itself. For single line text this call always be dealt with by the backend so it is not a problem, for multiple lines some work will maybe be needed from the Makie side too.

Inserting regular text causes parsing errors

Once #1160 is finished, it will be accessible using $ e.g. L"$x = 2$ or sometimes $x = 42$".
Supporting other font commands should be possible in the future too (e.g. \mathrm).

authors: Kolaru SimonDanisch fbanning ghralima jkrumbiegel


text:
Add stairs plot

This PR adapts @jkrumbiegel's implementation of a stairs plot in https://gist.github.com/jkrumbiegel/529936a3a6f158715343601d9487880b.
Example:
f = Figure()
x = 1:10
y = 11:20
f[1, 1] = Axis(f; title="step=:pre")
stairs!(f[1, 1], x, y)
f[2, 1] = Axis(f; title="step=:post")
stairs!(f[2, 1], x, y; step=:post)
f[3, 1] = Axis(f; title="step=:center")
stairs!(f[3, 1], x, y; step=:center)
f

Additional options we could add:

ability to style vertical and horizontal segments differently
ability to provide a marker and marker style options to simultaneously scatter

this other case will also be so useful... (histstep)
https://gist.github.com/jkrumbiegel/5baa32d0c010cb842e037603a18663cd

Probably the simplest thing to do for histstep would be to factor the histogram creation code in hist into its own helper function, and then the difference between hist and histstep is only the attributes and whether it calls barplot! or stairs! internally.

authors: lazarusA sethaxen


text:
New package: RegistryCLI v0.1.0

Registering package: RegistryCLI
Repository: https://github.com/triscale-innov/RegistryCLI.jl
Created by: @ffevotte
Version: v0.1.0
Commit: bc08ea1177f769fc605d170c5bc1571771390ad9
Reviewed by: @ffevotte
Reference: https://github.com/triscale-innov/RegistryCLI.jl/commit/bc08ea1177f769fc605d170c5bc1571771390ad9#commitcomment-44894304
Release notes:

First released version.

Julia package feature:

installation procedure

CLI features:

create: create and populate a local clone of a new, empty Registry
add:    add a new version of a package in the Registry

the name is similar, but seems very appropriate for the functionality and the package (an output of the Contributhon) is non-malicious (and is in particular not typo-squatting), so I think it should be manually merged.

Could someone please take a look at this, now that the 3-day waiting period is over?
Thanks in advance!

authors: JuliaRegistrator ericphanson ffevotte

repo: JuliaRegistries/General


text:
New version: GlobalSensitivityAnalysis v2.0.0

Registering package: GlobalSensitivityAnalysis
Repository: https://github.com/lrennels/GlobalSensitivityAnalysis.jl
Created by: @lrennels
Version: v2.0.0
Commit: dffbbb6bee8c5e97e54f5cf3253d71093580a9eb
Reviewed by: @lrennels
Reference: https://github.com/lrennels/GlobalSensitivityAnalysis.jl/commit/dffbbb6bee8c5e97e54f5cf3253d71093580a9eb#commitcomment-45946780

Not sure what these errors are about, but I also meant to make this 1.2.0 so can close this one and retag, but would love some information on why this failed?

Not sure what these errors are about, but I also meant to make this 1.2.0 so can close this one and retag, but would love some information on why this failed?

Unfortunately we're experiencing some issues in CI today.  #27974 should alleviate them.
[noblock]

Unfortunately we're experiencing some issues in CI today.  #27974 should alleviate them.
[noblock]

Ok, closed so that you can register with a different version number :slightly_smiling_face:

Ok, closed so that you can register with a different version number :slightly_smiling_face:

authors: JuliaRegistrator giordano lrennels


text:
New version: DrWatson v1.4.2

Registering package: DrWatson
Repository: https://github.com/JuliaDynamics/DrWatson.jl
Created by: @Datseris
Version: v1.4.2
Commit: c38f7692143789bbdc667a8c127a1a5bbc1c689f
Reviewed by: @Datseris
Reference: https://github.com/JuliaDynamics/DrWatson.jl/commit/c38f7692143789bbdc667a8c127a1a5bbc1c689f#commitcomment-35523440

Your new version pull request does not meet all of the guidelines for automatic merging.
Specifically, your pull request does not meet the following guidelines:

The following dependencies do not have a compat entry that has an upper bound: Requires

It is important to note that if your pull request does not meet the guidelines for automatic merging, this does not mean that your pull request will never be merged. It just means that your pull request will require manual review by a human.

These guidelines are intended not as requirements for packages but as very conservative guidelines, which, if your new package or new version of a package meets them, it may be automatically merged.

[noblock]

Your new version pull request met all of the guidelines for automatic merging.
I will automatically merge this pull request during the next cron job.
If you want to prevent this pull request from being auto-merged, simply leave a comment.
(If you want to post a comment without blocking auto-merging, you must include the text [noblock] in your comment.)

[noblock]

The mandatory waiting period has elapsed.
Your pull request is ready to merge.
I will now merge this pull request.

[noblock]

authors: JuliaRegistrator zeptodoctor


text:
New version: Zygote v0.6.22

Registering package: Zygote
Repository: https://github.com/FluxML/Zygote.jl
Created by: @oxinabox
Version: v0.6.22
Commit: 7f2fed9c58d4650c0295fd9aa0ee92e643a0f0c0
Reviewed by: @oxinabox
Reference: https://github.com/FluxML/Zygote.jl/commit/7f2fed9c58d4650c0295fd9aa0ee92e643a0f0c0#commitcomment-56246442

Replaced by https://github.com/JuliaRegistries/General/pull/44649
[noblock]

authors: JuliaRegistrator mcabbott


text:
BitArray support?

In some cases, @ turbo is far slower on BitArrays than on anything else, and in other cases check_args fails and the vectorization doesn't happen. I can't replicate the check_args failing, but will return with an MWE when I figure that out.
using LoopVectorization, BenchmarkTools

D = rand(10000, 20000); D_bit = D .> .5; D_bool = Array{Bool}(D_bit)

function test_sum_turbo(data::D) where {T, D <: AbstractArray{T,2}}
    contribution = 0
    @turbo for n ∈ axes(data, 1), t ∈ axes(data, 2)
        contribution += data[n,t]
    end
    return contribution
end

julia> @btime test_sum_turbo($D)
  45.742 ms (0 allocations: 0 bytes)
9.999992255027126e7

julia> @btime test_sum_turbo($D_bit)
  69.028 ms (0 allocations: 0 bytes)
99998730

julia> @btime test_sum_turbo($D_bool)
  15.711 ms (0 allocations: 0 bytes)
99998730

Hmm, I get
julia> @btime test_sum_turbo($D)
  94.021 ms (0 allocations: 0 bytes)
9.999797263890678e7

julia> @btime test_sum_turbo($D_bit)
  14.198 ms (0 allocations: 0 bytes)
99995026

julia> @btime test_sum_turbo($D_bool)
  15.336 ms (0 allocations: 0 bytes)
99995026

julia> versioninfo()
Julia Version 1.9.0-DEV.79
Commit df81bf9a96 (2022-02-24 07:30 UTC)
Platform Info:
  OS: Linux (x86_64-redhat-linux)
  CPU: 28 × Intel(R) Core(TM) i9-9940X CPU @ 3.30GHz

What CPU are you using?

I can't replicate the check_args failing

check_args fails when size(D_bit) % 8 != 0.

Oh nooo is this because I switched CPUs?
Julia Version 1.6.5
Commit 9058264a69 (2021-12-19 12:30 UTC)
Platform Info:
  OS: Windows (x86_64-w64-mingw32)
  CPU: AMD Ryzen 9 5900HS with Radeon Graphics
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-11.0.1 (ORCJIT, generic)
Environment:
  JULIA_EDITOR = code
  JULIA_NUM_THREADS =

edit: Yup, Ryzen 9 5000 series doesn't have AVX512 support. That'll account for the entire discrepancy? Is this going to keep slowing me down by factors of 5-10x? I'm still in the return window...

Depends on your workload.
I'm surprised by the fact the Ryzen seems to have 2x the memory bandwidth on a single core, given it was twice as fast for Float64.
Odds are the AVX512 CPU is faster when we make the arrays far smaller:
julia> D = rand(1000, 20); D_bit = D .> .5; D_bool = Array{Bool}(D_bit);

julia> @btime test_sum_turbo($D)
  974.062 ns (0 allocations: 0 bytes)
10002.523135950083

julia> @btime test_sum_turbo($D_bit)
  1.397 μs (0 allocations: 0 bytes)
10039

julia> @btime test_sum_turbo($D_bool)
  1.006 μs (0 allocations: 0 bytes)
10039

But of course, you should care most about the size range and specific problems you're working on.
If you don't need BitArrays, seems like it may be best to avoid them.
But I'm a little surprised, too, that I'm getting worse performance for the BitArray than for the Array{Bool} here.
Looking at the assembly...it is awful. Embarrassingly bad.
.LBB0_7:                                # %L220
                                        #   Parent Loop BB0_4 Depth=1
                                        # =>  This Inner Loop Header: Depth=2
        mov     rcx, rdi
        sar     rcx, 3
        lea     r12, [rax + rcx]
        kmovb   k2, byte ptr [rax + rcx]
        kmovb   k3, byte ptr [rdx + r12]
        kmovb   k4, byte ptr [rsi + r12]
        kmovb   k5, byte ptr [rbx + r12]
        vpsubq  zmm9 {k2}, zmm16, zmm0
        vpsubq  zmm10 {k3}, zmm15, zmm0
        vpsubq  zmm11 {k4}, zmm14, zmm0
        vpsubq  zmm12 {k5}, zmm13, zmm0
        add     rdi, 8
        vmovdqa64       zmm13, zmm12
        vmovdqa64       zmm14, zmm11
        vmovdqa64       zmm15, zmm10
        vmovdqa64       zmm16, zmm9
        vmovdqa64       zmm3, zmm9
        vmovdqa64       zmm2, zmm10
        vmovdqa64       zmm4, zmm11
        vmovdqa64       zmm1, zmm12
        vmovdqa64       zmm8, zmm9
        vmovdqa64       zmm7, zmm10
        vmovdqa64       zmm6, zmm11
        vmovdqa64       zmm5, zmm12
        cmp     r11, rdi
        jge     .LBB0_7

Sure, let's do a little bit of arithmetic, and then do 3x the work by copying the memory all over the place for no reason.

Yup Intel has the edge on the smaller size by ~20% with floats, and ~40% with bools (and 700% with bitarrays).
julia>  D = rand(1000, 20); D_bit = D .> .5; D_bool = Array{Bool}(D_bit);

julia> @btime test_sum_turbo($D)
  1.150 μs (0 allocations: 0 bytes)
10026.229647114582

julia> @btime test_sum_turbo($D_bit)
  8.800 μs (0 allocations: 0 bytes)
9985

julia> @btime test_sum_turbo($D_bool)
  1.390 μs (0 allocations: 0 bytes)
9985

BitArrays aren't necessary for my computation, they just fell out naturally from A .> .5--- I can convert to Array{Bool} easily. Unfortunately the sizes I work with include both tiny 20x100 and bigger 20x100000000, though more of the smaller.
I'm satisfied enough with the explanation that it's my processor to close this, unless you want to track something with that inefficient BitArray assembly. Also I'd be happy to put a note about BitArrays' size(A,1) % 8 somewhere in the docs, if it belongs anywhere. It's niche enough it might just belong in a searchable issue, i.e. here.

Sure, a PR would be welcome.
The assembly isn't great for the other methods either. You could leave this PR open to track that.
I have an idea of something that might coax LLVM into doing the right thing that I'd be happy to explain if anyone wants to give it a try.
Otherwise, I won't address it myself. I'm spending all the free time that I can dedicate to SIMD to rewriting this library, rather than working on the old.

Ok, I'll do the PR this weekend.
If you want to explain it, I'd be happy to give it a shot. This library has been more than helpful enough that I'd invest some time to figure out how it works. No promises that I'll understand it well enough, though.

If you want to explain it, I'd be happy to give it a shot.

Basically, I think this copying is related to the duplications we get in the phi nodes:
L216:                                             ; preds = %L216, %L170
  %29 = phi i64 [ %35, %L216 ], [ %28, %L170 ]
  %value_phi122817 = phi i64 [ %res.i645, %L216 ], [ 0, %L170 ]
  %value_phi105816 = phi <8 x i64> [ %res.i647, %L216 ], [ %value_phi81852, %L170 ]
  %value_phi104815 = phi <8 x i64> [ %res.i649, %L216 ], [ %value_phi80851, %L170 ]
  %value_phi103814 = phi <8 x i64> [ %res.i651, %L216 ], [ %value_phi79850, %L170 ]
  %value_phi102813 = phi <8 x i64> [ %res.i653, %L216 ], [ %value_phi78849, %L170 ]
  %value_phi101812 = phi <8 x i64> [ %res.i647, %L216 ], [ %value_phi77848, %L170 ]
  %value_phi100811 = phi <8 x i64> [ %res.i649, %L216 ], [ %value_phi76847, %L170 ]
  %value_phi99810 = phi <8 x i64> [ %res.i651, %L216 ], [ %value_phi75846, %L170 ]
  %value_phi98809 = phi <8 x i64> [ %res.i653, %L216 ], [ %value_phi74845, %L170 ]
  %shiftedind.i678 = ashr i64 %29, 3
  %ptr.1.i679707 = getelementptr inbounds i8, i8* %18, i64 %shiftedind.i678
  %30 = bitcast i8* %ptr.1.i679707 to <8 x i1>*
  %res1.i676708 = load <8 x i1>, <8 x i1>* %30, align 1
  %ptr.1.i670709 = getelementptr inbounds i8, i8* %ptr.1.i679707, i64 %24
  %31 = bitcast i8* %ptr.1.i670709 to <8 x i1>*
  %res1.i671710 = load <8 x i1>, <8 x i1>* %31, align 1
  %ptr.1.i665711 = getelementptr inbounds i8, i8* %ptr.1.i679707, i64 %25
  %32 = bitcast i8* %ptr.1.i665711 to <8 x i1>*
  %res1.i666712 = load <8 x i1>, <8 x i1>* %32, align 1
  %ptr.1.i660713 = getelementptr inbounds i8, i8* %ptr.1.i679707, i64 %26
  %33 = bitcast i8* %ptr.1.i660713 to <8 x i1>*
  %res1.i661714 = load <8 x i1>, <8 x i1>* %33, align 1
  %res.i657 = add <8 x i64> %value_phi98809, <i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1>
  %res.i656 = add <8 x i64> %value_phi99810, <i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1>
  %res.i655 = add <8 x i64> %value_phi100811, <i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1>
  %res.i654 = add <8 x i64> %value_phi101812, <i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1>
  %res.i653 = select <8 x i1> %res1.i676708, <8 x i64> %res.i657, <8 x i64> %value_phi102813
  %res.i651 = select <8 x i1> %res1.i671710, <8 x i64> %res.i656, <8 x i64> %value_phi103814
  %res.i649 = select <8 x i1> %res1.i666712, <8 x i64> %res.i655, <8 x i64> %value_phi104815
  %res.i647 = select <8 x i1> %res1.i661714, <8 x i64> %res.i654, <8 x i64> %value_phi105816
  %res.i645 = add nsw i64 %value_phi122817, -8
  %34 = add i64 %27, %res.i645
  %35 = sub i64 0, %34
  %.not706 = icmp slt i64 %.neg, %35
  br i1 %.not706, label %L247, label %L216

If you look at the @code_typed, you'll see messes of φ nodes already in the Julia level.
So, the basic idea is to avoid this via not reassigning, and instead updating memory.
Then, at the LLVM level, we should be able to trust mem2reg to convert these stack memory operations back into phi nodes, but (hopefully) much better than Julia is doing.
In other words, what we want to do is instead of generating code like
accumulator = 0
for i in ...
    accumulator = accumator + ...
end
return accumulator

we want to generate code like
accumulator = Ref(0)
for i in ...
    accumulator[] = accumulator[] + ...
end
return accumulator[]

So, instead of reassignments (requiring phi nodes) we just modify memory.
Ref should be stack allocated here (it doesn't escape), and then LLVM can convert the latter back into the former, but hopefully do a better job than Julia.
So, we need to change initialization, using them in computations, assigning to them, and finally returning them.
Here is the function that initializes outer reductions:
https://github.com/JuliaSIMD/LoopVectorization.jl/blob/4fecc5748494ed438f243e16849589c8312e60dc/src/codegen/lowering.jl#L516-L542
For both using them in computations and for assigning to them, you'd need to edit lower_compute.
This would probably be the most annoying one, but you can already see a check for whether a variable is an outer reduction here:
https://github.com/JuliaSIMD/LoopVectorization.jl/blob/4fecc5748494ed438f243e16849589c8312e60dc/src/codegen/lower_compute.jl#L508
If so, you can then do the appropriate [] on reference and assignment.
Finally, you'd need to handle the returns, which hopefully doesn't require much more than these two locations:
https://github.com/JuliaSIMD/LoopVectorization.jl/blob/4fecc5748494ed438f243e16849589c8312e60dc/src/reconstruct_loopset.jl#L588
This handles the values just before returning. You could define a function like
@inline unwrapref(x::Base.RefValue) = x[]
@inline unwrapref(x) = x

and then call that function like
    extractt = Expr(:call, GlobalRef(Core,:getfield), Expr(:call, unwrapref, Symbol("#vargs#")), (offset+=1), false)

This will handle the case of if it isn't a ref, which could be because....
https://github.com/JuliaSIMD/LoopVectorization.jl/blob/4fecc5748494ed438f243e16849589c8312e60dc/src/codegen/lowering.jl#L614
This code reduces multiple vecs (when unrolled) to a single one. You don't have to Ref-wrap what gets returned here, because it should be handled by unwrapref above.
You'll also be able to delete this code, as it was another attempt at working around it:
https://github.com/JuliaSIMD/LoopVectorization.jl/blob/4fecc5748494ed438f243e16849589c8312e60dc/src/codegen/lowering.jl#L405-L408
Something that may be annoying is that sometimes outer reduction variables can change their size/name.
E.g., it'll 4x unroll for part of it, naming the variables something like gensymedname_4, and then 2x unroll, renaming them to gensymedname_2.
That'd be partly covered by the init expr, but also need
https://github.com/JuliaSIMD/LoopVectorization.jl/blob/4fecc5748494ed438f243e16849589c8312e60dc/src/codegen/lowering.jl#L567

authors: chriselrod grahamas


text:
Filtering DataFrames from feather files segfault after GC.

I am getting a segfault from an interaction of WeakRefStrings, DataFrames, Feather, and Query.
If you read in a DataFrame with feather, then apply a Query to it that filters it down and makes a new DataFrame, and garbage collection takes the original data frame, then any operation on the WeakRefStrings in the filtered DataFrame will crash the program. Is there a way around this?
Possibly copying all the WeakRefStrings from the original DataFrame before GC takes them?

An immediate fix would be to do Feather.read(file; weakrefstrings=false) which will avoid using WeakRefStrings at all. Not sure what the query is doing to invalidate things, but I'll try to take a look.

I think it is just building a DF that has WRS's that reference the same underlying data which goes away. My immediate workaround is to write the filtered DF to disk before GC happens and read it back in.

This might be slightly off topic, but WeakRefStrings will no longer be necessary in 0.6, correct?

I don't think they'll be as necessary, but we still can't get to quite the speed of WeakRefStrings, even with 0.6 improvements. I think it'd be enough to make them off by default, but I think there's still a use-case when you need ultimate speed.

@jpfairbanks Can you post the code you are using? I go through some hoops to make sure that you don't end up with WeakRefStrings when you query a DataStream source, so this kind of bug shouldn't happen in theory. One important thing is that you read in the feather file via Feather.Source and not via Feather.read. If you use Feather.read it will actually create a DataFrame that uses WeakRefStrings, and at that point I can't do anything about it anymore. You also would end up with way too much memory allocation. If you use Feather.Source on the other hand, my code should make sure that you end up with something after the query that has no WeakRefStrings in it.

@jpfairbanks, if you could try your original code again on current master, I believe this should be addressed. WeakRefStrings have now moved to a WeakRefStringArray representation, which ends up being much "safer" while retaining the excellent performance benefits. Let me know if you're still seeing issues.

Here is a MWE
Download https://archive.ics.uci.edu/ml/machine-learning-databases/abalone/abalone.data as ~/Downloads/abalone.data.txt
using DataFrames, Query, WeakRefStrings, CSV
df = CSV.read("Downloads/abalone.data.txt"; weakrefstrings=true)
b = @from i in df begin
       @select {i.M}
       @collect DataFrame
       end

df = []
gc()
whos()
#=...
                           ans      0 bytes  Void
                             b    130 KB     4176×1 DataFrames.DataFrame
                            df      0 bytes  0-element Array{Any,1}
=#
b[1,:]

#=
signal (11): Segmentation fault: 11
while loading no file, in expression starting on line 0
show at /Users/jfairbanks6/.julia/v0.6/WeakRefStrings/src/WeakRefStrings.jl:36
show at ./nullable.jl:65
showcompact at ./show.jl:1735 [inlined]
ourshowcompact at /Users/jfairbanks6/.julia/v0.6/DataFrames/src/abstractdataframe/show.jl:63
ourstrwidth at /Users/jfairbanks6/.julia/v0.6/DataFrames/src/abstractdataframe/show.jl:37
unknown function (ip: 0x126fd1e52)
getmaxwidths at /Users/jfairbanks6/.julia/v0.6/DataFrames/src/abstractdataframe/show.jl:118
unknown function (ip: 0x115d2e2c2)
show at /Users/jfairbanks6/.julia/v0.6/DataFrames/src/abstractdataframe/show.jl:454
unknown function (ip: 0x115d2cd6d)
display at ./REPL.jl:122
unknown function (ip: 0x115d2c596)
display at ./REPL.jl:125
unknown function (ip: 0x115d2c1a6)
display at ./multimedia.jl:194
unknown function (ip: 0x115d2bfa2)
do_call at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/interpreter.c:75
eval at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/interpreter.c:242
eval_body at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/interpreter.c:539
jl_toplevel_eval_body at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/interpreter.c:511
jl_toplevel_eval_flex at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/toplevel.c:571
jl_toplevel_eval_in at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/builtins.c:496
eval at ./boot.jl:235
jlcall_eval_17976 at /Applications/Julia-0.6.app/Contents/Resources/julia/lib/julia/sys.dylib (unknown line)
print_response at ./REPL.jl:144
unknown function (ip: 0x115cea0f8)
print_response at ./REPL.jl:129
unknown function (ip: 0x115ce9a68)
do_respond at ./REPL.jl:646
unknown function (ip: 0x115cd0571)
do_call at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/interpreter.c:75
eval at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/interpreter.c:242
eval_body at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/interpreter.c:539
jl_toplevel_eval_body at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/interpreter.c:511
jl_toplevel_eval_flex at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/toplevel.c:571
jl_toplevel_eval_in at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/builtins.c:496
eval at ./boot.jl:235
jlcall_eval_17976 at /Applications/Julia-0.6.app/Contents/Resources/julia/lib/julia/sys.dylib (unknown line)
run_interface at ./LineEdit.jl:1583
jlcall_run_interface_20033 at /Applications/Julia-0.6.app/Contents/Resources/julia/lib/julia/sys.dylib (unknown line)
run_frontend at ./REPL.jl:945
run_repl at ./REPL.jl:180
unknown function (ip: 0x11aabe302)
_start at ./client.jl:413
jlcall__start_18910 at /Applications/Julia-0.6.app/Contents/Resources/julia/lib/julia/sys.dylib (unknown line)
true_main at /usr/local/bin/julia (unknown line)
main at /usr/local/bin/julia (unknown line)
Allocations: 233470485 (Pool: 233427265; Big: 43220); GC: 549
[1]    60539 segmentation fault  julia
=#

Relevant package versions:
 required packages:
 - CSV                           0.1.5
 - DataFrames                    0.10.1
 - Feather                       0.2.5
 - Query                         0.7.2
 - ResultTypes                   1.0.0
 - Unitful                       0.2.6
 - WeakRefStrings                0.2.0
 - CatIndices                    0.0.2
 - CategoricalArrays             0.1.6
 - ChunkedArrays                 0.1.1
 - Compat                        0.31.0
 - DataArrays                    0.6.2
 - DataFlow                      0.3.0
 - DataStreams                   0.1.3
 - DataStructures                0.7.1
 - DataValues                    0.3.0
 - DateParser                    0.1.1
 - FileIO                        0.5.1
 - FlatBuffers                   0.2.0
 - GZip                          0.3.0
 - IndexedTables                 0.3.2
 - IterTools                     0.1.0
 - IterableTables                0.5.2
 - Iterators                     0.3.1
 - JuliaParser                   0.7.4
 - Lazy                          0.11.7
 - LegacyStrings                 0.2.2
 - MacroTools                    0.3.7
 - MappedArrays                  0.0.7
 - Memoize                       0.1.0+             returntypes (dirty)
 - NamedTuples                   4.0.0
 - NullableArrays                0.1.2
 - OffsetArrays                  0.3.0
 - PooledArrays                  0.1.1
 - Reexport                      0.0.3
 - Requires                      0.4.3
 - SimpleTraits                  0.5.1
 - SortingAlgorithms             0.1.1
 - StaticArrays                  0.6.2
 - StructIO                      0.0.2
 - TableTraits                   0.0.1
 - TableTraitsUtils              0.1.0

@jpfairbanks, I don't see any issues using current master versions of CSV, DataFrames, and WeakRefStrings. Let me know if you still see issues.

authors: ExpandingMan davidanthoff jpfairbanks quinnj


text:
Clean README, docs and docstrings

Changes
I've just:

Fixed a few typos in docs
Fixed a few typos in src
Fixed a typo in README
Fixed the format of JuliaFormatter config file

Proposal
I've recently read your Discourse post announcing the creation of this new GitHub organisation where you write:

[...] I’d like to invite anyone who’s interested to join and contribute in whatever shape or form. You can become followers, members or owners depending on the extent to which you’d like to get involved. If this is for you, feel free to just reach out to me directly or comment below.

I'm by no means an expert in this field, but I would be very interested to learn more about it. I can certainly contribute with all the Julia packaging, workflows, etc. when I find the time.
I would start with a few questions, comments and suggestions to improve the package in the next few days if you agree.

Hi @pitmonticone, thanks a lot for this PR, I really appreciate it!

I'm by no means an expert in this field, but I would be very interested to learn more about it. I can certainly contribute with all the Julia packaging, workflows, etc. when I find the time.
I would start with a few questions, comments and suggestions to improve the package in the next few days if you agree.

Yes, absolutely! Happy to hear you're interested. Shall we discuss via email or set up a call?
Enjoy your Sunday.
Cheers!

Codecov Report

Merging #127 (d810d7e) into main (9095a9e) will not change coverage.
The diff coverage is n/a.

:mega: This organization is not using Codecov’s GitHub App Integration. We recommend you install it so Codecov can continue to function properly for your repositories. Learn more
@@           Coverage Diff           @@
##             main     #127   +/-   ##
=======================================
  Coverage   81.37%   81.37%
=======================================
  Files          36       36
  Lines        1149     1149
=======================================
  Hits          935      935
  Misses        214      214

Impacted Files
Coverage Δ

src/data/synthetic.jl
90.00% <ø> (ø)

src/data_preprocessing/functions.jl
82.66% <ø> (ø)

src/evaluation/Evaluation.jl
90.00% <ø> (ø)

src/evaluation/benchmark.jl
92.30% <ø> (ø)

src/evaluation/measures.jl
85.71% <ø> (ø)

src/generative_models/vae.jl
89.87% <ø> (ø)

src/generators/Generators.jl
100.00% <ø> (ø)

src/models/Models.jl
75.00% <ø> (ø)

src/objectives/penalties.jl
84.84% <ø> (ø)

src/precompile.jl
100.00% <ø> (ø)

:mega: We’re building smart automated test selection to slash your CI/CD build times. Learn more

Hi @pat-alt, I was thinking about joining the organization and setting up private team-specific discussions and talking about the package logistics and contents there.
I tend to use those in order to maximize efficiency by minimizing the number of communication platforms and tools involved: conceptual design, planning, monitoring and development all on GitHub.
Does it sound good to you? If not, we can start chatting by email since I'm not sure I can find the time for several calls in the next few months.
Let me know your preference.
Have a good Sunday!

Great idea! I've just invited you to Taija

authors: codecov-commenter pat-alt pitmonticone


text:
Make it possible to change infoview orientation on resize

Someone (e.g. me) may want to change the infoview orientation from vertical to horizontal on VimResized events if the screen dimensions change to something narrow. We should expose some API someone can bind to that autocmd which follows the normal logic when opening one from scratch.

Relatedly, it would be good if took the "screen" dimensions to determine the orientation.  Right now, we use the window dimensions which means that a vertical split changes landscape to portrait layout.

Relatedly, it would be good if took the "screen" dimensions to determine the orientation.

Done in the linked commit, have a look.

authors: Julian gebner


text:
reading dataset: quote chars

In data_tools.py / load_data_frame, I needed to disable quoting to correctly read my messy MEDLINE data:
    data_df = pd.read_csv(data_frame_path, sep='\t', header=None, index_col=False,
                          names=column_names, quoting=3)

3 corresponds to the constant QUOTE_NONE of some pandas module...

Hi @mkuhn, thanks for reporting this! I have not seen this myself but I suspect that the problem is related to either \t, " or newline characters in the text input. Do you have an example dataset I could play around with to find a way to circumvent these issues in the future? If not, let me know and I'll try to create some toy examples myself.
For my own reference, the QUOTE_NONE constant is documented here in the csv module here which is mentioned in pandas.read_csv

authors: JungeAlexander mkuhn

repo: JungeAlexander/cocoscore


text:
Bot stops playing music after some time / tracks from autoplaylist

Please tick all applicable boxes.

[x] I am using Python 3.5.3 or higher (run python --version on the command line)
yes

[x] I have followed the official guides to install the bot for my system
yes. I tried on debian and docker

[x] I have updated my dependencies to the latest version using the appropriate update script
Which version are you using?

[x] The latest master version (release-260419)

[x] The latest review version

I have tried both versions.
What type of issue are you creating?

[x] Bug
[ ] Feature request
[ ] Question

Description of issue
After some time the bot stops playing music. In the logfiles are error messages.
Steps to reproduce

Put youtube links into the autoplaylist and wait.

Log file
This is the error in the log:

ConnectionRefusedError: [Errno 111] Connection refused

During handling of the above exception, another exception occurred:

Traceback (most recent call last):

  File "/usr/lib/python3.8/site-packages/youtube_dl/YoutubeDL.py", line 1926, in process_info

    success = dl(filename, info_dict)

  File "/usr/lib/python3.8/site-packages/youtube_dl/YoutubeDL.py", line 1865, in dl

    return fd.download(name, info)

  File "/usr/lib/python3.8/site-packages/youtube_dl/downloader/common.py", line 366, in download

    return self.real_download(filename, info_dict)

  File "/usr/lib/python3.8/site-packages/youtube_dl/downloader/dash.py", line 48, in real_download

    success, frag_content = self._download_fragment(ctx, fragment_url, info_dict)

  File "/usr/lib/python3.8/site-packages/youtube_dl/downloader/fragment.py", line 100, in _download_fragment

    success = ctx['dl'].download(fragment_filename, {

  File "/usr/lib/python3.8/site-packages/youtube_dl/downloader/common.py", line 366, in download

    return self.real_download(filename, info_dict)

  File "/usr/lib/python3.8/site-packages/youtube_dl/downloader/http.py", line 341, in real_download

    establish_connection()

  File "/usr/lib/python3.8/site-packages/youtube_dl/downloader/http.py", line 109, in establish_connection

    ctx.data = self.ydl.urlopen(request)

  File "/usr/lib/python3.8/site-packages/youtube_dl/YoutubeDL.py", line 2238, in urlopen

    return self._opener.open(req, timeout=self._socket_timeout)

  File "/usr/lib/python3.8/urllib/request.py", line 531, in open

    response = meth(req, response)

  File "/usr/lib/python3.8/urllib/request.py", line 640, in http_response

    response = self.parent.error(

  File "/usr/lib/python3.8/urllib/request.py", line 563, in error

    result = self._call_chain(*args)

  File "/usr/lib/python3.8/urllib/request.py", line 502, in _call_chain

    result = func(*args)

  File "/usr/lib/python3.8/urllib/request.py", line 755, in http_error_302

    return self.parent.open(new, timeout=req.timeout)

  File "/usr/lib/python3.8/urllib/request.py", line 525, in open

    response = self._open(req, data)

  File "/usr/lib/python3.8/urllib/request.py", line 542, in _open

    result = self._call_chain(self.handle_open, protocol, protocol +

  File "/usr/lib/python3.8/urllib/request.py", line 502, in _call_chain

    result = func(*args)

  File "/usr/lib/python3.8/site-packages/youtube_dl/utils.py", line 2726, in https_open

    return self.do_open(functools.partial(

  File "/usr/lib/python3.8/urllib/request.py", line 1322, in do_open

    raise URLError(err)

urllib.error.URLError: <urlopen error [Errno 111] Connection refused>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):

  File "/usr/src/musicbot/musicbot/entry.py", line 371, in _really_download

    result = await self.playlist.downloader.extract_info(self.playlist.loop, self.url, download=True)

  File "/usr/src/musicbot/musicbot/downloader.py", line 84, in extract_info

    return await loop.run_in_executor(self.thread_pool, functools.partial(self.unsafe_ytdl.extract_info, *args, **kwargs))

  File "/usr/lib/python3.8/concurrent/futures/thread.py", line 57, in run

    result = self.fn(*self.args, **self.kwargs)

  File "/usr/lib/python3.8/site-packages/youtube_dl/YoutubeDL.py", line 808, in extract_info

    return self.process_ie_result(ie_result, download, extra_info)

  File "/usr/lib/python3.8/site-packages/youtube_dl/YoutubeDL.py", line 867, in process_ie_result

    return self.extract_info(ie_result['url'],

  File "/usr/lib/python3.8/site-packages/youtube_dl/YoutubeDL.py", line 808, in extract_info

    return self.process_ie_result(ie_result, download, extra_info)

  File "/usr/lib/python3.8/site-packages/youtube_dl/YoutubeDL.py", line 863, in process_ie_result

    return self.process_video_result(ie_result, download=download)

  File "/usr/lib/python3.8/site-packages/youtube_dl/YoutubeDL.py", line 1644, in process_video_result

    self.process_info(new_info)

  File "/usr/lib/python3.8/site-packages/youtube_dl/YoutubeDL.py", line 1928, in process_info

    self.report_error('unable to download video data: %s' % error_to_compat_str(err))

  File "/usr/lib/python3.8/site-packages/youtube_dl/YoutubeDL.py", line 625, in report_error

    self.trouble(error_message, tb)

  File "/usr/lib/python3.8/site-packages/youtube_dl/YoutubeDL.py", line 595, in trouble

    raise DownloadError(message, exc_info)

youtube_dl.utils.DownloadError: ERROR: unable to download video data: <urlopen error [Errno 111] Connection refused>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):

  File "/usr/src/musicbot/musicbot/player.py", line 272, in _play

    entry = await self.playlist.get_next_entry()

  File "/usr/src/musicbot/musicbot/playlist.py", line 334, in get_next_entry

    return await entry.get_ready_future()

  File "/usr/src/musicbot/musicbot/entry.py", line 228, in _download

    await self._really_download()

  File "/usr/src/musicbot/musicbot/entry.py", line 374, in _really_download

    raise ExtractionError(e)

musicbot.exceptions.ExtractionError: ERROR: unable to download video data: <urlopen error [Errno 111] Connection refused>

Error provided is an issue with your connection to the video's host.
It's recommended that you contact your server's host, or ISP, regarding this if you're also unable to connect with things other than MusicBot.

authors: AleanaA daranto

repo: Just-Some-Bots/MusicBot


text:
отвалился

нет больше кнопок скачевания

@BlindLesbianInAFishStore скачайте последнюю версию. Ссылки будут появляться в левом нижнем углу браузера.

authors: BlindLesbianInAFishStore JustKappaMan

repo: JustKappaMan/VK-Video-Downloader


text:
大佬发布新版本吧

大佬看你搞了群成员变动的，我现在是直接改的代码实现了，用了继承没有触发。发新版本吧，期待ing

感觉改动挺少的，想着再攒一点点（bushi

好的啊

authors: GabrielXie JustUndertaker

repo: JustUndertaker/adapter-ntchat


text:
Create a loading animation when clicking button "Fetching"

Hello, can you assign me to work this?


text:
Question about implementing write-for-response or request-response API

Hello, I'm playing around with this awesome library, but I think I have get lost somewhere in all scopes and flows.
I checked some of the PRs and Issues and I found that there was some suggestion how to implement write-for-response mechanism which I need for a request-response API to be implemented:
private val observation = peripheral.observe(Device.NOTIFY_CHARACTERISTIC)
        .shareIn(scope, started = Eagerly)

private suspend fun writeForResponse(request: ByteArray): ByteArray {
    return observation
        .onSubscription {
            peripheral.write(Device.WRITE_CHARACTERISTIC, request, WriteType.WithResponse)
        }.first()
}

suspend fun init() {
    val data = CommandEnvelope.fromLockVersion(COMMAND_A, device.lockVersion, DEFAULT_AES_KEY)
        .buildCommandPayload()

    println(Hex.encode(writeForResponse(data)))
}

suspend fun getAes() {
    val aesData = CommandEnvelope.fromLockVersion(COMMAND_B, device.lockVersion, DEFAULT_AES_KEY)
        .buildCommandPayload()
    println(Hex.encode(writeForResponse(aesData)))
}

And how I used it:
fun main(): Unit = runBlocking {
    println("Start scanning")

    val scanner = Scanner {
        logging {
            filters = listOf(
                Filter.Service(UUID_1),
                Filter.Service(UUID_2)
            )
            level = Logging.Level.Data
        }
    }

    val advertisement = scanner.advertisements.first()

    advertisement?.let { it
        val peripheral = this.peripheral(it.advertisement) {

            logging {
                level = Logging.Level.Data
                format = Logging.Format.Multiline
                data = Hex
            }
        }
        val manager = Manager(it, peripheral, this) // this is the scope

        suspend fun connect() {
            peripheral.connect()
        }

        peripheral.state.onEach { state ->
            if (state is State.Disconnected) {
                connect()
                delay(5_000L)
            } else if (state is State.Connected) {
                manager.init()
                manager.getAes()
            }

        }.launchIn(this)
    }
}

What I get is two writes, but only one read on the observation. @twyatt can you give me some hints, suggestions or something. I'm testing it first on my macOS target. Maybe is related with https://github.com/JuulLabs/kable/issues/157
Here's the 🪵:
Start scanning
2022-04-03 12:06:57.198 dodi-smartlocks.kexe[28534:876095] I/Kable: AB50F848-F78B-5ABB-7888-33B303E335EE Connecting
2022-04-03 12:06:57.355 dodi-smartlocks.kexe[28534:876095] D/Kable: AB50F848-F78B-5ABB-7888-33B303E335EE CentralManagerDelegate state change
  state: DidConnect(identifier=AB50F848-F78B-5ABB-7888-33B303E335EE)
2022-04-03 12:06:57.356 dodi-smartlocks.kexe[28534:876095] V/Kable: AB50F848-F78B-5ABB-7888-33B303E335EE discoverServices
2022-04-03 12:06:57.578 dodi-smartlocks.kexe[28534:876123] D/Kable/Delegate: AB50F848-F78B-5ABB-7888-33B303E335EE AB50F848-F78B-5ABB-7888-33B303E335EE didDiscoverServices
2022-04-03 12:06:57.609 dodi-smartlocks.kexe[28534:876124] D/Kable/Delegate: AB50F848-F78B-5ABB-7888-33B303E335EE AB50F848-F78B-5ABB-7888-33B303E335EE didDiscoverCharacteristicsForService
  service: 1910
2022-04-03 12:06:57.638 dodi-smartlocks.kexe[28534:876124] D/Kable/Delegate: AB50F848-F78B-5ABB-7888-33B303E335EE AB50F848-F78B-5ABB-7888-33B303E335EE didDiscoverCharacteristicsForService
  service: 180F
2022-04-03 12:06:57.699 dodi-smartlocks.kexe[28534:876124] D/Kable/Delegate: AB50F848-F78B-5ABB-7888-33B303E335EE AB50F848-F78B-5ABB-7888-33B303E335EE didDiscoverCharacteristicsForService
  service: 180A
2022-04-03 12:06:57.833 dodi-smartlocks.kexe[28534:876124] D/Kable/Delegate: AB50F848-F78B-5ABB-7888-33B303E335EE AB50F848-F78B-5ABB-7888-33B303E335EE didDiscoverCharacteristicsForService
  service: 00001530-1212-EFDE-1523-785FEABCD123
2022-04-03 12:06:57.836 dodi-smartlocks.kexe[28534:876095] V/Kable: AB50F848-F78B-5ABB-7888-33B303E335EE Configuring characteristic observations
2022-04-03 12:06:57.836 dodi-smartlocks.kexe[28534:876095] D/Kable: AB50F848-F78B-5ABB-7888-33B303E335EE CentralManager.notify
  service: 00001910-0000-1000-8000-00805f9b34fb
  characteristic: 0000fff4-0000-1000-8000-00805f9b34fb
2022-04-03 12:06:57.907 dodi-smartlocks.kexe[28534:876124] D/Kable/Delegate: AB50F848-F78B-5ABB-7888-33B303E335EE AB50F848-F78B-5ABB-7888-33B303E335EE didUpdateNotificationStateForCharacteristic
  service: 1910
  characteristic: FFF4
2022-04-03 12:06:57.909 dodi-smartlocks.kexe[28534:876095] I/Kable: AB50F848-F78B-5ABB-7888-33B303E335EE Connected
2022-04-03 12:07:02.914 dodi-smartlocks.kexe[28534:876095] D/Kable: AB50F848-F78B-5ABB-7888-33B303E335EE write
  service: 00001910-0000-1000-8000-00805f9b34fb
  characteristic: 0000fff2-0000-1000-8000-00805f9b34fb
  writeType: WithResponse
  data: 7F 5A 05 03 09 00 01 00 01 45 AA 00 99 0D 0A
2022-04-03 12:07:02.963 dodi-smartlocks.kexe[28534:876124] D/Kable/Delegate: AB50F848-F78B-5ABB-7888-33B303E335EE AB50F848-F78B-5ABB-7888-33B303E335EE didWriteValueForCharacteristic
  service: 1910
  characteristic: FFF2
2022-04-03 12:07:02.963 dodi-smartlocks.kexe[28534:876124] D/Kable/Delegate: AB50F848-F78B-5ABB-7888-33B303E335EE AB50F848-F78B-5ABB-7888-33B303E335EE didUpdateValueForCharacteristic
  service: 1910
  characteristic: FFF4
  data: 7F 5A 05 03 09 00 0A 00 1C 54 AA 00 25 0D 0A
2022-04-03 12:07:02.965 dodi-smartlocks.kexe[28534:876095] D/Kable: AB50F848-F78B-5ABB-7888-33B303E335EE write
  service: 00001910-0000-1000-8000-00805f9b34fb
  characteristic: 0000fff2-0000-1000-8000-00805f9b34fb
  writeType: WithResponse
  data: 7F 5A 05 03 09 00 01 00 01 19 AA 10 C4 0D 0A
7f5a050309000a001c54aa00250d0a
2022-04-03 12:07:02.993 dodi-smartlocks.kexe[28534:876124] D/Kable/Delegate: AB50F848-F78B-5ABB-7888-33B303E335EE AB50F848-F78B-5ABB-7888-33B303E335EE didWriteValueForCharacteristic
  service: 1910
  characteristic: FFF2
2022-04-03 12:07:16.949 dodi-smartlocks.kexe[28534:876095] I/Kable: AB50F848-F78B-5ABB-7888-33B303E335EE Disconnected
2022-04-03 12:07:16.950 dodi-smartlocks.kexe[28534:876095] D/Kable: AB50F848-F78B-5ABB-7888-33B303E335EE CentralManagerDelegate state change
  state: DidDisconnect(identifier=AB50F848-F78B-5ABB-7888-33B303E335EE, error=Error Domain=CBErrorDomain Code=7 "The specified device has disconnected from us." UserInfo={NSLocalizedDescription=The specified device has disconnected from us.})

Your implementation looks reasonable to me.
The fact that you're performing writes using WithResponse means you shouldn't be affected by #157.
At the tail end of your logs (after the first success write-for-response) you have another didWriteValueForCharacteristic callback log, which indicates that Core Bluetooth successfully wrote the data (which is good).
But then 12 seconds elapse and there isn't a callback log of didUpdateValueForCharacteristic, which indicates that you never received a response from the remote BLE peripheral.
It is unlikely that incorrect Coroutine scoping would mess with the callback logging (as it is all performed within the Core Bluetooth threads/dispatches and is outside of the Coroutine world — at least at the state of interaction with the underlying Core Bluetooth).
So, the fact that the 2nd didUpdateValueForCharacteristic callback isn't logged strongly hints that the peripheral just never responded.
Are you able to test (and confirm) that you see the same behavior on Android?
Happy to investigate further if you are confident that your BLE peripheral is responding and that Kable just isn't picking it up correctly.

@twyatt the mystery is uncovered!
I was trying to implement request-response with larger packages than the MTU, so I started read and write on batches matching the MTU. Everything looks to work like a charm now!
private suspend fun writeForResponse(request: ByteArray): ByteArray {
        return observation.onSubscription {
            request.asSequence().chunked(MTU).map { it.toByteArray() }.forEach {
                peripheral.write(
                    DEVICE.WRITE_CHARACTERISTIC,
                    it,
                    WriteType.WithResponse
                )
            }
        }.transformWhile { bytes ->
            emit(bytes)
            val size = bytes.size
            // check if we reached the package end
        }.fold(byteArrayOf()) { initial, value ->
            val concat = initial.plus(value)
            concat
        }
}

Awesome library so far! 🙇♂

Great to hear that you found the problem!
I'm not sure if Kable could reliably check for it, but if so, it would make sense for Kable to throw an exception if a write was attempted that exceeded the MTU.
Created #298 to track the possibility of adding that safety check.

repo: JuulLabs/kable


text:
Update KotlinX DateTime version

There were some breaking changes in 0.2.1 -> 0.3.0 but this library dodged them.

I'm probably (assuming plans haven't changed) turn on Renovate bot tomorrow, and these PRs for dependency updates will come for free.
Are you ready for the flood of PRs? 😝

authors: cedrickcooke twyatt

repo: JuulLabs/tuulbox


text:
Add exception mapping for Jackson object mapping exceptions

A partial vm json for example should not create an uggly 500, but some meaningful error.

Added some instability in the build.

tests stabilized


text:
容器当中占位元素的类名不对

复现工具
本项目的demo，和lowcode-engine.cn提供的demo。分别添加一个容器物料，查看容器物料中占位元素的情况。
本项目demo中的情形

官方demo中的情形

问题
可以看到一个是渲染的lc-container，一个是渲染的lc-container-placeholder，在渲染lc-container的情况下，当容器宽度小于lc-container文字宽度的时候，文字不换行，会撑开容器导致宽度不对，而lc-container-placeholder则会在这时文字换行，不会有宽度问题。
如下：
lc-container

lc-container-placeholder

代码
对比：
本项目中vue-renderer/src/core/use.ts:82
if (isDesignMode && node?.isContainer()) return h('div', { class: 'lc-container' });

官方项目react-renderer/src/renderer-view.tsx:239
// 如果是容器 && 无children && 高宽为空 增加一个占位容器，方便拖动
if (
            !viewProps.dataSource &&
            leaf?.isContainer() &&
            (children == null || (Array.isArray(children) && !children.length)) &&
            (!viewProps.style || Object.keys(viewProps.style).length === 0)
          ) {
            children = (

                {viewProps.placeholder || '拖拽组件或模板到这里'}

            );
          }

对于容器中占位元素的处理不同。
而引擎中关于lc-container-placeholder的处理只有此一处，lc-container的处理也只有slot一处，所以我认为lc-container是给slot用的，而lc-container-placeholder是给容器占位元素用的。
从官方的注释当中也可以看出端倪。

可以给一个复现的 demo 仓库么，因为我需要确保修复了这个问题

我fork了demo，并做了一些修改，clone下来安装运行即可看到效果。
https://github.com/zboMa/lowcode-engine-demo

lc-container中的文字是用before伪类添加的，而lc-container-placeholder则是div下的text node添加的文本。
lowcode-engine-vue中vue-simulator-renderer/src/simulator.less:38可以看到，两个类名的样式也是有区别的。

.lc-container {
  &:empty {
    display: flex;
    align-items: center;
    min-width: 140px;
    height: 66px;
    max-height: 100%;
    overflow: hidden;
    color: #a7b1bd;
    text-align: center;
    background: #f2f3f5;
    outline: 1px dashed rgb(31 56 88 / 20%);
    outline-offset: -1px !important;

    &::before {
      z-index: 1;
      width: 100%;
      font-size: 14px;
      white-space: nowrap;
      content: '\62D6\62FD\7EC4\4EF6\6216\6A21\677F\5230\8FD9\91CC';
    }
  }
}

.lc-container-placeholder {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  height: 100%;
  min-height: 60px;
  color: rgb(167 177 189);
  font-size: 14px;
  background-color: rgb(240 240 240);
  border: 1px dotted;

  &.lc-container-locked {
    background: #eccfcf;
  }
}

在lowcode-engine的react-simulator-renderer/src/renderer-view.tsx中
// 如果是容器 && 无children && 高宽为空 增加一个占位容器，方便拖动
          if (
            !viewProps.dataSource &&
            leaf?.isContainer() &&
            (children == null || (Array.isArray(children) && !children.length)) &&
            (!viewProps.style || Object.keys(viewProps.style).length === 0)
          ) {
            let defaultPlaceholder = '拖拽组件或模板到这里';
            const lockedNode = getClosestNode(leaf, (node) => {
              return node?.getExtraProp('isLocked')?.getValue() === true;
            });
            if (lockedNode) {
              defaultPlaceholder = '锁定元素及子元素无法编辑';
            }
            children = (

                {viewProps.placeholder || defaultPlaceholder}

            );
          }

占位元素文字还判断了lock操作。
我看lowcode-engine-vue中则还未实现lock操作，也许此处也是修复点。

大佬加油，抱大腿

authors: keuby zboMa

repo: KNXCloud/lowcode-engine-vue


text:
[misc] Set fetch depth to 0 (everything)

Try to fix Codecov breakage

Doesn't solve anything ...

repo: KTH/spork


text:
it wont let me build on windows

Please check for duplicates, similar issues or closed issues with the same problem, as well performing simple troubleshooting steps (such as deleting the export folder if it's an issue with compiling, reinstalling Kade Engine) before submitting an issue.
If you are playing a downloaded version of the game, what operating system are you using?
Windows (x86), Windows (x86_64), Linux, or macOS? Specify below.
What version of the game are you using? Look in the bottom left corner of the main menu.
Have you identified any steps to reproduce the bug? If so, please describe them below. Use images if possible.
Please describe your issue. Provide extensive detail and images if possible.

whenever i do it does this

please help me

never mind i figured it out

repo: KadeDev/Kade-Engine


text:
Error: LuaCharacter.cpp

When I type lime test windows, it says:
Error: LuaCharacter.cpp
./src/LuaCharacter.cpp(121): error C2039: 'error': is not a member of 'linc::lual'
C:/HaxeToolkit/haxe/lib/linc_luajit/git//linc/linc_lua.h(34): note: see declaration of 'linc::lual'
./src/LuaCharacter.cpp(129): error C3861: 'error': identifier not found
How can I fix this? I'm pretty new to modding.

I'm having the same issue on macOS + Linux (pop!OS) and i'm yet to find a solution

@MasterEric your lua rework seems to be malfunctioning

linking #2375

step 1: Run haxelib remove linc_luajit
step 2 : Run haxelib git linc_luajit https://github.com/nebulazorua/linc_luajit 0af04cd3a1
no more error

@Drewplayz solution is bad because it reverts the change that fixes builds on Linux.
The correct solution is:
haxelib remove linc_luajit
haxelib git linc_luajit https://github.com/nebulazorua/linc_luajit c5d2831

Note a different commit hash was chosen.

@MasterEric WOW thx! Also after that there's a polymod problem and while I'm trying to find the solution to fix it, I saw yours and it works perfectly! You are the best! For the rest, you all did your best to help.

authors: Ashiruzaki Drewplayz JOELwindows7 MasterEric Zeexel somefnfplayerlol