node/asciidoctor-kroki.js missing when running yarn upgrade<EMAIL_ADDRESS>

I am investigating a strange issue. Using antora in our ownCloud docs environment, we get errors when trying to upgrade to 0.10.0 because of missing node/asciidoctor-kroki.js. Running:
yarn upgrade<EMAIL_ADDRESS>respectively
yarn upgrade<EMAIL_ADDRESS>Comparing the directories node_modules/asciidoctor-kroki/dist you see an important difference:
0.8.2 --> has subdirectories browser and node
0.10.0 -- has only subdirectory browser...
I am no yarn specialist and hope I am not getting flamed, but this seems strange to me.
Any ideas?

Hi @mmattel
That's correct, the Node.js entry point is now node_modules/asciidoctor-kroki/src/asciidoctor-kroki.js.
How do you require/load the library?
The main field in the package.json describes the entry point:
https://github.com/Mogztter/asciidoctor-kroki/blob/1d205affe91e4e2b0abfc6e7e0886cd2ace36f45/package.json#L5
See: https://docs.npmjs.com/cli/v6/configuring-npm/package-json#main
Node will use this value to load the library when using require('asciidoctor-kroki').

I am no yarn specialist and hope I am not getting flamed, but this seems strange to me.

No flame here, we are here to help each other :hugs:

Many thanks for your help. I changed the path and it worked.

Note: the problem happened in https://github.com/owncloud/docs/pull/2867 which is auto-generated code by GitHub dependabot https://github.com/owncloud/docs/pull/2867/commits/9a8968e11d64c1f4dfabdc0f24a6eb0ea0c28c30
The reference to asciidoctor-kroki is in https://github.com/owncloud/docs/blob/master/site.yml extension  section, and that has (had) a path ./node_modules/asciidoctor-kroki/dist/node/asciidoctor-kroki.js going through dist/node

Many thanks for your help. I changed the path and it worked.

Awesome :+1:

The reference to asciidoctor-kroki is in https://github.com/owncloud/docs/blob/master/site.yml extension section, and that has (had) a path ./node_modules/asciidoctor-kroki/dist/node/asciidoctor-kroki.js going through dist/node

I think you can use the value asciidoctor-kroki in asciidoc.extensions. Behind the scene, Antora will use require to resolve the library. It will be more robust than using a relative path from the node_modules directory.

Thanks for the hint, I will try that and see if I can make it work according your suggestion


Broken link in repo description

https://meet.cct.ericsson.net is broken. Should be https://meet.c3.ericsson.net?

Well yes, seems to be fixed now though :>


[Event Extension Request] Table 5767 - OnBeforeAutofillQtyToHandle

Please extend the integration event OnBeforeAutofillQtyToHandle in Table 5767.
    [Integration]
-   LOCAL PROCEDURE OnBeforeAutofillQtyToHandle@56(VAR WarehouseActivityLine@1000 : Record 5767);
+   LOCAL PROCEDURE OnBeforeAutofillQtyToHandle@56(VAR WarehouseActivityLine@1000 : Record 5767;VAR IsHandled@1001 : Boolean);
    BEGIN
    END;

Call for function:
    [External]
    PROCEDURE AutofillQtyToHandle@10(VAR WhseActivLine@1000 : Record 5767);
    VAR
      NotEnough@1001 : Boolean;
      LogisticsSetup@5042650 : Codeunit 5042750;
      LogisticsManagement@5042651 : Codeunit 5042735;
      IsHandled@5042652 : Boolean;
    BEGIN
-     OnBeforeAutofillQtyToHandle(WhseActivLine);
+     OnBeforeAutofillQtyToHandle(WhseActivLine,IsHandled);
+     IF IsHandled THEN
+       EXIT;
      WITH WhseActivLine DO BEGIN
        NotEnough := FALSE;
        IF FIND('-') THEN
          REPEAT
            VALIDATE("Qty. to Handle","Qty. Outstanding");
            IF "Qty. to Handle (Base)" <> "Qty. Outstanding (Base)" THEN
              VALIDATE("Qty. to Handle (Base)","Qty. Outstanding (Base)");
            MODIFY;
            OnAfterAutofillQtyToHandleLine(WhseActivLine);

            IF NOT NotEnough THEN
              IF "Qty. to Handle" < "Qty. Outstanding" THEN
                NotEnough := TRUE;
          UNTIL NEXT = 0;
        IF NotEnough THEN
          MESSAGE(Text008);
      END;

      OnAfterAutofillQtyToHandle(WhseActivLine);
    END;

Thanks for reporting this. We agree, and we’ll publish a fix asap, either in an update for the current version or in the next major release. We will update this issue with information about availability.

Thanks for reporting this. We agree, and we’ll publish a fix asap, either in an update for the current version or in the next major release. We will update this issue with information about availability.


Refresh Tokens

Description
Refresh tokens

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


Use getRequiredRotation() for non-tiled images

The current version uses getOrientation() which is -1 if
ORIENTATION_USE_EXIF is set. Rotating the image by -1 is bad.

Good spot, thanks!

No worries, thanks for getting it in so fast!


fails to build with recent swift toolchains

swift-png fails to build with recent toolchains due to parts of tuples being used before the full value has been initialised.
Constant 'next.upstream' used before being initialized
reproducible with main nightly: 2024-07-22

i wasn’t able to reproduce it with the 6.0 beta (swift-6.0-DEVELOPMENT-SNAPSHOT-2024-07-16-a), so this is likely a type-checking regression in the nightly Swift compiler. type-checking regressions are very (!) common on the nightlies, and unfortunately it is not realistic to patch libraries for every compiler bug, so i ask that you please file this on swiftlang/swift so that a compiler dev can fix the root cause.


Override AST with new custom oxlint Rules

Hello OXC Team,
First off, thank you for the incredible work you're doing on this project. I've been using OXC and have found it to be a fantastic tool!
Request:
Currently in my team we were able to migrate some of the EsLint rules we have to OXC, but  I'd like to request a feature that would allow us to write our custom linting rules, similar to how ESLint enables custom rule creation. Whether the custom rules are written in Rust or TypeScript doesn't matter, I am expecting some sort of override to AST and report warns/errors when specific case occurs.
I understand that currently built custom rules in my team would not work out of the box since they're built upon EsTree.
But I think such a feature would let other OSS maintainers to write their rules as plugins independently.
Lemme know what do you think!

Hi @IbrahimShamma99,custom plugins are on our radar. We are working towards this.

Closing this as a duplicate.


Update samples to include new task, best practices

Update conversation summarization samples
Add tests for ConversationalSentimentTask

API change check
API changes are not detected in this pull request.


Generate and use shared library for MemoryView Utility code

Introduction
This PR is PoC for approach for generating and using shared library of internal utiity code. Cython currently creates pretty big .so files which causes issues for the clients see #6042, #6045, https://github.com/scikit-learn/scikit-learn/issues/27767. Proposed approach generates shared library containing MemoryView utility code which is loaded via standard cimport mechanism.
Example
Consider following .pyx file:
def add_one(int[:] buf):
    for x in range(buf.shape[0]):
        buf[x] += 1

When compiling using command cythonize -3fib test.pyx, cython will produce binary with size 774K. With this PR, the resulting binary size is 192K.

[!NOTE]
The size of the shared library is 805K but this size is shared with multiple files instead to be included n-times.

Steps to reproduce:

Generate shared library - this step generates .C file containing Memoryview utility code (for now only from Utility/MemoryView.pyx). New utility cython_shared_module is used for the purpouse:cython_shared_module

gcc -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -
Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -
D_FORTIFY_SOURCE=2 -fPIC -I/root/dev/cython311/include -I/usr/include/python3.11 -c MemoryView.o

gcc -shared -Wl,-O1 -Wl,-Bsymbolic-functions -g -fwrapv -O2 -g -fwrapv -O2 -g -fstack-protector-
strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 MemoryView.o -o MemoryView.cpython-
311-x86_64-linux-gnu.so

Compile your .pyx code:cython -3 test.pyx

x86_64-linux-gnu-gcc -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -
Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -
D_FORTIFY_SOURCE=2 -fPIC -I/root/dev/cython311/include -I/usr/include/python3.11 -c test.c -o
test.o

x86_64-linux-gnu-gcc -shared -Wl,-O1 -Wl,-Bsymbolic-functions -g -fwrapv -O2 -g -fwrapv -O2 -g -fstack-protector-
strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 test.o -o
test.cpython-311-x86_64-linux-gnu.so

Import and use the compiled example:

Note: MemoryView library must be in the Python path:

>>> import test
>>> from array import array
>>> a = array('i', [1,2,3])
>>> test.add_one(a)
>>> a
array('i', [2, 3, 4])

Implementation
Implementation consist of following parts:

@cname decorator was extended to support also function declarations
.pxd pipeline was extended to support @cname decorators
.pxd file was added to Utility.MemoryView.pyx, shared section was carved out which is not included anymore to the compiled files
Build pipeline was extended to add shared library to cimported libraries
New pipeline and CLI cython_shared_library was added to generate new shared library

Open questions to be answered

[ ] How we will provide shared library to the users:
- users can generate shared library or
- Cython can provide pip dependency package for that (here can be issue how we will manage versions)
[ ] How will look CLI for generating shared library and to instruct compiler to use shared library instead of generating Utility Code
[x] How we will control which functions are loaded - this will be problem in future when more and more utility code will be able to include in shared library

Future improvements

[ ] For now only part of MemoryView code is included but there is possibility to include other cython Utility code
[ ] C Utility code is also possible to shared code which will save even more binary size. I have dirty PoC for that.
[ ] shared library .pxd file can/should be templated
[ ] shared library should be tested in CI/CD

Related to #2356

I haven't really looked at the details yet.
I think we should assume that users will build their own version and that it isn't something we distribute. Mainly because there's a few options that are likely to produce binary incompatible versions of memoryview code.

there's a few options that are likely to produce binary incompatible versions of memoryview code.

Right. We should code these options into the name of the shared library, so that different configurations inside of the same distribution package can be supported.

Note
As a initial scope, I am trying to implement solution able to share code of Memoryview Cython utility code. The rest will be added in future PRs.

My view is that sharing the Memoryview code is worth it, and sharing most other utility code is not. So I'm relaxed if it's very specific for memoryviews and not easily extensible.

To raise the impact, we could also force certain directives to be always on or always off in the memoryview implementation (at least when users request a shared library), if they would otherwise result in incompatible binary code or differing behaviour across modules. That would reduce the need for separate shared libraries, compared to the naming split that we currently need for the shared ABI module.

I think we don't need to share the code over PyPI – unless we find actual hints that this might be easier for users. Just put the shared module in the package root of the current build and share it across all Cython modules of that package and its subpackages. For large packages like SciPy or Pandas, that will make a big difference.

Potentially we could treat it a bit differently and handle it with a directive. E.g.
# cython: shared_memoryviews_module = something.something_else

to generate the runtime import code.
I suggest that because I don't think user actually wants to cimport it just because you get a memoryview by doing double[::1] (or similar), not by referring to a module name.

How should we distribute shared library?

Actually, it seems that the place to look for an answer is https://github.com/cython/cython/issues/2356
After rereading the discussion there, I changed my view into suggesting a shared package on PyPI and added a proposal in https://github.com/cython/cython/issues/2356#issuecomment-2550767453.

First impressions: wiring it up is indeed not too difficult (see https://github.com/scipy/scipy/compare/main...rgommers:scipy:cy-shared-memoryview?expand=1), and the size improvement on the modules that build seems substantial (up to 500kb or 40% of total size with -O2 -g, not measured in release mode yet). However, the build doesn't work yet, there's O(10) extension modules in scipy._lib, scipy.linalg and scipy.sparse.csgrpah that built correctly, but then I get two separate errors in scipy.sparse.csgraph modules:

[37/1250] Compiling C object scipy/sparse/csgraph/_traversal.cpython-312-x86_64-linux-gnu.so.p/meson-generated__traversal.c.o
FAILED: scipy/sparse/csgraph/_traversal.cpython-312-x86_64-linux-gnu.so.p/meson-generated__traversal.c.o
/home/rgommers/mambaforge/envs/scipy-dev-py312/bin/x86_64-conda-linux-gnu-cc -Iscipy/sparse/csgraph/_traversal.cpython-312-x86_64-linux-gnu.so.p -Iscipy/sparse/csgraph -I../scipy/sparse/csgraph -I../../../mambaforge/envs/scipy-dev-py312/lib/python3.12/site-packages/numpy/_core/include -I/home/rgommers/mambaforge/envs/scipy-dev-py312/include/python3.12 -fvisibility=hidden -fdiagnostics-color=always -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -std=c17 -O2 -g -Wno-unused-but-set-variable -Wno-unused-function -Wno-conversion -Wno-misleading-indentation -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -ffunction-sections -pipe -isystem /home/rgommers/mambaforge/envs/scipy-dev-py312/include -DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -isystem /home/rgommers/mambaforge/envs/scipy-dev-py312/include -fPIC -DNPY_NO_DEPRECATED_API=NPY_1_9_API_VERSION -DCYTHON_CCOMPLEX=0 -MD -MQ scipy/sparse/csgraph/_traversal.cpython-312-x86_64-linux-gnu.so.p/meson-generated__traversal.c.o -MF scipy/sparse/csgraph/_traversal.cpython-312-x86_64-linux-gnu.so.p/meson-generated__traversal.c.o.d -o scipy/sparse/csgraph/_traversal.cpython-312-x86_64-linux-gnu.so.p/meson-generated__traversal.c.o -c scipy/sparse/csgraph/_traversal.cpython-312-x86_64-linux-gnu.so.p/_traversal.c
scipy/sparse/csgraph/_traversal.cpython-312-x86_64-linux-gnu.so.p/_traversal.c: In function '__pyx_pf_5scipy_6sparse_7csgraph_10_traversal_8_breadth_first_directed':
scipy/sparse/csgraph/_traversal.cpython-312-x86_64-linux-gnu.so.p/_traversal.c:7452:19: warning: implicit declaration of function '__pyx_memoryview_check'; did you mean 'PyMemoryView_Check'? [-Wimplicit-function-declaration]
 7452 |       __pyx_t_2 = __pyx_memoryview_check(__pyx_v_arg);
      |                   ^~~~~~~~~~~~~~~~~~~~~~
      |                   PyMemoryView_Check
scipy/sparse/csgraph/_traversal.cpython-312-x86_64-linux-gnu.so.p/_traversal.c: In function '__pyx_memviewslice_is_contig':
scipy/sparse/csgraph/_traversal.cpython-312-x86_64-linux-gnu.so.p/_traversal.c:39261:38: error: invalid use of undefined type 'struct __pyx_memoryview_obj'
39261 |     Py_ssize_t itemsize = mvs.memview->view.itemsize;
      |                                      ^~
scipy/sparse/csgraph/_traversal.cpython-312-x86_64-linux-gnu.so.p/_traversal.c: In function '__Pyx_ValidateAndInit_memviewslice':
scipy/sparse/csgraph/_traversal.cpython-312-x86_64-linux-gnu.so.p/_traversal.c:39480:74: error: invalid use of undefined type 'struct __pyx_memoryview_obj'
39480 |                                                             original_obj)->typeinfo)) {
      |                                                                          ^~
scipy/sparse/csgraph/_traversal.cpython-312-x86_64-linux-gnu.so.p/_traversal.c:39484:51: warning: implicit declaration of function '__pyx_memoryview_new' [-Wimplicit-function-declaration]
39484 |         memview = (struct __pyx_memoryview_obj *) __pyx_memoryview_new(
      |                                                   ^~~~~~~~~~~~~~~~~~~~
scipy/sparse/csgraph/_traversal.cpython-312-x86_64-linux-gnu.so.p/_traversal.c:39484:19: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
39484 |         memview = (struct __pyx_memoryview_obj *) __pyx_memoryview_new(
      |                   ^
scipy/sparse/csgraph/_traversal.cpython-312-x86_64-linux-gnu.so.p/_traversal.c:39490:19: error: invalid use of undefined type 'struct __pyx_memoryview_obj'
39490 |     buf = &memview->view;
      |                   ^~
scipy/sparse/csgraph/_traversal.cpython-312-x86_64-linux-gnu.so.p/_traversal.c: In function '__pyx_memoryview_copy_new_contig':
scipy/sparse/csgraph/_traversal.cpython-312-x86_64-linux-gnu.so.p/_traversal.c:40085:35: error: invalid use of undefined type 'struct __pyx_memoryview_obj'
40085 |     Py_buffer *buf = &from_memview->view;
      |                                   ^~
scipy/sparse/csgraph/_traversal.cpython-312-x86_64-linux-gnu.so.p/_traversal.c:40118:17: warning: implicit declaration of function '__pyx_array_new'; did you mean 'PyArray_New'? [-Wimplicit-function-declaration]
40118 |     array_obj = __pyx_array_new(shape_tuple, sizeof_dtype, buf->format, mode, NULL);
      |                 ^~~~~~~~~~~~~~~
      |                 PyArray_New
scipy/sparse/csgraph/_traversal.cpython-312-x86_64-linux-gnu.so.p/_traversal.c:40118:15: warning: assignment to 'struct __pyx_array_obj *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
40118 |     array_obj = __pyx_array_new(shape_tuple, sizeof_dtype, buf->format, mode, NULL);
      |               ^
scipy/sparse/csgraph/_traversal.cpython-312-x86_64-linux-gnu.so.p/_traversal.c:40126:54: error: invalid use of undefined type 'struct __pyx_memoryview_obj'
40126 |                                     from_mvs->memview->typeinfo);
      |                                                      ^~
scipy/sparse/csgraph/_traversal.cpython-312-x86_64-linux-gnu.so.p/_traversal.c:40131:18: warning: implicit declaration of function '__pyx_memoryview_copy_contents'; did you mean '__pyx_memoryview_copy_new_contig'? [-Wimplicit-function-declaration]
40131 |     if (unlikely(__pyx_memoryview_copy_contents(*from_mvs, new_mvs, ndim, ndim,
      |                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
scipy/sparse/csgraph/_traversal.cpython-312-x86_64-linux-gnu.so.p/_traversal.c:1227:43: note: in definition of macro 'unlikely'
 1227 |   #define unlikely(x) __builtin_expect(!!(x), 0)
      |                                           ^
scipy/sparse/csgraph/_traversal.cpython-312-x86_64-linux-gnu.so.p/_traversal.c: In function '__Pyx_init_memviewslice':
scipy/sparse/csgraph/_traversal.cpython-312-x86_64-linux-gnu.so.p/_traversal.c:40156:30: error: invalid use of undefined type 'struct __pyx_memoryview_obj'
40156 |     Py_buffer *buf = &memview->view;
      |                              ^~
In file included from scipy/sparse/csgraph/_traversal.cpython-312-x86_64-linux-gnu.so.p/_traversal.c:1336:
scipy/sparse/csgraph/_traversal.cpython-312-x86_64-linux-gnu.so.p/_traversal.c:2804:57: error: invalid use of undefined type 'struct __pyx_memoryview_obj'
 2804 | #define __pyx_get_slice_count_pointer(memview) (&memview->acquisition_count)
      |                                                         ^~
scipy/sparse/csgraph/_traversal.cpython-312-x86_64-linux-gnu.so.p/_traversal.c:1424:14: note: in expansion of macro '__pyx_atomic_incr_relaxed'
 1424 |              __pyx_atomic_incr_relaxed(__pyx_get_slice_count_pointer(memview))
      |              ^~~~~~~~~~~~~~~~~~~~~~~~~
scipy/sparse/csgraph/_traversal.cpython-312-x86_64-linux-gnu.so.p/_traversal.c:1424:40: note: in expansion of macro '__pyx_get_slice_count_pointer'
 1424 |              __pyx_atomic_incr_relaxed(__pyx_get_slice_count_pointer(memview))
      |                                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
scipy/sparse/csgraph/_traversal.cpython-312-x86_64-linux-gnu.so.p/_traversal.c:40184:9: note: in expansion of macro '__pyx_add_acquisition_count'
40184 |     if (__pyx_add_acquisition_count(memview) == 0 && !memview_is_new_reference) {
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~
scipy/sparse/csgraph/_traversal.cpython-312-x86_64-linux-gnu.so.p/_traversal.c: In function '__Pyx_INC_MEMVIEW':
scipy/sparse/csgraph/_traversal.cpython-312-x86_64-linux-gnu.so.p/_traversal.c:2804:57: error: invalid use of undefined type 'struct __pyx_memoryview_obj'
 2804 | #define __pyx_get_slice_count_pointer(memview) (&memview->acquisition_count)
      |                                                         ^~
scipy/sparse/csgraph/_traversal.cpython-312-x86_64-linux-gnu.so.p/_traversal.c:1424:14: note: in expansion of macro '__pyx_atomic_incr_relaxed'
 1424 |              __pyx_atomic_incr_relaxed(__pyx_get_slice_count_pointer(memview))
      |              ^~~~~~~~~~~~~~~~~~~~~~~~~
scipy/sparse/csgraph/_traversal.cpython-312-x86_64-linux-gnu.so.p/_traversal.c:1424:40: note: in expansion of macro '__pyx_get_slice_count_pointer'
 1424 |              __pyx_atomic_incr_relaxed(__pyx_get_slice_count_pointer(memview))
      |                                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
scipy/sparse/csgraph/_traversal.cpython-312-x86_64-linux-gnu.so.p/_traversal.c:40240:29: note: in expansion of macro '__pyx_add_acquisition_count'
40240 |     old_acquisition_count = __pyx_add_acquisition_count(memview);
      |                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~
scipy/sparse/csgraph/_traversal.cpython-312-x86_64-linux-gnu.so.p/_traversal.c: In function '__Pyx_XCLEAR_MEMVIEW':
scipy/sparse/csgraph/_traversal.cpython-312-x86_64-linux-gnu.so.p/_traversal.c:2804:57: error: invalid use of undefined type 'struct __pyx_memoryview_obj'
 2804 | #define __pyx_get_slice_count_pointer(memview) (&memview->acquisition_count)
      |                                                         ^~
scipy/sparse/csgraph/_traversal.cpython-312-x86_64-linux-gnu.so.p/_traversal.c:1426:13: note: in expansion of macro '__pyx_atomic_decr_acq_rel'
 1426 |             __pyx_atomic_decr_acq_rel(__pyx_get_slice_count_pointer(memview))
      |             ^~~~~~~~~~~~~~~~~~~~~~~~~
scipy/sparse/csgraph/_traversal.cpython-312-x86_64-linux-gnu.so.p/_traversal.c:1426:39: note: in expansion of macro '__pyx_get_slice_count_pointer'
 1426 |             __pyx_atomic_decr_acq_rel(__pyx_get_slice_count_pointer(memview))
      |                                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
scipy/sparse/csgraph/_traversal.cpython-312-x86_64-linux-gnu.so.p/_traversal.c:40264:29: note: in expansion of macro '__pyx_sub_acquisition_count'
40264 |     old_acquisition_count = __pyx_sub_acquisition_count(memview);
      |                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~

[40/1250] Generating 'scipy/sparse/csgraph/_shortest_path.cpython-312-x86_64-linux-gnu.so.p/_shortest_path.c'
FAILED: scipy/sparse/csgraph/_shortest_path.cpython-312-x86_64-linux-gnu.so.p/_shortest_path.c
/home/rgommers/mambaforge/envs/scipy-dev-py312/bin/cython -3 --fast-fail --output-file scipy/sparse/csgraph/_shortest_path.cpython-312-x86_64-linux-gnu.so.p/_shortest_path.c --include-dir . ../scipy/sparse/csgraph/_shortest_path.pyx -Xfreethreading_compatible=True --use-shared-utility=scipy

Error compiling Cython file:
------------------------------------------------------------
...
        # for index 'i', candidate_distances[i] stores the distance
        # of the path stored in candidate_predecessors[i. :]
        double[:] candidate_distances = np.full(K, INFINITY, dtype=DTYPE)
        int[:, :] candidate_predecessors = np.full((K, N), NULL_IDX, dtype=ITYPE)
        # Store the original graph weights for restoring the graph
        double[:] csr_weights = original_weights.copy()
                                                ^
------------------------------------------------------------

/home/rgommers/code/scipy/scipy/sparse/csgraph/_shortest_path.pyx:1918:48: Compiler crash in AnalyseExpressionsTransform

ModuleNode.body = StatListNode(_shortest_path.pyx:15:0)
StatListNode.stats[44] = StatListNode(_shortest_path.pyx:1867:0)
StatListNode.stats[0] = CompilerDirectivesNode(_shortest_path.pyx:1867:0)
CompilerDirectivesNode.body = StatListNode(_shortest_path.pyx:1867:0)
StatListNode.stats[0] = CFuncDefNode(_shortest_path.pyx:1867:0,
    args = [...]/10,
    modifiers = [...]/0,
    outer_attrs = [...]/2,
    visibility = 'private')
File 'Nodes.py', line 400, in analyse_expressions: StatListNode(_shortest_path.pyx:1876:4)
File 'Nodes.py', line 400, in analyse_expressions: StatListNode(_shortest_path.pyx:1915:8)
File 'Nodes.py', line 6153, in analyse_expressions: SingleAssignmentNode(_shortest_path.pyx:1918:8,
    first = True)
File 'Nodes.py', line 6286, in analyse_types: SingleAssignmentNode(_shortest_path.pyx:1918:8,
    first = True)
File 'ExprNodes.py', line 6164, in analyse_types: SimpleCallNode(_shortest_path.pyx:1918:53,
    analysed = True,
    result_is_used = True,
    use_managed_ref = True)
File 'ExprNodes.py', line 7592, in analyse_types: AttributeNode(_shortest_path.pyx:1918:48,
    attribute = 'copy',
    initialized_check = True,
    is_attribute = 1,
    is_called = 1,
    member = 'copy',
    needs_none_check = True,
    op = '.',
    result_is_used = True,
    use_managed_ref = True)
File 'ExprNodes.py', line 7723, in analyse_as_ordinary_attribute_node: AttributeNode(_shortest_path.pyx:1918:48,
    attribute = 'copy',
    initialized_check = True,
    is_attribute = 1,
    is_called = 1,
    member = 'copy',
    needs_none_check = True,
    op = '.',
    result_is_used = True,
    use_managed_ref = True)
File 'ExprNodes.py', line 7777, in analyse_attribute: AttributeNode(_shortest_path.pyx:1918:48,
    attribute = 'copy',
    initialized_check = True,
    is_attribute = 1,
    is_called = 1,
    member = 'copy',
    needs_none_check = True,
    op = '.',
    result_is_used = True,
    use_managed_ref = True)

Compiler crash traceback from this point on:
  File "/home/rgommers/mambaforge/envs/scipy-dev-py312/lib/python3.12/site-packages/Cython/Compiler/ExprNodes.py", line 7777, in analyse_attribute
    obj_type.declare_attribute(self.attribute, env, self.pos)
  File "/home/rgommers/mambaforge/envs/scipy-dev-py312/lib/python3.12/site-packages/Cython/Compiler/PyrexTypes.py", line 819, in declare_attribute
    MemoryView.use_cython_array_utility_code(env)
  File "/home/rgommers/mambaforge/envs/scipy-dev-py312/lib/python3.12/site-packages/Cython/Compiler/MemoryView.py", line 811, in use_cython_array_utility_code
    cython_scope.viewscope.lookup('array_cwrapper').used = True
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'used'

It's very well possible that I am missing something, but the modules that are failing do seem to get --use-shared-utility=scipy passed correctly just like the other modules that do build.

I think this is also easy to support in cythonize(), which would simply return one more Extension to build.
Regarding the cython CLI, it seems good to keep the step of generating the shared module .c file separate from the translation of user modules, as you did with your new script.

Generate shared extention via command: cython_shared_module (you can use -o parameter to skip 2nd step)
Copy the generated MemoryView.c to the location where it should be placed you mentioned scipy/_lib

I think these two steps should be one. I expect the generator script to be run from the build directory and it should write the file directly to the right package directory. Cython needs to know the final qualified module name during the translation, and thus also knows where to put the file.

Looking at scipy.sparse._traversal (one of the modules that fails) it doesn't actually use memoryviews deliberately. What it does use is cnp.ndarray fused types.
I think we're getting the memoryview via
https://github.com/cython/cython/blob/07d1c72a42fb1e7a95b486eb50df2add49922c45/Cython/Compiler/FusedNode.py#L445-L450
and
https://github.com/cython/cython/blob/07d1c72a42fb1e7a95b486eb50df2add49922c45/Cython/Compiler/FusedNode.py#L398-L399
so I think that's a way of including memoryviews in a module that you probably haven't covered with.
A simple example to test with
cimport numpy as cnp
cimport cython

def f(cnp.ndarray[cython.floating, ndim=2] x):
    print(x[0,0])


[Forge 1.20.1] Coffee Delight causing world crash on new world creation and when loading existing worlds.

Hi there!
I have been experiencing crashing problems with your mod addon and Farmer's Delight in Forge 1.20.1
It is preventing world creation, and when adding the mod addon afterwards prevents existing worlds loading at all.
After removing the mod in both cases, the worlds load correctly.
Forge & Mod Versions:

Forge 1.20.1 47.2.0
CoffeeDelight-Forge-1.4.jar
FarmersDelight-1.20.1-1.2.3.jar

Here is my crash report from trying to create a world with this mod installed:
crash-2023-10-26_14.02.11-client.txt
This is the log obtained while loading the world with the mod addon added after successfully creating a world with just Farmer's Delight and no other addons to confirm this addon was causing the problem.
2023-10-26-7.log
After digging into the log file after re-adding the addon once a world file was successfully created for testing, it revealed this:
...
[14:06:40] [Render thread/INFO]: Injecting existing registry data into this CLIENT instance
[14:06:41] [Render thread/ERROR]: Registry loading errors:
> Errors in registry minecraft:root:
>> Errors in element minecraft:worldgen/placed_feature:
java.lang.IllegalStateException: Unbound values in registry ResourceKey[minecraft:root / minecraft:worldgen/placed_feature]: [coffee_delight:wild_coffee_bush_patch]
	at TRANSFORMER/minecraft@1.20.1/net.minecraft.core.MappedRegistry.m_203521_(MappedRegistry.java:331)
	at TRANSFORMER/minecraft@1.20.1/net.minecraft.resources.RegistryDataLoader.m_257131_(RegistryDataLoader.java:69)
	at java.base/java.lang.Iterable.forEach(Iterable.java:75)
	at TRANSFORMER/minecraft@1.20.1/net.minecraft.resources.RegistryDataLoader.m_247207_(RegistryDataLoader.java:65)
	at TRANSFORMER/minecraft@1.20.1/net.minecraft.server.WorldLoader.m_246152_(WorldLoader.java:54)
	at TRANSFORMER/minecraft@1.20.1/net.minecraft.server.WorldLoader.m_245736_(WorldLoader.java:58)
	at TRANSFORMER/minecraft@1.20.1/net.minecraft.server.WorldLoader.m_214362_(WorldLoader.java:31)
	at TRANSFORMER/minecraft@1.20.1/net.minecraft.client.gui.screens.worldselection.WorldOpenFlows.m_246486_(WorldOpenFlows.java:162)
	at TRANSFORMER/minecraft@1.20.1/net.minecraft.client.gui.screens.worldselection.WorldOpenFlows.m_233122_(WorldOpenFlows.java:113)
	at TRANSFORMER/minecraft@1.20.1/net.minecraft.client.gui.screens.worldselection.WorldOpenFlows.doLoadLevel(WorldOpenFlows.java:181)
	at TRANSFORMER/minecraft@1.20.1/net.minecraft.client.gui.screens.worldselection.WorldOpenFlows.m_233145_(WorldOpenFlows.java:169)
	at TRANSFORMER/minecraft@1.20.1/net.minecraft.client.gui.screens.worldselection.WorldOpenFlows.m_233133_(WorldOpenFlows.java:65)
	at TRANSFORMER/minecraft@1.20.1/net.minecraft.client.gui.screens.worldselection.WorldSelectionList$WorldListEntry.m_101744_(WorldSelectionList.java:575)
	at TRANSFORMER/minecraft@1.20.1/net.minecraft.client.gui.screens.worldselection.WorldSelectionList$WorldListEntry.m_101704_(WorldSelectionList.java:474)
	at TRANSFORMER/minecraft@1.20.1/net.minecraft.client.gui.screens.worldselection.WorldSelectionList$WorldListEntry.m_6375_(WorldSelectionList.java:413)
	at TRANSFORMER/minecraft@1.20.1/net.minecraft.client.gui.components.AbstractSelectionList.m_6375_(AbstractSelectionList.java:298)
	at TRANSFORMER/minecraft@1.20.1/net.minecraft.client.gui.components.events.ContainerEventHandler.m_6375_(ContainerEventHandler.java:38)
	at TRANSFORMER/minecraft@1.20.1/net.minecraft.client.MouseHandler.m_168084_(MouseHandler.java:92)
...

Happening for me too.

Sorry Im late, and now fix it soon


COMMONSRDF-60: update commons-parent version

This upgrades the parent pom to the latest version of commons-parent.

LGTM


How to access data from excel sheet for bot and display it in table format. I am using c# for bot application.

System Information (Required)

SDK Language: .NET/C#
Development Environment: LOCALHOST

Issue Description
I am using C# for bot development. How can I access excel sheet data (multiple sheets in table structured) and display that data to the bot according to some conditions i.e. How to apply where clause when accessing excel sheet?

This question may be posted on StackOverflow instead of here. Moreover it's more related to accessing Excel Sheet in C# than to Bot Framework problematics

@SGZP Please find an example code here
Excel Bot is a sample that demonstrates how to use the Microsoft Graph and specifically the Excel REST API to access Excel workbooks stored in OneDrive for Business through a conversational user interface. It is written in C# and it uses the Microsoft Bot Framework and the Language Understanding Intelligent Service (LUIS).
Note: The code in this sample was originally written for a user experience prototype and does not necessarily demonstrate how to create production quality code.


Dapr init does not get the latest stable version

Expected Behavior
Dapr init does not get the latest stable version.
Actual Behavior
$ dapr init
⌛  Making the jump to hyperspace...
❌  docker: invalid reference format.
See 'docker run --help'.

Steps to Reproduce the Problem
Get RC5, run dapr uninstall --all and dapr init.
Release Note

RELEASE NOTE: Fix Dapr stable version initialization

With the addition of the upgrade command, the same version runtimeVersion is being shared between upgrade and init.
In init the flag is mapped by default to "latest" while in upgrade it is mapped to "".
This broke the default init path since it expects the default to be "latest" and not empty ....


Allow multiple pinned indexes in tool.uv.sources

Summary
This PR lifts the restriction that a package must come from a single index. For example, you can now do:
[project]
name = "project"
version = "0.1.0"
readme = "README.md"
requires-python = ">=3.12"
dependencies = ["jinja2"]

[tool.uv.sources]
jinja2 = [
    { index = "torch-cu118", marker = "sys_platform == 'darwin'"},
    { index = "torch-cu124", marker = "sys_platform != 'darwin'"},
]

[[tool.uv.index]]
name = "torch-cu118"
url = "https://download.pytorch.org/whl/cu118"

[[tool.uv.index]]
name = "torch-cu124"
url = "https://download.pytorch.org/whl/cu124"

The construction is very similar to the way we handle URLs today: you can have multiple URLs for a given package, but they must appear in disjoint forks. So most of the code is just adding that abstraction to the resolver, following our handling of URLs.
Closes #7761.

Looks like this needs a docs update though.

would love to use this, looking forward to a release with this and some updated docs!

Probably next week just because I'm traveling right now.

Hi @charliermarsh any updates on this one, anything I can help with?

No, it’ll ship on Monday.

@charliermarsh we can also publish some new docs for torch installation with this PR?


etcpack.exe - System Error

Getting this error when trying to add the songs to my Quest. Full message says
The code execution cannot proceed because VCRUNTIME140D.dll was not found. Reinstalling the program may fix this problem.

Follows up with same error except ucrtbased.dll,

Clicked through the errors, still did the install, everything seems to be working anyways. I'd look into why those errors are popping up, but it doesn't seem to be stopping it

Wrong patcher project anyways, you're looking for emulamer's patcher. My patcher doesn't use etcpack


Added docker env/proxy capability to manifest generation.

[#139670355]

@pivotal-jwinters Please sign the Contributor License Agreement!
Click here to manually synchronize the status of this Pull Request.
See the FAQ for frequently asked questions.

@pivotal-jwinters Thank you for signing the Contributor License Agreement!

Suggest putting these options (commented out) with explanation in: project-config

Could you please add test that checks that result of bin/generate_service_manifest is valid YAML?
Have you considered using empty values for all three properties? If we set those as defaults that can be overwritten in the director.yml or *-vars.yml, this might work without extra condition checks.


Package signing breaks the build

@SabotageAndi looks like 8c5a3ef6a3e4d099cb6aff400a9fb3906d26cbed broke the build
I only discovered it just now - please keep an eye on CI when you push.
Any idea how to fix this?

Oh, sorry. Didn't notice that gherkin-dotnet is now building also on Travis.
Somewhen in the past it was disabled.
Error is, because it looks like that assembly signing is only supported on Windows.
I will disable it on Linux & MacOS

Fixed


Updating a Single Item in a RealmList

I am converting a Room database on Android to Realm using kotlin SDK.
My data is stored on a private server and I get access via a self written API using Kotlin & MongoDb
I retreive my data from the remote server and cache it into the Realm database.
I need to find and replace(Upsert) a record inside the EmbeddedRealmObject witch is part of a RealmList
So I need to update (looking at the sample json data added below) lets say "skillName": "Java", to
{
	"skillName": "JavaScript",
	"skillLevel": "Intermediate",
	"skillAcquiredDate":<PHONE_NUMBER>
}

My question is this:
with Kotlin how do I select and change the correct sibling record? using realm.write
I have a Realm defined like this sample
class SampleUser : RealmObject {
	@PrimaryKey
	var _id: ObjectId = ObjectId()
	var name: String = ""
	var skills : RealmList<SampleSkill> = realmListOf()
}

class SampleSkill : EmbeddedRealmObject {
	var skillName: String = ""
	var skillLevel: String = ""
	var skillAcquiredDate : Long = 0L
}

My Data looks like this
[
	{
		"_id": "6425837dd6abce4429bb4c12",
		"name": "Sample Name One",
		"skills": [
			{
				"skillName": "Java",
				"skillLevel": "Beginner",
				"skillAcquiredDate":<PHONE_NUMBER>
			},
			{
				"skillName": "Kotlin",
				"skillLevel": "Advanced",
				"skillAcquiredDate":<PHONE_NUMBER>
			}
		]
	},
	{
		"_id": "6425837dd6abce4429bb4c11",
		"name": "Sample Name two",
		"skills": [
			{
				"skillName": "C#",
				"skillLevel": "Intermediate",
				"skillAcquiredDate":<PHONE_NUMBER>
			},
			{
				"skillName": "Kotlin",
				"skillLevel": "Beginner",
				"skillAcquiredDate":<PHONE_NUMBER>
			}
		]
	}
]

Hi, we recommend taking a look at our documentation to learn the best practices for reading and writing data. Realm Query Language documentation
You can upsert data by passing the policy UpdatePolicy.ALL when invoking copyToRealm:
val jsonSampleUsers: List<SampleUser> = TODO("This would your input")

realm.write {
    jsonSampleUsers.forEach { sampleUser ->
        copyToRealm(sampleUser, UpdatePolicy.ALL)
    }
}

That does not answer my quedstion

I came up with this solution
override suspend fun upsertSampleSkill(sampleUserName: String, sampleSkill: SampleSkill) {
	val parentSampleUser = realm.query(clazz = SampleUser::class, query = "name == $0", sampleUserName).find()
	if (parentSampleUser.isNotEmpty()) {
		val skillToChange = parentSampleUser.query("skillName == #0", sampleSkill.skillName).find()
		if (skillToChange.isNotEmpty()){
			realm.write { findLatest(skillToChange.first())?.skills?.set(0,sampleSkill) }
		}
	}
}

However I am not sure this is the correct way!

Oh, do you want to modify the skills element by element? Then you can do something like this:
suspend fun upsertSampleSkill(sampleUserName: String, sampleSkill: SampleSkill) {
        realm.write {
            realm.query<SampleUser>(query = "name == $0", sampleUserName)
                .first()
                .find()
                ?.let { parentSampleUser ->
                    parentSampleUser.skills
                        .query("skillName == #0", sampleSkill.skillName)
                        .first()
                        .find()
                        ?.let {
                            // Do here the update
                        } ?: parentSampleUser.skills.add(sampleSkill) // do an insert
                }
        }
    }

Note that the sample code that you provided and this one does not take into account deletions.
Also, you would like to join this cache update in a single transaction, it would be more performant.

Closing due to inactivity.


Load firestore export from GCS is missing from documentation.

I'm trying to load firestore exports from GCS into Bigquery and having trouble with the schemas, If I do not specify a schema in the nodejs SDK it shows me an error that the schema is missing, if I specify autodetect it loads the data in a weird manner.
Please see the nodejs code below.

  const {BigQuery} = require('@google-cloud/bigquery');
  const {Storage} = require('@google-cloud/storage');
  const storage = new Storage();
  const bigqueryClient = new BigQuery();

  const options = {

  }
  const jobConfigurationLoad = {
    load: {sourceFormat: 'DATASTORE_BACKUP'},
    location: 'US',
    writeDisposition: 'WRITE_TRUNCATE'
  };

  const [table] = await bigqueryClient
                    .dataset('Connect')
                    .table('participants', options)
                    .load(storage.bucket('connect_firestore_dev_backup')
                    .file(gcsEvent.name), jobConfigurationLoad);

It would be helpful if documentation is added on how to import firestore from GCS to Bigquey using nodejs.

I think the issue is arising from the job configuration you are using. There should not be a load property.
Please try:
  const jobConfigurationLoad = {
    sourceFormat: 'DATASTORE_BACKUP',
    location: 'US',
    writeDisposition: 'WRITE_TRUNCATE'
  };

A couple samples incorrectly used a load property here, but were updated with #912

I think the issue is arising from the job configuration you are using. There should not be a load property.
Please try:
  const jobConfigurationLoad = {
    sourceFormat: 'DATASTORE_BACKUP',
    location: 'US',
    writeDisposition: 'WRITE_TRUNCATE'
  };

A couple samples incorrectly used a load property here, but were updated with #912


How to delete wrong autocomplete?

Summary of the new feature / enhancement
I want to be able to remove wrong autocompletes.
Proposed technical implementation details (optional)
A configuration somewhere or a command that allows us to remove the currently cached autocompletes.

currently cached autocompletes.

PSReadline history? Clear (Get-PSReadLineOption).HistorySavePath or optimize it. I sometimes replace the content of this file with a template of the commands I use most often. You also can configure behavior of PSReadline (with AddToHistoryHandler) to filter saved history.
Get-PSReadlineOption
Set-PSReadlineOption

@237dmitry I don't know what that does. I am talking about autocomplete for the new PowerShell Core.

not a satisfactory answer, I type lots of wrong command everyday, and I don't want to go and manually remove them.


How to run command once the plugin has loaded

I am using Grepper and would like the lazy load it and send a global setting.
let g:grepper.dir = 'repo,cwd'

Problem is that as it's lazy loaded the g:grepper. does not yet exist...
Is there a way to set this setting automatically once the plugin is actually loaded?

:version
NVIM v0.5.0-d5aaad14e
Build type: Release
LuaJIT 2.0.5
Compilation: /usr/local/Homebrew/Library/Homebrew/shims/mac/super/clang -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 -DNDEBUG -DMIN_LOG_LEVEL=3 -Wall -Wextra -pedantic -Wno-unused-parameter -Wstrict-prototypes -
std=gnu99 -Wshadow -Wconversion -Wmissing-prototypes -Wimplicit-fallthrough -Wvla -fstack-protector-strong -fdiagnostics-color=auto -DINCLUDE_GENERATED_DECLARATIONS -D_GNU_SOURCE -DNVIM_MSGPACK_HAS_FLOAT3
2 -DNVIM_UNIBI_HAS_VAR_FROM -I/tmp/neovim-20191124-4308-1f7msxw/build/config -I/tmp/neovim-20191124-4308-1f7msxw/src -I/usr/local/include -I/tmp/neovim-20191124-4308-1f7msxw/deps-build/include -I/usr/loca
l/opt/gettext/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/usr/include -I/tmp/neovim-20191124-4308-1f7msxw/build/src/nvim/auto -I/tmp/neovi
m-20191124-4308-1f7msxw/build/include
Compiled by xxx@xxxx

Features: +acl +iconv +tui
See ":help feature-compile"

   system vimrc file: "$VIM/sysinit.vim"
  fall-back for $VIM: "/usr/local/Cellar/neovim/HEAD-d5aaad1/share/nvim"

Type:

[ ] Bug
[ ] Enhancement
[ ] Feature Request
[x] Question

OS:

[ ] All/Other
[ ] Linux
[x] OS X
[ ] Windows

Vim:

[ ] Terminal Vim
[ ] GVim
[x] Neovim

You can set up User autocmd as shown in the README page. But I believe you can just write let g:grepper = { 'dir': 'repo,cwd' } and Grepper will handle the rest.


[BUG] Build is breaking when you do a "rush update --full --purge --recheck" due to tslib v1.11.0 update

When the npm-shrinkwrap.json updates to the latest version of tslib (1.11.0) the build is breaking due to an incompatibility with tslib 1.11.0 and Typescript 2.5.3

We published version 2.5.1 to npm last night, which should address this issue. Once we complete the rollout to the CDN, I'll close this issue. The tslib team has since published a v1.11.1 which should address this issue, we will roll forward to confirm in a future release


Need to update this document that support .NET SDK v3

Since SDK of cosmos db has been updated to v3 that using CosmosClient, this document seems out of date with v2 DocumentClient. So will you update this document as well?

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

ID: 498a360c-9ba7-a124-5fb5-7f4c85c54041
Version Independent ID: 459bc7a4-f3a9-4786-a272-b8d5bb0d73f3
Content: Get SQL query performance & execution metrics
Content Source: articles/cosmos-db/profile-sql-api-query.md
Service: cosmos-db
Sub-service: cosmosdb-sql
GitHub Login: @ginamr
Microsoft Alias: girobins

@ginamr Thank you for the feedback.
This is being assigned to the content author to evaluate and update the documentation as appropriate.

@TianyiLu  Thanks for the feedback and apologies for the extremely slow response.
We will work to get this page prioritized for updating.
Thanks.
#assign:markjbrown

Thank you again for your patience.
The reason this page is not updated for the v3 SDK is that it does not handle the query metrics in the same way as our v2 SDK did.
After discussing internally the team is adding to their upcoming semester. You can track the progress on this from our .NET SDK GitHub repo here, https://github.com/Azure/azure-cosmos-dotnet-v3/issues/2121
Thanks again for reporting. Will close this docs issue at this time.
#please-close


shutdown method for jobs

This provides a shutdown method for jobs via a new "job handle". Handles encapsulate the worker and scheduler tasks as well as a cancellation token that's passed down to the worker and scheduler.
We also introduce a method for setting the shutdown token on both the worker and scheduler.

@kirillsalykin lmk if this approach works for you.

LGTM


Setter not called when changing value within dictionary

Godot version
4.2 stable
System information
Windows 10
Issue description
Changing a dictionary with a setter method calls the setter method.
e.g.
var d : Dictionary : set = _set_d

func _set_d( v ):
   v = d

func test():
d = { v = 1 } # this calls the setter method
d.v = 2 # this does not call the setter method

I've included an overly complicated example in this issue.
Steps to reproduce
var d : Dictionary : set = _set_d

func _set_d( v ):
   v = d

func test():
d = { v = 1 } # this calls the setter method
d.v = 2 # this does not call the setter method

Minimal reproduction project
2023_12_Test_Setter.zip

I think this is expected though, dictionaries are passed by reference like objects, so d gives you that reference, so .v will assign a value in the dictionary, not the object that holds the dictionary. The same goes if d was an array, or an object instance.

I think this is expected though, dictionaries are passed by reference like objects, so d gives you that reference, so .v will assign a value in the dictionary, not the object that holds the dictionary. The same goes if d was an array being accessed with d[i], or fields of an object instance.

In 3.x, the setter is triggered. This change in 4.2 goes against the behavior of 3.x and is a major impediment to the use of setters and getters with dictionaries. Can you propose an alternative way of triggering the setter whilst only changing a value?

I wasn't even aware that this happened with dictionaries in 3.x. I only knew passed-by-value types such as Vector2 were doing it as an exceptional case, specifically because they are passed by value. Maybe 3.x had a more general behavior that "a.b.c" access when setters are involved was also calling the setter all the time even if unnecessary. That behavior has changed a while ago since Godot 4.0 was released, and modifying that behavior at this point is a breaking change I guess.
In this situation I usually just make a method, like set_special_dictionary_property_that_also_triggers_extra_logic("property", value).
Another option is instead of a dictionary, have the key you set in that dictionary be a property of the object directly (so no dictionary), or override _set(key, value).

I wasn't even aware that this happened with dictionaries in 3.x. I only knew passed-by-value types such as Vector2 were doing it as an exceptional hack, specifically because they are passed by value. Maybe 3.x had a more general behavior that "a.b.c" access when setters are involved was also calling the setter all the time even if unnecessary. That behavior has changed a while ago since Godot 4.0 was released, and modifying that behavior at this point is a breaking change I guess.
In this situation I usually just make a method, like set_special_dictionary_property_that_also_triggers_extra_logic("property", value). Another option is instead of a dictionary, have the key you set in that dictionary be a property of the object directly (so no dictionary), or override _set(key, value).

Thanks. However, I think that it is very restrictive to have the setter is not triggered when changing a value and only triggered when changing the entire dictionary. It actually defeats the purpose of using setters and getters in dictionaries when, by definition, you only change a single value.
I did not test the behavior of arrays but is it the same? Do you not trigger the setter when changing only one element of the array? Or only when changing the entire array?

I just tested with arrays and they work the same.

Thanks for testing! I guess that there must be a decision somewhere about this behavior.
It is very different from 3.x.
If the setter is not called when changing the value of an element of an array or a value of a dictionary, it almost defeats the purpose of using setters with arrays and dictionaries. Would you agree?
If you consider that this is intentional, then it is a break of compatibility. I'm not sure if it would also require some form of documentation.

The reason it works differently for Vector2 is that it is not a reference type
This is complicated, but the question here is where to draw the line?
What about a nested structure? What about a dictionary of arrays? Or a dictionary containing resources? Like my_dict["key"].foo.bar? Where foo is a class?
How far down the rabbit hole do we go?

This was changed intentionally in #62462 to solve a number of issues (some are linked in that PR, some were already closed by then as duplicate of some of the ones linked in the PR). For example #17310 shows an example of why it's hard to draw the line between different ways to modify a dictionary or an array that would or would not trigger a setter.'
Overall, it seems best to me that the setter is only triggered when setting (replacing) the variable, i.e. dict = new_dict.
If modifying the dictionary/array in place by indexing, appending, removing, etc. is not wanted in many cases, and goes beyond the usual definition of a setter.
And indeed if you start factoring in Object indexing, and nested collections, it quickly becomes very complex.
I acknowledge that the change does restrict some use cases that worked in 3.x, but as seen with these bug reports the parts that worked were the exception more than the rule.
This may require better documentation in the GDScript docs if it's not made explicit yet.

What about Getters? Those are related and would be quite useful to have with dictionaries.

@IntangibleMatter Both getters and setters are defined for class properties not for contents of these properties. Like setters are triggered when you assign to the property, getters are triggered when you access the property. If you access property's own data and members, that's a different story, the class is unaware of this.
If you want to have a data structure with getters and setters, you should probably use custom classes instead of dictionaries. Structs, when they are added, could also be useful here, I guess.


[Bug]: Hop Server inaccessible after Jetty upgrade

Apache Hop version?
SNAPSHOT-20230307
Java version?
openjdk version "11.0.18" 2023-01-17
Operating system
Linux
What happened?
after the Jetty upgrade in PR 2508
Issue disappeared after building with a reverted Jetty version, back to 9.4.35.v20201120.
curl -u cluster   http://localhost:8998
Enter host password for user 'cluster':

<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/>
<title>Error 403 Forbidden</title>

HTTP ERROR 403 Forbidden

URI:	/

STATUS:	403

MESSAGE:	Forbidden

SERVLET:	-

Powered by Jetty:// 9.4.51.v20230217

Issue Priority
Priority: 3
Issue Component
Component: Actions

Fantastic sleuthing!


Included reference to change in CDC CSV format 22.2

Fixes DOC-5870
Included a couple of lines for the change to the CSV format. This has been added to the Changefeed Messages, CREATE CHANGEFEED options table, and Export Data with Changefeeds pages.
Also, added a few small formatting changes.

This change is


Add a new parameter to support change API address

Since the OpenAI can be run on Azure, and for further API may replace by other self proxy use.
I suggest replacing the fixed API address with defined a variable.
And I try to add a new parameter to specify the API address in case needs to be replaced.

Hi @jonrzhang Thank you for contributing! I went through the Azure OpenAI docs and I see that changing the address would require a little more than changing the base url. To be specific the url for a request to Azure OpenAI is
https://YOUR_RESOURCE_NAME.openai.azure.com/openai/deployments/YOUR_DEPLOYMENT_NAME/completions?api-version=2022-12-01\
You can see the example request in the middle of the page.
YOUR_RESOURCE_NAME, YOUR_DEPLOYMENT_NAME and the api version date being variables the user would have to provide.
The way I would implement this is have these YOUR_RESOURCE_NAME, YOUR_DEPLOYMENT_NAME as variables that the user should provide as arguments when starting the script. If the user provides a value for these, then the azure url is build and set as the url value instead of the OpenAI default. Is this something you are willing to explore?


[Bug]: gradle says java 11 is required but documentation says java8 or higher

Describe the bug
I tried to build the source with jdk1.8 and gradle build failed with this below error
> At least Java 11 is required to use opensearch gradle tools
To reproduce
./gradlew
Expected behavior
Builds with jdk1.8 or update the documentation
Screenshots
If applicable, add screenshots to help explain your problem.
Host / Environment
macOS
Additional context
No response
Relevant log output
No response

Hi, the minimum required version for the build is Java 11. We're going to update the documentation soon.

@harshavamsi except for the build part. Will the library work fine with Java 8 or we have dropped support for it ?

@himgang it will work with Java 8.


Facebook Post is "missing" on iOS

Hello,
I've implemented the SharePlugin in my Xamarin.Forms project.
This works fine, but I meet a little "problem" on iOS: when I share a link,, I haven't the choice to post it on Facebook:

screenshot of my app - no Facebook

This option doesn't seem to be avalaible in the Activities list:

list of the activities - no Facebook

But on Android, there is no problem:

screenshot of my app - with Facebook

However, if I use your sample, the "Facebook" option is well enabled on iOS:

from the app
in the list of activities

Would you have any explanation?
I've share the link like this:
private void OnShareIconClicked(object sender, EventArgs e)
{
    if (!CrossShare.IsSupported)
        return;

    CrossShare.Current.Share(new Plugin.Share.Abstractions.ShareMessage
    {
        Title = "MyApp",
        Text = _vm.AgendaEvent.encart_titre,
        Url = _vm.AgendaEvent.infos_url
    });
}

After updating Xamarin.Forms package to v<IP_ADDRESS>9-pre2 and Plugin.Share to v7.0.1 on your sample, I've seen that Facebook is not longer available.
Is it normal?

https://github.com/jguertl/SharePlugin/issues/68


Fix asset Container crash with predicate

https://forum.babylonjs.com/t/assetcontainer-crash-in-instantiatemodelstoscene-when-using-predicate/39699

Please make sure to label your PR with "bug", "new feature" or "breaking change" label(s).
To prevent this PR from going to the changelog marked it with the "skip changelog" label.

Please make sure to label your PR with "bug", "new feature" or "breaking change" label(s).
To prevent this PR from going to the changelog marked it with the "skip changelog" label.

Snapshot stored with reference name:
refs/pull/13720/merge
Test environment:
https://babylonsnapshots.z22.web.core.windows.net/refs/pull/13720/merge/index.html
To test a playground add it to the URL, for example:
https://babylonsnapshots.z22.web.core.windows.net/refs/pull/13720/merge/index.html#WGZLGJ#4600
Links to test babylon tools with this snapshot:
https://playground.babylonjs.com/?snapshot=refs/pull/13720/merge
https://sandbox.babylonjs.com/?snapshot=refs/pull/13720/merge
https://gui.babylonjs.com/?snapshot=refs/pull/13720/merge
https://nme.babylonjs.com/?snapshot=refs/pull/13720/merge
To test the snapshot in the playground with a playground ID add it after the snapshot query string:
https://playground.babylonjs.com/?snapshot=refs/pull/13720/merge#BCU1XR#0


npm linking error

My setup:
Mac OS 10.7.2
node 0.6.4 (view homebrew)
node-waf 1.5.16
npm 1.0.106

When trying to install hiredis via npm, it fails during linking:
setting srcdir to                        : /Users/jerod/src/node/hntrends/node_modules/hiredis
Setting blddir to                        : /Users/jerod/src/node/hntrends/node_modules/hiredis/build
Checking for program gcc or cc           : /usr/bin/gcc
Checking for program cpp                 : /usr/bin/cpp
Checking for program ar                  : /usr/bin/ar
Checking for program ranlib              : /usr/bin/ranlib
Checking for gcc                         : ok
Checking for program g++ or c++          : /usr/bin/g++
Checking for g++                         : ok
Checking for node path                   : ok /usr/local/lib/node_modules
Checking for node prefix                 : ok /usr/local/Cellar/node/0.6.4
'configure' finished successfully (0.061s)
Waf: Entering directory `/Users/jerod/src/node/hntrends/node_modules/hiredis/build'
[1/7] cc: deps/hiredis/sds.c -> build/Release/deps/hiredis/sds_1.o
[2/7] cc: deps/hiredis/net.c -> build/Release/deps/hiredis/net_1.o
[3/7] cc: deps/hiredis/hiredis.c -> build/Release/deps/hiredis/hiredis_1.o
[4/7] static_link: build/Release/deps/hiredis/sds_1.o build/Release/deps/hiredis/net_1.o build/Release/deps/hiredis/hiredis_1.o -> build/Release/libhiredis.a
[5/7] cxx: hiredis.cc -> build/Release/hiredis_2.o
[6/7] cxx: reader.cc -> build/Release/reader_2.o
[7/7] cxx_link: build/Release/hiredis_2.o build/Release/reader_2.o -> build/Release/hiredis.node
ld: warning: directory not found for option '-Ldefault'
ld: library not found for -lhiredis
collect2: ld returned 1 exit status
Waf: Leaving directory `/Users/jerod/src/node/hntrends/node_modules/hiredis/build'
Build failed:  -> task failed (err #1):
        {task: cxx_link hiredis_2.o,reader_2.o -> hiredis.node}
npm ERR! error installing<EMAIL_ADDRESS>Error<EMAIL_ADDRESS>preinstall: `node-waf configure build`
npm ERR! error installing<EMAIL_ADDRESS>`sh "-c" "node-waf configure build"` failed with 1
npm ERR! error installing<EMAIL_ADDRESS>   at ChildProcess.<anonymous> (/usr/local/lib/node_modules/npm/lib/utils/exec.js:49:20)
npm ERR! error installing<EMAIL_ADDRESS>   at ChildProcess.emit (events.js:70:17)
npm ERR! error installing<EMAIL_ADDRESS>   at maybeExit (child_process.js:359:16)
npm ERR! error installing<EMAIL_ADDRESS>   at Process.onexit (child_process.js:395:5)
npm ERR<EMAIL_ADDRESS>preinstall: `node-waf configure build`
npm ERR! `sh "-c" "node-waf configure build"` failed with 1
npm ERR!
npm ERR! Failed at the<EMAIL_ADDRESS>preinstall script.
npm ERR! This is most likely a problem with the hiredis package,
npm ERR! not with npm itself.

Any help would be much appreciated.

I tried installing using the same environment and this worked as it should. Problems with the linker have often pointed to a different version of libtool being the culprit. Can you check you have the same version as I have?
$ libtool -V
Apple Computer, Inc. version cctools-809
$ which libtool
/usr/bin/libtool

Thanks so much for looking into this. Results from my machine below:
$ libtool -V
Apple Computer, Inc. version cctools-806
$ which libtool
/usr/bin/libtool

Looks like we have slightly different versions. Is there anything we can do to determine definitively that libtool is causing the problem?

Did you by any chance upgrade from Snow Leopard and skipped upgrading Xcode? FWIW, I have latest Xcode with all updates installed... If we can rule out libtool being the culprit we can start looking in other directions.

in short: NOTHING TO SEE HERE
in detail: I thought I was running the latest Xcode, but it turns out I had only downloaded the latest installer from the App Store and hadn't actually run it.
After doing so (I'm now on Xcode 4.2.1), I'm now running the same libtool version as you. But alas, the build still fails with the exact same ld warning.
That's when I realized that it was trying to install an older version of hiredis than was currently released. That's when I realized that my (now outdated) package.json was pointing to that old version and takes precedence with npm install.
I updated it and everything is back to good.
Thanks for taking the time, and sorry for wasting it. :/

No worries, glad the issue is resolved.


Add BI stats

So we can find out about the number of installations.

@paulbellamy Can you be a bit more specific?
E.g. 1: Add a bit of code that pushes a ping to some external service, so we can track active usages
E.g. 2: Add some monitoring to the fluxd service in weave cloud so that it sends a counter to prometheus every time someone uses fluxctl with weave cloud
E.g. 3: Some sort of web analytics to monitor the number of views/downloads of the binary

@tomwilkie could probably point you at a good example of some other service which does this. My assumption is something like this: https://github.com/weaveworks/service/blob/master/metrics/main.go

So that code posts a list orgs, users and memberships to https://bi.weave.works/import/service/.
Those entities are the same for flux too, so we wouldn't gain anything by adding another service that does the same thing.
But we could add some stuff more specific to flux. However, I'm not sure what that bi url is, or what you can send to it.

Ping @tomwilkie for docs on BI.
On Wed, Jan 11, 2017 at 8:58 AM Phil Winder<EMAIL_ADDRESS>wrote:

So that code posts a list orgs, users and memberships to
https://bi.weave.works/import/service/.
Those entities are the same for flux too, so we wouldn't gain anything by
adding another service that does the same thing.
But we could add some stuff more specific to flux. However, I'm not sure
what that bi url is, or what you can send to it.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/weaveworks/flux/issues/271#issuecomment-271813708,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAPRV5sp7GF4X1Rh8aw7KMi2x1oE-Yp-ks5rRJm6gaJpZM4LEH9F
.

There are no docs I'm afraid.
If you let me know what questions you want to answer, I can help you do that.

"BI has query for number of active flux instances"
@paulbellamy Who requested this? Is this good enough?

If the authfe hooks on bi let us do that, then that is good enough.

E.g. query: https://bi.weave.works/#5769015641243648
E.g. dashboarding.
(Both from Tom)


Add networking req/resp request rate limiting rule

The networking spec is still missing any request rate limit rules. That leads to the situation when different clients make their own assumptions on 'reasonable' rate limits and could disconnect and downscore other clients with different assumptions.
This PR introduces rate limiting similar to RLPx, where requester must not send another request until previous one is responded. However it would be good to relax this rule and allow sending maximum 2 concurrent requests to compensate network roundtrip latency.
UPD: changed the maximum from 2 to 32 to give a space for fast nodes to serve many requests in parallel
UPD: RLPx actually supports parallel requests (though without req/resp ids), then not sure how rate limiting actually works there
Below there is a bit more background from Discord channel conversation:

[17:35] Nashatyrev: On merge event we hit the issue when Teku was regularly disconnecting Lodestar due to exceeding block request rate limit.
In chat with @dapplion we found out that there are no any limits settled in the spec and each client limits inbound/outbound requests (or does not limit at all) according to its internal options.
From my perspective it makes sense adding ReqResp rate limiting rules to the networking spec.
[17:41] Nashatyrev: However instead of hardcoding rate limits I would suggest to add a ReqResp error code RateLimitExceeded which would allow more flexible traffic limiting. I.e. a serving node could dynamically limit the traffic according to it's current load while a requesting node may dynamically adopt its request rate without a risk of being disconnected and downscored
[17:44] Nashatyrev: That approach could also be helpful for small networks when a number of peers low, but they could serve requests at higher rates. E.g. due to Teku conservative rate limits a test net with just 2 nodes syncs very slowly
[17:56] Nashatyrev: There are possible options of how RateLimitExceeded could work:

either per ReqResp message type or globally across all types. I would prefer the first option here since e.g. ping/metadata messages are expected to be less frequent than e.g. block requests
error message may contain a cool down time period after which messages could be sent again (I've seen a couple of stock exchange trading protocols which utilize this option)
If RateLimitExceeded errors are ignored by the requesting side (e.g. > N errors were sent during some time frame) then the peer could be disconnected and downscored

[18:05] Nashatyrev: A different possible option for rate limiting is the maximum number of concurrent requests.
E.g. if this number is 1  then requester must not send a new request until receives response to the previous one (I believe this is how RLPx works)
[10:13] arnetheduck: the simple solution here is that the server withholds the response until the client is within the quota - this avoids the need for complex error handling, decreases chatter, avoids roundtrip timing issues and is trivial to implement - the rate limiting happens "naturally" at the pace that the server is willing to serve and the client can judge how good a server is by the only metric that mattters: how many valid blocks is this server giving me, per second
[13:02] Nashatyrev: Right, this looks like the latter option I suggested (with parallelism of max 1). And it looks more simple and natural to me as well.
However that may work weird for ping/metadata requests. I.e. if a node assumes max rate for ping as 1 request per 10 seconds, what should it do when receiving an extra ping request? From the other side should we rate limit ping/metadata requests at all?
[13:58] arnetheduck: well, one thing to keep in mind is that ping requests are pretty useless from a utility point of view - they basically announce that you have nothing important to say - re parallelism, there's a case to allow multiple parallel requests up to some limit, but again, this "naturally" solves itself if you limit processing to one at a time per node - this allows clients to pipeline requests and avoid roundtrip latency, but by serving them one by one according to a budget, if they send too many, some will simply time out - and if you have too many requests timing out, you eventually disconnect (regardless if they're pings or block requests)
[14:00] arnetheduck: from a performance point of view, you might make 1-2 block requests in parallel - one in-flight and one queued - beyond that, you don't have much to gain as a client - if you're doing more, you're likely buggy or spammy
[14:01] arnetheduck: the beauty of this solution is that you don't need to add anything to the spec, and you don't have to worry about compatibility over time with different versions of clients
[14:10] Nashatyrev: Totally agree except I believe it should still be added to the spec for all clients to be in line with this rate limiting scheme.
Currently spec doesn't prevent you from sending as many parallel requests as you like.
I'm also tending to limit max parallel requests (to 2) on per message type basis.

CCing @dapplion @arnetheduck

There's a duality here that we should probably nuance a bit: when you're a client, you should make no more than N concurrent requests whereas as a server, you should be expected to be able to handle / queue at least N requests concurrently.
N == 2 seems as good as any limit.

Right. ... as any limit >= 2

well, not quite: client <= 2 and server >= 2 - else the server can't punish offending clients.. servers are free to support as many requests as they want as long as they support at least two (so that clients can parallelize)

2 seems low and might be problematic when trying to sync with in smaller networks. We use a cost based rate-limiter which chooses to rate limit via amount of data requested ( as compared to number of concurrent requests). If a server can serve > 2 concurrent requests, shouldn't we allow it to ? This is useful when trying to fetch a large range of blocks and we have a very small amount of peers to request from. Enforcing limits from the requester's side rather than server seems excessive here.

That could be easier from the implementation point of view.

I suspect this would depend on the implementation - in libp2p, each request type is essentially a separate protocol so it's usually easier to deal with things on a per-request-type basis.
I view this PR mainly as imposing a never-to-normally-be-reached limit / sanity check, so that servers can make some assumptions about honest clients so as to filter out the easiest / worst offenders.
Indeed, having fixed rate limits will likely backfire - the server has all it needs to make this decision on its own based on local conditions.

Closing this PR in favor of #3767