MPI Matrix

This is I think the conda-smithy 3 way to do MPI variants. I'm not totally sure this is right, though....

[x] Used a fork of the feedstock to propose changes
[x] Bumped the build number (if the version is unchanged)
[x] Re-rendered with the latest conda-smithy
[x] Ensured the license file is being packaged.

Hi! This is the friendly automated conda-forge-linting service.
I just wanted to let you know that I linted all conda-recipes in your PR (recipe) and found it was in an excellent condition.

@conda-forge/core, is it okay if the build string has a space in it? Is this the right way to do MPI variants now?
cc @conda-forge/mpi @conda-forge/mpi4py

Apparently it is not okay for the build string to have a space in it.
Will try another thing later, but this could maybe be considered a conda-smithy bug.

Ah, that's interesting.  There needs to be a 2-step templating thing here.  Think something like this:
mpi:
  - openmpi
  - mpich
openmpi:
  - 3.0
mpich:
  - 3.2

and in meta.yaml, you might need to be explicit about which variable you want:
  - {{ mpi }} {{ openmpi if mpi == 'openmpi' else mpich}}

or maybe:
  - {{ mpi }} {{ openmpi }}   # [mpi == 'openmpi']
  - {{ mpi }} {{ mpich }}   # [mpi == 'mpich']

Both of these are pretty hideous.  With only mpi to complain about here, I'm inclined to recommend adding a new jinja2 function that will roll this stuff up into a single function call, like:
  - {{ mpi() }}

and that function could take care of looping over all mpi implementations, as well as any multiple versions desired within each implementation.  The rules would be something like:

entries under the mpi key are package names only
keys matching entries are interpreted as lists of version pins for those entries.
any entry without a missing key is assumed to not have a version pin.

PS: I may also be completely off base, and we just need a hack here.  However, keep in mind that the output filename must be valid, and characters like >, <, * and such may cause unexpected side effects.  We may need a sanitize step for the filename generation.

I tried doing something like the second one and got a crash, but didn’t have time to debug further. Will look into it.
If we pin openmpi and mpich, with appropriate pin_run_as_build or run_exports, it’d be relatively easy. Should probably just do that right?

not quite.  It would work to set bounds for the run env, but you still need something like you have expressed right now in order to set the version that should be present in the build env.

What I meant was something like how we handle numpy:
In conda-forge-pinning:
mpich:
  - 3.2
openmpi:
  - 3.0
pin_run_as_build:  # or not if there's run_exports
  mipich:
    max_pin: x.x
  openmpi:
    max_pin: x.x

conda_build_config.yaml:
mpi:
  - openmpi
  - mpich

meta.yaml:
requirements:
  host:
    - {{ mpi }}
  run:
    - {{ pin_compatible(mpi) }}  # or nothing if there's run_exports

Would that not work for some reason?

It might work.  The only reason it might not is that I'm not completely certain that conda-build will do the name matching for package names that are dynamically defined as template variables.
pin_compatible and pin_run_as_build do the same thing in different ways, so you should choose one.  pin_compatible affects only one recipe, pin_run_as_build affects all recipes that you use that config with.
with pin_run_as_build:
host:
  - {{ mpi }}
run:
  - {{ mpi }}

might work.  The key things to keep in mind are "what is the state of the recipe at the time that I expect this operation to happen?" and "What state is conda-build using to build on/substitute into?"
Many/most, maybe even all times the answer to the latter is "the raw template" and what is changing is the collection of variables provided to that template.

Just using - {{ mpi }} doesn't seem to pull in a version constraint.
Something like - {{ mpi }} {{ locals()[mpi] }} could work, except that we don't have locals() available in the jinja env. I poked a bit through conda-build source and didn't see anything that would work as an equivalent, either.
It seems like the best option for now is something like:
    - openmpi {{ openmpi }}  # [mpi == "openmpi"]
    - mpich   {{ mpich }}    # [mpi == "mpich"]

You could change the first bit to {{ mpi }} if you wanted, but that doesn't seem to really do anything.

(Not a terrible idea, makes the recipe a little nicer at least. But probably need {{ mpi }} {{ mpi_impl_version }} in run too, right? Or else add pin_run_as_build or run_exports; mpich / openmpi have neither currently.)
Is there a fundamental reason why we expect the MPI tests to fail on the CI? mpich gives
Fatal error in PMPI_Comm_rank: Invalid communicator, error stack:
PMPI_Comm_rank(110): MPI_Comm_rank(comm=0x0, rank=0x626a459c) failed
PMPI_Comm_rank(68).: Invalid communicator```
and `openmpi` gives
```+ mpiexec -n 1 lmp_mpi -help
--------------------------------------------------------------------------
The value of the MCA parameter "plm_rsh_agent" was set to a path
that could not be found:

  plm_rsh_agent: ssh : rsh

Please either unset the parameter, or check that the path is correct
--------------------------------------------------------------------------
[5897057d4f9b:08416] [[INVALID],INVALID] FORCE-TERMINATE AT Not found:-13 - error plm_rsh_component.c(327)
[5897057d4f9b:08416] *** Process received signal ***
[5897057d4f9b:08416] Signal: Segmentation fault (11)
[5897057d4f9b:08416] Signal code: Address not mapped (1)
[5897057d4f9b:08416] Failing at address: (nil)
[5897057d4f9b:08416] [ 0] /lib64/libpthread.so.0(+0xf7e0)[0x7fdcbcbcf7e0]
[5897057d4f9b:08416] *** End of error message ***
/home/conda/feedstock_root/build_artifacts/lammps_1527099672155/test_tmp/run_test.sh: line 8:  8416 Segmentation fault      (core dumped) mpiexec -n 1 lmp_mpi -help > help_mpi.txt```
That command works for me locally with the current build, without having done any special configuration, though.

I thought part of the idea of things like pin_run_as_build is that we don't need to specify the build version dependency, only pin_run_as_build?
# conda_build_config.yaml
mpi:
  - mpich
  - openmpi

pin_run_as_build:
  mpich: x.x
  openmpi: x.x

# meta.yaml
requirements:
  host:
    - {{ mpi }}
  run:
    - {{ mpi }}

Then if conda-forge-pinning specifies that mpich should be pinned to 3.1.x that would be applied in the build environment, and then pin_run_as_build would do the right thing, right?

BTW, I've started adding run_exports to mpich and openmpi, so the pin_run_as_build should stop being necessary shortly:

https://github.com/conda-forge/mpich-feedstock/pull/20
https://github.com/conda-forge/openmpi-feedstock/pull/21

At which point, I think the right thing to do is what @dougalsutherland pointed to above:
# conda-forge-pinning
mpich:
  - 3.2
openmpi:
  - 3.1

# conda_build_config.yaml:
mpi:
  - openmpi
  - mpich

# meta.yaml:
requirements:
  host:
    - {{ mpi }}

As for the failures with openmpi, I believe you need to set some environment variables for it to run on the CI setups:
export OMPI_MCA_plm=isolated
export OMPI_MCA_btl_vader_single_copy_mechanism=none
export OMPI_MCA_rmaps_base_oversubscribe=yes

ref. I haven't seen the mpich issue before.

@dougalsutherland The error you get with MPICH is very unlikely a problem with MPICH itself. My bet is that somehow the binary was built or linked (either at compile time or dynamically at runtime) with the Open MPI header or library, that's the reason you see comm=0x0 in the error message. In MPICH, it is almost impossible that a correct program will endup with comm=0x0, even MPI_COMM_NULL is defined as 0x04000000. Either the program EXPLICITY assigns comm=0x0 (would be very bad API usage, unless the coder REALLY know what she is doing), or that value comes from a different header. Or maybe you are running Fortran? In that case, what I said does not apply, comm handles are integers, very easy to get a bad assignment to zero.

This is now implemented in
https://github.com/conda-forge/lammps-feedstock/pull/4


ENH: Adding helper methods for calculating leaf count, height, and depth

Please complete the following checklist:

[x] I have read the guidelines in CONTRIBUTING.md.

[x] I have documented all public-facing changes in CHANGELOG.md.

[x] This pull request includes code, documentation, or other content derived from external source(s). If this is the case, ensure the external source's license is compatible with scikit-bio's license. Include the license in the licenses directory and add a comment in the code giving proper attribution. Ensure any other requirements set forth by the license and/or author are satisfied. It is your responsibility to disclose code, documentation, or other content derived from external source(s). If you have questions about whether something can be included in the project or how to give proper attribution, include those questions in your pull request and a reviewer will assist you.

[ ] This pull request does not include code, documentation, or other content derived from external source(s).

Note: REVIEWING.md may also be helpful to see some of the things code reviewers will be verifying when reviewing your pull request.

Note that the original code is from pycogent - but I have had permission from the authors to use it.
This is just providing the helper methods for calculating leafcount, height and depth which are useful for creating tree layouts for visualization.

Thanks, @mortonjt. Per our email thread, PyCogent should be fine.
cc @gregcaporaso because of the check on "external sources" but I am not aware of any issues which require your attention given out-of-band conversation.

Cool.
Not sure what's going on sphinx ... any ideas?

cc @gregcaporaso because of the check on "external sources" but I am not aware of any issues which require your attention given out-of-band conversation.

Can you check that the authors of this ported PyCogent code are included in this list? They probably are already but good to verify.
Adding a short note in the changelog message giving attribution to PyCogent would also be nice.
Neither of these things are critical since permission has already been obtained.

Yup.  The authors of the pycogent code are @gavin-huttley, Peter Maxwell @gregcaporaso @jairideout and @wasade .  And these authors are on the original list.

@mortonjt, the Sphinx failure is noted in #1511

The depth, leafcount and height are now property attributes.

I'm going to close this, since I don't know if I'll revisit this.  Anyone who wants this functionality is welcome to fork and create a PR.

Then, what about leaving open so people know that this is a feature request?


Imprint + Data privacy

[ ] add imprint on page
[ ] add general data privacy notive

Legal Notice:
https://docs.google.com/document/d/1hK-g71yQOLDvo-W2mNnjC0BF7wRSjcNITd_p5kNDbYI/edit

Privacy:
https://docs.google.com/document/d/1QK2W8SOIHfcU0MKffcpJ81XKeInz55ymLjzyTRgSDys/edit

Task: Fill out data privacy form for consulting.

@marty-2015 I have created an issue in the website technical project with regards to creating a link for users to change cookie settings. Once this is done, we can add it to the document.


Supporting other virtual doms.

Currently it's pretty easy to use something like https://github.com/dekujs/deku using coffee-react since you can do:
# @cjsx deku
Car = React.createClass
  render: ->
    <Vehicle<EMAIL_ADDRESS>      <Parts.FrontSeat />
      <Parts.BackSeat />

Which seat can I take<EMAIL_ADDRESS>or 'none'}

    </Vehicle>

Which becomes:
`/** @jsx deku */`
Car = React.createClass
  render: ->
    deku.createElement(Vehicle, React.__spread({},  @props.parts),
      deku.createElement(Parts.FrontSeat, null),
      deku.createElement(Parts.BackSeat, null),
      deku.createElement("p", null, "Which seat can I take? ", (@props.seat or 'none'))
    )

However you will notice "React.__spread" which is obviously not compatible.
Is it possible to have @jsx also modify React.__spread?

Looks like this is a regression, previously if you provided something like # @cjsx  deku.dom it would just work.

Is it possible to fix or is it an issue with the jsx transform?

It's a pretty simple fix, the correct value just needs to be output here: https://github.com/jsdf/coffee-react-transform/blob/master/src/serialiser.coffee#L105


Data provider methods should type of setup method

Is your feature request related to a problem? Please describe.
At the moment data provider methods have no corresponding method context. Only in case of assertion or exceptions a method context is created (see fix #214).
But a data provider method is a kind of setup method and should get its own method context.
Describe the solution you'd like
The TesterraListener already implements IDataProviderListener. Its needed to implement some more methods like beforeDataProviderExecution and afterDataProviderExecution.
The method context should have the type Setup.

First analyses and current unsolved problem:
Overwriting the following TestNG methods in TesterraListener:
@Override
public void beforeDataProviderExecution(IDataProviderMethod dataProviderMethod, ITestNGMethod testNGMethod, ITestContext testContext) {
   ...
}

@Override
public void afterDataProviderExecution(IDataProviderMethod dataProviderMethod, ITestNGMethod testNGMethod, ITestContext testContext) {
   ...
}

For creating new MethodContext we need to call pBeforeInvocation(IInvokedMethod invokedMethod, ITestResult testResult,            ITestContext testContext) within the TesterraListener. testNGMethod contains the called test method. The complete MethodContext logic based on ITestNGMethod.
Well, the object testNGMethod contains enough information about the data provider but from my point there is no chance to get to know if testNGMethod is created from a data provider listener method or from 'real call' of the test method (see beforeInvocation of TesterraListener).
The information that the current method context contains the data provider must forwarded to ClassContext.getMethodContext() (l. 130).

Some additional hints:

extend status tests (count of method contexts, ...)
extend ReportNG tests (method details)


Tweag I/O summer internship

This is a 2 or 3 month summer internship from Tweag I/O for students with the opportunity to do it remotely (apart from doing onsite in Paris) with a payment scale similar to that of GSoC.

@je117er it's no longer accepting entries.

i think this issue should be closed


Cannot install adminjs 6.1.1

Describe the bug
I tried to install the latest adminjs to an existing nestjs project using and on an empty express project
On both instances when I do npm install -E  adminjs, it doesn't finish and show a lot of logs saying that reactjs missmatch
If I instead install<EMAIL_ADDRESS>or<EMAIL_ADDRESS>then the Installation works as expected
Installed libraries and their versions

<EMAIL_ADDRESS>nodejs 16.16.0

To Reproduce
Steps to reproduce the behavior:

npm init -y
npm install -E adminjs

Expected behavior
It is expected that adminjs can be installed
Screenshots
If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information if relevant):

OS: Tested on Windows 10 and MacOS 12

We've recently updated to React 18 while a lot of libraries still use React 16 or 17 as their peer dependencies. We replaced the outdated ones with alternatives where possible but for others we have to wait for them to be updated.
react-currency-input-field works correctly with React 18 despite peer dependency error so you can ignore it. You'd either have to force install packages if using npm:
$ npm install --force

or simply switch to yarn:
$ yarn install

i have same issue ..with node v16

I am having the same issue.  Any eta on resolution?

Three errors come from other libraries that haven't been updated to React 18. AdminJS wilk work fine id you use yarn or force install using npm as stated above.


CSS for Home>Facts. Mobile and Desktop

Added CSS for Home>Facts Section.
facts.css
Mobile first design:

flexbox created on section conatining heading and facts_container elements, set to column.
flexbox created on facts_container element containing facts1 and facts2 elements (containing quick_facts 1-3 and 4-6, respectively), set to column.
quick_facts 4-6 set to hide using .hide1 class
buttonflat design features.  Currently no hover or visited designs.  I'll add to the backlog.

Desktop design:

media query for screens over 1000px
changed display on hide1 and hide2.
facts1 and facts2 set to flex row display for quick_fact elements, with space-between justification.
set max width for the quick_facts elements so they don't take up the whole screen width.

General element padding set to 1rem.
home.css

set up basic flex box for the page

index.html

added divs facts1 and facts2 to split the quick_facts elements to help create two rows for the desktop view.

Yeah, looks good. I think the monochrome over the original's colourful icons work quite well.
I did think of a couple of things but I think we can just put them on the backlog:

I think we should put cursor: pointer on all buttons in the global.css. That could be put with the hover state CSS on Trello.
I initially thought that it should change to the mobile version at a smaller viewport. However, I think what we actually want is a 2 column version for that in-between state.

Thanks guys.
Nico - will add your comments to the Trello backlog.  Are you happy for me to merge these changes?


Why does this test case fail?

🐛 Bug Report
When I run this test case, it fails. But in the browser environment, it is successful

To Reproduce
class Person {
  name: string | undefined
  constructor() {
    this.change()
  }

  change() {
    this.name = 'person'
  }
}

class B extends Person {
  age: number | undefined
  change() {
    this.name = 'b'
    this.age = 12
  }
}

describe('test', () => {
  it('test', () => {
    const b = new B()

    expect(b.age).toBe(12) // expected 12, received undefined
  })
})

envinfo
System:
    OS: macOS Catalina v10.15.4
    Node version: v14.17.0

Npm packages:
    jest: v27.0.6
    ts-jest: v27.0.4
    typescript: v4.3.5

Hi,
What you said about it works in browser is not entirely correct. Here is what Chrome Dev tools said

b.age gives you undefined because you only set value for age via calling change method of class B. When you put new B(), you only invoke class B constructor.
This is not a bug for ts-jest, it is just how javascript works :)
Besides, if you want more discussion, pls create a thread in https://github.com/kulshekhar/ts-jest/discussions
GitHub issues only for reporting issues.

Sorry, but why is TypeScript👇 different from JS? @ahnpnl

It is not about the difference between TypeScript and JavaScript.
The error you saw came from Jest runtime. Jest tried to execute the codes and the codes failed. Jest runs the compiled JS which is produced from TypeScript.

@ahnpnl
Sorry, maybe I can't describe it clearly.
The code above is compiled by TypeScript is:
class Person {
    constructor() {
        this.change();
    }
    change() {
        this.name = 'person';
    }
}
class B extends Person {
    change() {
        this.name = 'b';
        this.age = 12;
    }
}
const b = new B();
console.log(b.age);

the result is 12.It is difference from the code that you give:
class Person {
    name
    constructor() {
        this.change();
    }
    change() {
        this.name = 'person';
    }
}
class B extends Person {
    age
    change() {
        this.name = 'b';
        this.age = 12;
    }
}
const b = new B();
console.log(b.age);

The result is undefined

I already know why the execution result is this. But why did Jest choose the second when i run Jest test .Is it possible that my tsconfig.json or jest.config.js configuration is wrong

@ahnpnl
Sorry, maybe I can't describe it clearly.
The code above is compiled by TypeScript is:
class Person {
    constructor() {
        this.change();
    }
    change() {
        this.name = 'person';
    }
}
class B extends Person {
    change() {
        this.name = 'b';
        this.age = 12;
    }
}
const b = new B();
console.log(b.age);

the result is 12.It is difference from the code that you give:

This piece of codes is not the same as the one below, which gives a different result.

class Person {
    name
    constructor() {
        this.change();
    }
    change() {
        this.name = 'person';
    }
}
class B extends Person {
    age
    change() {
        this.name = 'b';
        this.age = 12;
    }
}
const b = new B();
console.log(b.age);

The result is undefined

the result is 12.It is difference from the code that you give:
class Person {
    name
    constructor() {
        this.change();
    }
    change() {
        this.name = 'person';
    }
}
class B extends Person {
    age
    change() {
        this.name = 'b';
        this.age = 12;
    }
}
const b = new B();
console.log(b.age);

The result is undefined

This code is your original codes which I copied to Chrome Dev Tool and strip out types. Basically, TypeScript is just JavaScript which you strip out types part.

I already know why the execution result is this. But why did Jest choose the second when i run Jest test .Is it possible that my tsconfig.json or jest.config.js configuration is wrong

There is nothing wrong with your tsconfig.json or jest.config.js. The 2 above piece of codes have some slight differences. I'd suggest you to read line by line.

@ahnpnl
What I want to say is that for my initial TS code, the TypeScript compile result is the first case.Please click this to have a look.The result of Jest running is different from this.

Different compilation target can result in different outputs. For example, ES6 class only fully works if using target: ES2015. Module can also impact the compilation result. Jest normally uses CommonJS while browser uses ESM.

@ahnpnl Oh, I see, thank you


Implement Gas Estimate node call

This is a quick mod that will help new users. Rather than the traditional gas limit, network fee (if full gas limit used) have estimated gas and estimated network fee.
On web3j this code:
    private Single<EthEstimateGas> ethEstimateGas(String fromAddress, BigInteger nonce, BigInteger gasPrice,
                                               BigInteger gasLimit, String toAddress,
                                               BigInteger amount, String txData, Web3j web3j)
    {
        return Single.fromCallable(() -> {
            Transaction transaction = new Transaction (
                    fromAddress,
                    nonce,
                    gasPrice,
                    gasLimit,
                    toAddress,
                    amount,
                    txData);

            return web3j.ethEstimateGas(transaction).send();
        }).subscribeOn(Schedulers.io());
    }

Will return a BigDecimal wei amount which is the gas estimate from the node, or an error with a string detailing that the node thinks the transaction will fail (because eg the function has an assert that the account must be the contract owner).
The node's EVM does a local execution of the transaction and works out how much gas it would use.
Here's what the confirmation page looks like with this modification:

You can see for the kitty transfer the estimate is much lower than the gas limit.
We're starting to get more popular and recently I noticed people being confused about the transaction fee on the AlphaWallet group. You can view the limit as the TX fee and call the difference a 'refund', as some people have. But far easier to understand is the estimate.
Note how it doesn't affect the flow in any way - it's purely informational.

Note that the ethEstimateGas is a node RPC call:
// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_estimateGas","params":[{see above}],"id":1}'

// Result
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0x5208" // 21000
}

Already do this.


Microsoft.Web sites/config 'connectionstrings' could be clearer about the format of properties

The Microsoft.Web sites/config 'connectionstrings'  documentation (located currently at https://learn.microsoft.com/en-us/azure/templates/microsoft.web/sites/config-connectionstrings?pivots=deployment-language-arm-template) could be clearer about the format in which it expects connection strings to be given to it.
The current documentation looks like this:
{
  "type": "Microsoft.Web/sites/config",
  "apiVersion": "2022-03-01",
  "name": "connectionstrings",
  "kind": "string",
  "properties": {}
}

The area I want to focus is the properties property.
The documentation currently states:

properties
Connection strings.
object

This isn't super helpful. Thankfully one of the Quick Start Templates (this one in particular https://github.com/Azure/azure-quickstart-templates/blob/master/quickstarts/microsoft.web/web-app-sql-database/azuredeploy.json) shows that this needs to be given in the following format:
"properties": {
  "ConnectionStringName": {
     "value": "ConnectionStringHere",
     "type": "ConnectionType"
  }
}

Testing has shown that you can insert multiple connection strings in here (as expected).
It would be helpful to have this clearly called out as it was not immediately apparent.
The following toy resource definition worked for me:
{
            "type": "Microsoft.Web/sites/config",
            "apiVersion": "2022-03-01",
            "name": "[concat(variables('webSiteName'), '/connectionstrings')]",
            "dependsOn": [
                "[resourceId('Microsoft.Sql/managedInstances', variables('sqlManagedInstanceName'))]",
                "[resourceId('Microsoft.Web/sites', variables('webSiteName'))]"
            ],
            "properties": {
                "AdventureWorksConnectionString": {
                    "value": "ConnectionString1",
                    "type": "SQLServer"
                },
                "AdventureWorks2ConnectionString": {
                    "value": "ConnectionString2",
                    "type": "SQLServer"
                }
            }
        }

@aolszowka
It would be great if you could add a link to the documentation you are following for these steps? This would help us redirect the issue to the appropriate team. Thanks!!

@RamanathanChinnappan-MSFT https://learn.microsoft.com/en-us/azure/templates/microsoft.web/sites/config-connectionstrings?pivots=deployment-language-arm-template


Using Android Example with Snapshots is missing method iterations and learningrate

Issue Description
Please describe our issue, along with:
Current Behavior:
I am attempting to incorparate the provided android example but with the latest snapshots. Reason being is that I require the nd4j android arm64 and x86_64 dependencies.
Unfortunately, using the snapshots results in the two methods    nncBuilder.iterations(); and nncBuilder.learningRate(0.1); not to be resolved anymore.
Expected Behavior:
Version Information
Please indicate relevant versions, including, if relevant:

dl4j: 1.0.0-alpha
nd4j: 1.0.0-alpha
Ubuntu 17.10
Cuda not used but version is 9.0 with cuDNN 7.0.5
NVIDIA driver not used but version is 384

Contributing
If you'd like to help us fix the issue by contributing some code, but would
like guidance or help in doing so, please mention it! Unfortunately this would have to wait until I have finished writing my thesis.
Here is the link to my repo so you can clone it and verify the bug and, perhaps, point me in the right direction.
Here is my Gradle file:
// This file provides basic support for building the TensorFlow demo
// in Android Studio with Gradle.
//
// Note that Bazel is still used by default to implementation the native libs,
// and should be installed at the location noted below. This build file
// automates the process of calling out to it and copying the compiled
// libraries back into the appropriate directory.
//
// Alternatively, experimental support for Makefile builds is provided by
// setting nativeBuildSystem below to 'makefile'. This will allow building the demo
// on Windows machines, but note that full equivalence with the Bazel
// build is not yet guaranteed. See comments below for caveats and tips
// for speeding up the build, such as enabling ccache.
// NOTE: Running a make build will cause subsequent Bazel builds to *fail*
// unless the contrib/makefile/downloads/ and gen/ dirs are deleted afterwards.

// The cmake build only creates libtensorflow_demo.so. In this situation,
// libtensorflow_inference.so will be acquired via the tensorflow.aar dependency.

// It is necessary to customize Gradle's build directory, as otherwise
// it will conflict with the BUILD file used by Bazel on case-insensitive OSs.
project.buildDir = 'gradleBuild'
getProject().setBuildDir('gradleBuild')

buildscript {
    repositories {
        maven { url 'https://oss.sonatype.org/content/repositories/snapshots/org' }
        jcenter()
        google()
        maven { url 'https://google.bintray.com/tensorflow' }
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.1'
        classpath 'org.apache.httpcomponents:httpclient:4.5.4'

    }
}

allprojects {
    repositories {
        maven { url ' https://oss.sonatype.org/content/repositories/snapshots/org' }
        jcenter()
        google()
        maven { url 'https://google.bintray.com/tensorflow' }
    }

}

// set to 'bazel', 'cmake', 'makefile', 'none'
//def nativeBuildSystem = 'bazel'
def nativeBuildSystem = 'cmake'
// Controls output directory in APK and CPU type for Bazel builds.
// NOTE: Does not affect the Makefile build target API (yet), which currently
// assumes armeabi-v7a. If building with make, changing this will require
// editing the Makefile as well.
// The CMake build has only been tested with armeabi-v7a; others may not work.
def cpuType = 'arm64-v8a'
//def cpuType = 'armeabi-v7a'
// Output directory in the local directory for packaging into the APK.
def nativeOutDir = 'libs/' + cpuType

// Default to building with Bazel and override with make if requested.
def nativeBuildRule = 'buildNativeBazel'
def demoLibPath = '../../../bazel-bin/tensorflow/examples/android/libtensorflow_demo.so'
def inferenceLibPath = '../../../bazel-bin/tensorflow/contrib/android/libtensorflow_inference.so'

// Override for Makefile builds.
if (nativeBuildSystem == 'makefile') {
    nativeBuildRule = 'buildNativeMake'
    demoLibPath = '../../../tensorflow/contrib/makefile/gen/lib/android_' + cpuType + '/libtensorflow_demo.so'
    inferenceLibPath = '../../../tensorflow/contrib/makefile/gen/lib/android_' + cpuType + '/libtensorflow_inference.so'
}

// If building with Bazel, this is the location of the bazel binary.
// NOTE: Bazel does not yet support building for Android on Windows,
// so in this case the Makefile build must be used as described above.
def bazelLocation = '/home/polaroidkidd/bin/bazel'

// import DownloadModels task
project.ext.ASSET_DIR = projectDir.toString() + '/assets'
project.ext.TMP_DIR = project.buildDir.toString() + '/downloads'

apply plugin: 'com.android.application'

android {
    compileSdkVersion 27
    buildToolsVersion '27.0.3'

    if (nativeBuildSystem == 'cmake') {
        defaultConfig {
            applicationId = 'org.tensorflow.demo'
            minSdkVersion 26
            targetSdkVersion 27
            multiDexEnabled true

            ndk {
                abiFilters "${cpuType}"
            }
            externalNativeBuild {
                cmake {
                    arguments '-DANDROID_TOOLCHAIN=gcc', '-DANDROID_STL=gnustl_static'
                }
            }
            javaCompileOptions {
                annotationProcessorOptions {
                    includeCompileClasspath false
                }
            }
        }
        dexOptions {
            javaMaxHeapSize "12g"
        }
        externalNativeBuild {
            cmake {
                path './jni/CMakeLists.txt'
            }
        }
        //deeplearning4J on Android
        packagingOptions {
            exclude 'META-INF/DEPENDENCIES'
            exclude 'META-INF/DEPENDENCIES.txt'
            exclude 'META-INF/LICENSE'
            exclude 'META-INF/LICENSE.txt'
            exclude 'META-INF/license.txt'
            exclude 'META-INF/NOTICE'
            exclude 'META-INF/NOTICE.txt'
            exclude 'META-INF/notice.txt'
            exclude 'META-INF/INDEX.LIST'
            exclude 'org/bytedeco/javacpp/windows-x86/msvcp120.dll'
            exclude 'org/bytedeco/javacpp/windows-x86_64/msvcp120.dll'
            exclude 'org/bytedeco/javacpp/windows-x86/msvcr120.dll'
            exclude 'org/bytedeco/javacpp/windows-x86_64/msvcr120.dll'
        }
    }

    lintOptions {
        abortOnError false
    }

    sourceSets {
        main {
            if (nativeBuildSystem == 'bazel' || nativeBuildSystem == 'makefile') {
                // TensorFlow Java API sources.
                java {
                    srcDir '../../java/src/main/java'
                    exclude '**/examples/**'
                }

                // Android TensorFlow wrappers, etc.
                java {
                    srcDir '../../contrib/android/java'
                }

            }

            // Android demo app sources.
            java {
                srcDir 'src'
            }

            manifest.srcFile 'AndroidManifest.xml'
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = [project.ext.ASSET_DIR]
            jniLibs.srcDirs = ['libs']
        }

        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

task buildNativeBazel(type: Exec) {
    workingDir '../../..'
    commandLine bazelLocation, 'build', '-c', 'opt',             \
                    'tensorflow/examples/android:tensorflow_native_libs',             \
                    '--crosstool_top=//external:android/crosstool',             \
                    '--cpu=' + cpuType,             \
                    '--host_crosstool_top=@bazel_tools//tools/cpp:toolchain'
}

task buildNativeMake(type: Exec) {
    environment "NDK_ROOT", android.ndkDirectory
    // Tip: install ccache and uncomment the following to speed up
    // builds significantly.
    environment "CC_PREFIX", 'ccache'
    workingDir '../../..'
    commandLine 'tensorflow/contrib/makefile/build_all_android.sh',             \
                    '-s',             \
                    'tensorflow/contrib/makefile/sub_makefiles/android/Makefile.in',             \
                    '-t',             \
                    'libtensorflow_inference.so libtensorflow_demo.so all'             \
         , '-a', cpuType             \
//         , '-T'  // Uncomment to skip protobuf and speed up subsequent builds.
}

task copyNativeLibs(type: Copy) {
    from demoLibPath
    from inferenceLibPath
    into nativeOutDir
    duplicatesStrategy = 'include'
    dependsOn nativeBuildRule
    fileMode 0644
}

tasks.whenTaskAdded { task ->
    if (nativeBuildSystem == 'bazel' || nativeBuildSystem == 'makefile') {
        if (task.name == 'assembleDebug') {
            task.dependsOn 'copyNativeLibs'
        }
        if (task.name == 'assembleRelease') {
            task.dependsOn 'copyNativeLibs'
        }
    }
}

// Download default models; if you wish to use your own models then
// place them in the "assets" directory and comment out this line.
//apply from: "download-models.gradle"

dependencies {

    //TODO Somehow get deeplearn4j to work in this build file

    annotationProcessor 'org.projectlombok:lombok:1.16.16'

//    implementation('org.deeplearning4j:deeplearning4j-nn:0.9.1') {
//        exclude group: 'com.github.stephenc.findbugs', module: 'findbugs-annotations'
//    }
//    compile('org.nd4j:nd4j-native:0.9.1') {
//        exclude group: 'com.github.stephenc.findbugs', module: 'findbugs-annotations'
//    }
//    implementation('org.nd4j:nd4j-native:0.9.1:android-x86') {
//        exclude group: 'com.github.stephenc.findbugs', module: 'findbugs-annotations'
//    }
//    implementation('org.nd4j:nd4j-native:0.9.1:android-arm') {
//        exclude group: 'com.github.stephenc.findbugs', module: 'findbugs-annotations'
//    }

//    implementation('org.deeplearning4j:deeplearning4j-nn:1.0.0-alpha') {
//        exclude group: 'com.github.stephenc.findbugs', module: 'findbugs-annotations'
//    }
    compile group: 'org.deeplearning4j', name: 'deeplearning4j-nn', version: '1.0.0-alpha'
    compile('org.nd4j:nd4j-native:1.0.0-alpha') {
        exclude group: 'com.github.stephenc.findbugs', module: 'findbugs-annotations'
    }
    implementation('org.nd4j:nd4j-native:1.0.0-alpha:android-x86_64') {
        exclude group: 'com.github.stephenc.findbugs', module: 'findbugs-annotations'
    }
    implementation('org.nd4j:nd4j-native:1.0.0-alpha:android-arm64') {
        exclude group: 'com.github.stephenc.findbugs', module: 'findbugs-annotations'
    }

    implementation 'org.bytedeco:javacpp:1.4.1'
    implementation 'org.bytedeco.javacpp-presets:openblas:0.2.19-1.3:android-x86'
    implementation 'org.bytedeco.javacpp-presets:openblas:0.2.19-1.3:android-arm'
    if (nativeBuildSystem == 'cmake' || nativeBuildSystem == 'none') {
        implementation 'org.tensorflow:tensorflow-android:+'

    }
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    implementation 'com.android.support:support-v4:27.1.0'
    implementation 'com.android.support:support-v13:27.1.0'
    implementation 'com.android.support:cardview-v7:27.1.0'
    implementation 'com.android.support:appcompat-v7:27.1.0'

    //For Splitting the video into images.
    implementation 'nl.bravobit:android-ffmpeg:1.1.2'

    //For Dependency Injection
    implementation 'com.google.dagger:dagger:2.12'
    annotationProcessor 'com.google.dagger:dagger-compiler:2.12'

    //For ViewBinding
    implementation 'com.jakewharton:butterknife:8.8.1'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

    //rest interactions

    //    implementation 'com.squareup.retrofit2:retrofit:2.4.0'

    //JSON Parsing

    //    implementation 'com.squareup.retrofit2:converter-gson:2.4.0'

    //    implementation 'com.google.code.gson:gson:2.8.2'

    //http logging

    //    implementation 'com.squareup.okhttp3:logging-interceptor:3.4.2'

    //For Deleting all videos in a directory
    implementation 'commons-io:commons-io:2.6'
}

Here is the Java File which claims the dependencies are missing

package org.tensorflow.demo.deeplearning4J;

import android.os.AsyncTask;
import android.util.Log;

import org.deeplearning4j.nn.conf.NeuralNetConfiguration;
import org.deeplearning4j.nn.conf.layers.DenseLayer;
import org.deeplearning4j.nn.conf.layers.OutputLayer;
import org.deeplearning4j.nn.multilayer.MultiLayerNetwork;
import org.nd4j.linalg.activations.Activation;
import org.nd4j.linalg.api.ndarray.INDArray;
import org.nd4j.linalg.dataset.DataSet;
import org.nd4j.linalg.factory.Nd4j;

public class dl4jTest {
  private String output;

  public dl4jTest() {
    AsyncTask.execute(new Runnable() {
      @Override
      public void run() {
        createAndUseNetwork();
      }
    });

  }
  private void createAndUseNetwork() {
    Log.d("NN", "Begin Calculation");
    DenseLayer inputLayer = new DenseLayer.Builder()
        .nIn(2)
        .nOut(3)
        .name("Input")
        .build();

    DenseLayer hiddenLayer = new DenseLayer.Builder()
        .nIn(3)
        .nOut(2)
        .name("Hidden")
        .build();

    OutputLayer outputLayer = new OutputLayer.Builder()
        .nIn(2)
        .nOut(2)
        .name("Output")
        .activation(Activation.SOFTMAX)
        .build();

    NeuralNetConfiguration.Builder nncBuilder = new NeuralNetConfiguration.Builder();
    nncBuilder.iterations(5);
    nncBuilder.learningRate(0.1);

    NeuralNetConfiguration.ListBuilder listBuilder = nncBuilder.list();
    listBuilder.layer(0, inputLayer);
    listBuilder.layer(1, hiddenLayer);
    listBuilder.layer(2, outputLayer);

    listBuilder.backprop(true);

    MultiLayerNetwork myNetwork = new MultiLayerNetwork(listBuilder.build());
    myNetwork.init();

    final int NUM_SAMPLES = 4;

    INDArray trainingInputs = Nd4j.zeros(NUM_SAMPLES, inputLayer.getNIn());
    INDArray trainingOutputs = Nd4j.zeros(NUM_SAMPLES, outputLayer.getNOut());

    // If 0,0 show 0
    trainingInputs.putScalar(new int[]{0, 0}, 0);
    trainingInputs.putScalar(new int[]{0, 1}, 0);
    trainingOutputs.putScalar(new int[]{0, 0}, 0);
    trainingOutputs.putScalar(new int[]{0, 1}, 1);

    // If 0,1 show 1
    trainingInputs.putScalar(new int[]{1, 0}, 0);
    trainingInputs.putScalar(new int[]{1, 1}, 1);
    trainingOutputs.putScalar(new int[]{1, 0}, 1);
    trainingOutputs.putScalar(new int[]{1, 1}, 0);

    // If 1,0 show 1
    trainingInputs.putScalar(new int[]{2, 0}, 1);
    trainingInputs.putScalar(new int[]{2, 1}, 0);
    trainingOutputs.putScalar(new int[]{2, 0}, 1);
    trainingOutputs.putScalar(new int[]{2, 1}, 0);

    // If 1,1 show 0
    trainingInputs.putScalar(new int[]{3, 0}, 1);
    trainingInputs.putScalar(new int[]{3, 1}, 1);
    trainingOutputs.putScalar(new int[]{3, 0}, 0);
    trainingOutputs.putScalar(new int[]{3, 1}, 1);

    DataSet myData = new DataSet(trainingInputs, trainingOutputs);
    myNetwork.fit(myData);

    // Create input
    INDArray actualInput = Nd4j.zeros(1, 2);
    actualInput.putScalar(new int[]{0, 0}, 1);
    actualInput.putScalar(new int[]{0, 1}, 1);

    // Generate output
    Log.d("NN", "Calculation Complete");
    INDArray actualOutput = myNetwork.output(actualInput);
    Log.d("NN", actualOutput.toString());

  }

  public String getOutput() {
    return output;
  }

  public void setOutput(String output) {
    this.output = output;
  }
}

In 1.0.0-alpha some APIs were changed, and apparently not all documentation pages were updated yet. Please refer to dl4j-examples for a while.

Thanks, that definitely needs to be updated.
In addition to referring to the examples, API changes are covered here: https://deeplearning4j.org/releasenotes#deeplearning4j-api-changes-transition-guide-091-to-100-alpha

That's correct, @jrmerwin will be updating the examples...

@AlexDBlack Thanks for providing the link to the API Changes.
The changes note that

.iterations(int)  method has been removed (was rarely used and confusing to users)

As someone who has only recently started working with dl4j, which  method can I use instead?
For the .learningrate(double) I will use the mentioned .updater(IUpdater)

With the help of @AlexDBlack I have been able to fix the replace the .iterations(int) and .learningRate(double) with a for-loop and nncBuilder.updater(Updater.ADAM); respectively.
However, unfortunately I am now facing a build error:
Program type already present: org.deeplearning4j.util.Dl4jReflection
Message{kind=ERROR, text=Program type already present: org.deeplearning4j.util.Dl4jReflection, sources=[Unknown source file], tool name=Optional.of(D8)}

The Gradle Build Scan does not list org.deeplearning4j.util.Dl4jReflection or Dl4jReflection (at least, I can't find it).
I have tried excluding Dl4jReflection and org.deeplearning4j.util.Dl4jReflection, but it doesn't seem  take.
Excluding  org.deeplearning4j.util.Dl4jReflection in the dependencies

    implementation('org.deeplearning4j:deeplearning4j-nn:1.0.0-alpha') {
        exclude group: 'com.github.stephenc.findbugs', module: 'findbugs-annotations'
        exclude module: 'org.deeplearning4j.util.Dl4jReflection'
    }
    implementation ('org.nd4j:nd4j-native:1.0.0-alpha') {
        exclude group: 'com.github.stephenc.findbugs', module: 'findbugs-annotations'
        exclude module: 'org.deeplearning4j.util.Dl4jReflection'
    }
    implementation('org.nd4j:nd4j-native:1.0.0-alpha:android-x86_64') {
        exclude group: 'com.github.stephenc.findbugs', module: 'findbugs-annotations'
        exclude module: 'org.deeplearning4j.util.Dl4jReflection'
    }
    implementation('org.nd4j:nd4j-native:1.0.0-alpha:android-arm64') {
        exclude group: 'com.github.stephenc.findbugs', module: 'findbugs-annotations'
        exclude module: 'org.deeplearning4j.util.Dl4jReflection'
    }

Excluding  org.deeplearning4j.util.Dl4jReflection in the configurations
configurations {
    all {
        exclude module: 'org.deeplearning4j.util.Dl4jReflection'
    }
}

Excluding  Dl4jReflection in the dependencies
    implementation('org.deeplearning4j:deeplearning4j-nn:1.0.0-alpha') {
        exclude group: 'com.github.stephenc.findbugs', module: 'findbugs-annotations'
        exclude module: 'Dl4jReflection'
    }
    implementation ('org.nd4j:nd4j-native:1.0.0-alpha') {
        exclude group: 'com.github.stephenc.findbugs', module: 'findbugs-annotations'
        exclude module: 'Dl4jReflection'
    }
    implementation('org.nd4j:nd4j-native:1.0.0-alpha:android-x86_64') {
        exclude group: 'com.github.stephenc.findbugs', module: 'findbugs-annotations'
        exclude module: 'Dl4jReflection'
    }
    implementation('org.nd4j:nd4j-native:1.0.0-alpha:android-arm64') {
        exclude group: 'com.github.stephenc.findbugs', module: 'findbugs-annotations'
        exclude module: 'Dl4jReflection'
    }

Excluding  Dl4jReflection in the configurations
configurations {
    all {
        exclude module: 'Dl4jReflection'
    }
}

None of these seem to work. Any ideas would be greatly appreciated!

@jrmerwin Are you also getting that? If so, I'll start looking into it myself...

@saudet  I do not see the above issue but I am still trying to get my examples to run with 1.0.0.

@jrmerwin Ok, let me know if you encounter any errors you can't readily fix and I'll help out. Thanks!

I have exactly the same problem: Program type already present: org.deeplearning4j.util.Dl4jReflection.
It occurred when I tried to use 1.0.0-alpha instead of 0.9.1.
This is my gradle file:
implementation('org.deeplearning4j:deeplearning4j-nn:1.0.0-alpha') {         exclude group: 'com.google.code.findbugs', module: 'annotations'         exclude module: 'org.deeplearning4j.util.Dl4jReflection'     }     implementation('org.deeplearning4j:deeplearning4j-core:1.0.0-alpha') {         exclude group: 'com.google.code.findbugs', module: 'annotations'         exclude module: 'org.deeplearning4j.util.Dl4jReflection'     }     implementation('org.nd4j:nd4j-native:1.0.0-alpha') {         exclude group: 'com.google.code.findbugs', module: 'annotations'         exclude module: 'org.deeplearning4j.util.Dl4jReflection'     }     implementation('org.nd4j:nd4j-native:1.0.0-alpha:android-x86') {         exclude group: 'com.google.code.findbugs', module: 'annotations'         exclude module: 'org.deeplearning4j.util.Dl4jReflection'     }     implementation('org.nd4j:nd4j-native:1.0.0-alpha:android-arm') {         exclude group: 'com.google.code.findbugs', module: 'annotations'         exclude module: 'org.deeplearning4j.util.Dl4jReflection'     }     implementation('org.datavec:datavec-data-codec:1.0.0-alpha') {         exclude group: 'com.google.code.findbugs', module: 'annotations'         exclude module: 'org.deeplearning4j.util.Dl4jReflection'     }     implementation ('org.bytedeco.javacpp-presets:openblas:0.2.20-1.4.1:android-arm'){         exclude module: 'org.deeplearning4j.util.Dl4jReflection'     }

@polaroidkidd, @jrmerwin will be updating soon the examples for Android and DL4J 1.0.0-beta.

I've since started using the SNAPSHOTS (using a dummy maven project) and have been able to build successfully, albeit, only for singular CPU architectures (ie, I can't build for arm and x86, I have to build for one or the other) as it claims "out of memory" during the build process (even though I've assigned 27gb RAM to Gradle).

@polaroidkidd Awesome! You'll probably need to increase memory this way: https://github.com/javafxports/javafxmobile-plugin#ios That's known usability bug in Gradle, so please report upstream.
@jrmerwin In the meantime, let's also add this tip to the Andoid guide for Deeplearning4j. Thanks!

I also rushed into this problem, no method iterations and learningRate, because of newer version. I got pom.xml
<parent>
    <groupId>org.deeplearning4j</groupId>
    <artifactId>deeplearning4j-examples-parent</artifactId>
    <version>1.0.0-beta</version>
</parent>

...
if I change version to 0.9.1 Maven reports error: Not found artifact... ?!
Out of topic statement:
I don't like what become of Maven nowadays. If you could think outside the box, you will probably agree too. Maven must provide easy and secure way for handling dependencies of different versions.   DL4J is example of pure garbage package. 5.2 Gb... All I want is to get libraries and start writing my own code. No easy way.

You just need to use proper dependencies.
i.e. bare minimum to "linear algebra only on 1 platform" would be just one dependency: nd4j-native, with 1 platform classifier, i.e. linux-x86_64. If you want to add neural networks only - you'll add deeplearning4j-nn dependency.
And so on.

@jrmerwin has updated the documentation and the examples:
https://github.com/deeplearning4j/deeplearning4j-docs/pull/71
https://github.com/deeplearning4j/dl4j-examples/pull/700


Smoothen the Tumbleweed logo

Description
Smoothen the Tumbleweed logo

Before & After:

Thank you for your contribution!
This PR is merged into hyfetch since this repo (dylanaraps/neofetch) seems no longer maintained.
HyFetch is a fork of neofetch with LGBTQ pride flags, but the repo also maintains an updated version of the original neofetch, addressing many pull requests that are not merged in the original repo.
Read the "Running Updated Original Neofetch" section for more info!


Need to update mutation lists for several other lineages

[ ] BA.5.2.1
[ ] BA.5.2
[ ] BF.7
[ ] BA.5.1
[ ] BQ.1 ( expand BQ.1.1 ?)
[ ] BA.4.6
[ ] BF.10
[ ] BF.11
[ ] XBB (we can't call recombinants easily)

@Abayomi-Olabode @GopiGugan - I've written an R script (unique-mutations.R) that will process the JSON file generated by our Untitled project to:

determine the frequencies of mutations in genomes that belong to some focus lineage X
generate a barplot of frequencies for those mutations in all other (non-focal) lineages

Example for BA.5.2.1:

I'll copy my current JSON file to /data/wastewater so you don't have to generate it yourself (but you just have to run Untitled retrieve.py to do so)

Note the above plot is displaying the mean mutation frequencies, averaged across other lineages.
If there is a handful of lineages that are fixed for the same mutation, it may still be shown as a low frequency.

This might be more useful:
max.freq <- apply(others, 2, function(x) row.names(others)[which.max(x)])

Thanks


Fix community permission check

Fixes
    return f(self, *args, **kwargs)
  File "/Users/jaromero/.pyenv/versions/3.9.19/envs/cdsrdmupgrade/lib/python3.9/site-packages/flask_resources/responses.py", line 40, in inner
    return resource_requestctx.response_handler.make_response(*res, many=many)
  File "/Users/jaromero/.pyenv/versions/3.9.19/envs/cdsrdmupgrade/lib/python3.9/site-packages/flask_resources/responses.py", line 94, in make_response
    "" if obj_or_list is None else serialize(obj_or_list),
  File "/Users/jaromero/.pyenv/versions/3.9.19/envs/cdsrdmupgrade/lib/python3.9/site-packages/flask_resources/serializers/base.py", line 77, in serialize_object
    return self.format_serializer.serialize_object(self.dump_obj(obj))
  File "/Users/jaromero/.pyenv/versions/3.9.19/envs/cdsrdmupgrade/lib/python3.9/site-packages/flask_resources/serializers/base.py", line 66, in dump_obj
    return self.object_schema.dump(obj)
  File "/Users/jaromero/.pyenv/versions/3.9.19/envs/cdsrdmupgrade/lib/python3.9/site-packages/flask_resources/parsers/schema.py", line 95, in dump
    obj[object_key] = Schema.dump(self, obj, **kwargs)
  File "/Users/jaromero/.pyenv/versions/3.9.19/envs/cdsrdmupgrade/lib/python3.9/site-packages/marshmallow/schema.py", line 553, in dump
    result = self._serialize(processed_obj, many=many)
  File "/Users/jaromero/.pyenv/versions/3.9.19/envs/cdsrdmupgrade/lib/python3.9/site-packages/marshmallow/schema.py", line 521, in _serialize
    value = field_obj.serialize(attr_name, obj, accessor=self.get_attribute)
  File "/Users/jaromero/.pyenv/versions/3.9.19/envs/cdsrdmupgrade/lib/python3.9/site-packages/marshmallow/fields.py", line 341, in serialize
    return self._serialize(value, attr, obj, **kwargs)
  File "/Users/jaromero/.pyenv/versions/3.9.19/envs/cdsrdmupgrade/lib/python3.9/site-packages/marshmallow/fields.py", line 1985, in _serialize
    return self._serialize_method(obj)
  File "/Users/jaromero/Cern/invenio/modules/invenio-communities/invenio_communities/communities/resources/ui_schema.py", line 119, in get_permissions
    can_include_directly = _community_permission_check(
  File "/Users/jaromero/Cern/invenio/modules/invenio-communities/invenio_communities/communities/resources/ui_schema.py", line 41, in _community_permission_check
    return current_communities.service.config.permission_policy_cls(
  File "/Users/jaromero/.pyenv/versions/3.9.19/envs/cdsrdmupgrade/lib/python3.9/site-packages/flask_principal.py", line 333, in allows
    if self.needs and not self.needs.intersection(identity.provides):
  File "/Users/jaromero/.pyenv/versions/3.9.19/envs/cdsrdmupgrade/lib/python3.9/site-packages/invenio_records_permissions/policies/base.py", line 86, in needs
    needs = [generator.needs(**self.over) for generator in self.generators]
  File "/Users/jaromero/.pyenv/versions/3.9.19/envs/cdsrdmupgrade/lib/python3.9/site-packages/invenio_records_permissions/policies/base.py", line 86, in <listcomp>
    needs = [generator.needs(**self.over) for generator in self.generators]
  File "/Users/jaromero/Cern/invenio/modules/invenio-communities/invenio_communities/generators.py", line 158, in needs
    g.needs(record=record, **kwargs) for g in self._generators(record, **kwargs)
  File "/Users/jaromero/Cern/invenio/modules/invenio-communities/invenio_communities/generators.py", line 146, in _generators
    review_policy = dict_lookup(record, "access.review_policy")
  File "/Users/jaromero/.pyenv/versions/3.9.19/envs/cdsrdmupgrade/lib/python3.9/site-packages/invenio_records/dictutils.py", line 100, in dict_lookup
    value = value[key]
KeyError: 'access'

Closed in faour of the PRs linked in https://github.com/inveniosoftware/invenio-app-rdm/issues/2821


Generate og: properties

Make the default theme's header.php generate the  properties og: title, description, type, image.
This change enables Twitter to show "cards" for tweets that link to nicholas posts. It might also work for *acebook, but I haven't tested that. (ref. https://developer.twitter.com/en/docs/twitter-for-websites/cards/overview/abouts-cards )
header.php needs to know the image url for the og:image property, so this PR also adds image as third argument for get_header().

Thank you! Really appreciate your contribution. :)


Change Recapcha keys

This is for Google Re captcha.

@vronk where can I get the keys?

@patrickakk is this connected to a google account?
How does one get such a key?

https://developers.google.com/recaptcha/intro

To start using reCAPTCHA, you need to sign up for an API key pair for your site.

Yes, it looks like it's connected to a Google account.
and

First, choose the type of reCAPTCHA and then fill in authorized domains or package names. After you have accepted the terms of service, click Register to get new API key pair.

Currently the reCAPTCHA is used on our registration form, here: https://dhcr.clarin-dariah.eu/users/register
It looks like it's the following version:
reCAPTCHA v2 (Invisible reCAPTCHA badge)
and
maybe the url's for the test and dev instance could also be added, so that it also works there?

@dpancic, could you, please, generate reCAPTCHA key under acdh-google account for dhcr?

keys are available

Moved to Mai milestone, to give a realistic estimation of implementation.

@IvdL22 @PixlTracer
The new Google Recapcha keys are implemented. You can check this by visiting the registration form in the test instance (it didn't work before there):
https://test-dhcr.clarin-dariah.eu/users/register
Or checking the same page in production and see that it still works ;)
https://dhcr.clarin-dariah.eu/users/register
In the bottom right corner, you can see:

Can you change the label to Done?

@patrickakk I Checked, all good! Many thanks!

Implemented immediately. Noticed in release notes of 2023-05.


ChangeNotifierProviders select() function does not match riverpod.dev and inline documentation

Describe what scenario you think is uncovered by the existing examples/articles
The current documentation of provider.select() does not match in relation to ChangeNotifierProvider
The riverpod.dev docs say, using provider.select on ChangeNotifierProvider will not work, whereas the inline documentation of the function explicitly shows an example with the ChangeNotifierProvider
From Riverpod v2 Doc - ChangeNotifier
...
For example, using provider.select to optimize rebuilds of your widgets may not work if your state is mutable, as select will think that the value hasn't changed.
...

From Riverpod inline documentation of Package flutter_riverpod: ^2.3.6
...
The select function allows filtering unwanted rebuilds of a Widget by reading only the properties that we care about.
For example, consider the following ChangeNotifier:
...

The following are longer extractions of the Documentations mentioned above to faster get in context without needing to check the ressouces.
... from riverpod.dev v2 (link above):
Using mutable state instead of immutable state can sometimes be more efficient.
The downside is, it can be harder to maintain and may break various features.
For example, using provider.select to optimize rebuilds of your widgets may not work if your state is mutable, as select will think that the value hasn't changed.
As such, using immutable data structures can sometimes be faster.
Therefore it is important to make benchmarks specific to your use-case, to make sure that you are truly gaining performance by using ChangeNotifierProvider.

... Inline Documentation:
package:riverpod/src/framework.dart
AlwaysAliveProviderListenable<Selected> select<Selected>(Selected Function(UserNotifier) selector)

Containing class: AlwaysAliveProviderBase
Type: AlwaysAliveProviderListenable<dynamic> Function(dynamic Function(UserNotifier))

Partially listen to a provider.
The select function allows filtering unwanted rebuilds of a Widget by reading only the properties that we care about.
For example, consider the following ChangeNotifier:
class Person extends ChangeNotifier {
  int _age = 0;
  int get age => _age;
  set age(int age) {
    _age = age;
    notifyListeners();
  }

  String _name = '';
  String get name => _name;
  set name(String name) {
    _name = name;
    notifyListeners();
  }
}

final personProvider = ChangeNotifierProvider((_) => Person());
In this class, both name and age may change, but a widget may need only age.
If we used ref.watch(/Consumer as we normally would, this would cause widgets that only use age to still rebuild when name changes, which is inefficient.
....

The example given in the dartdoc of select works.
The issue with mutable state + select generally arises when returning a mutable object in the selector, such as a list.
provider.select((value) => value.someMutableList);

Then, when the list is mutated, providers wouldn't rebuild

Closing as there's technically nothing wrong


[Bug] 3 INVALID_ARGUMENT: only operation = is support for CloseTime

Describe the bug
S3 integration with Temporal doesn't work properly:
3 INVALID_ARGUMENT: only operation = is support for CloseTime

To Reproduce
Temporal config:
    archival:
      history:
        state: "enabled"
        enableRead: true
        provider:
          s3store:
            region: "us-east-1"
      visibility:
        state: "enabled"
        enableRead: true
        provider:
          s3store:
            region: "us-east-1"

    namespaceDefaults:
      archival:
        history:
          state: "enabled"
          URI: "s3://my-temporal-archive"
        visibility:
          state: "enabled"
          URI: "s3://my-temporal-archive"

Expected behavior
No error
Screenshots

Additional context
Temporal v1.7.0
Helm installation
Found a similar bug here: https://github.com/uber/cadence/issues/3544

i think this is an issue for the https://github.com/temporalio/temporal/ repo? this repo is for web UI issues

Sure, if you think so, I can create a new issue in the temporal repo. Thanks for suggestion


add bracketreplacer setting

What type of PR is this?

Uncomment one (or more) /kind <> lines:

/kind bug

/kind cleanup

/kind design

/kind documentation

/kind failing-test

/kind feature

Any specific area of the project related to this PR?

Uncomment one (or more) /area <> lines:

/area build

/area config

/area outputs

/area tests

What this PR does / why we need it:
Add bracketreplacer setting. It allows to replace the brackets in output fields:
If bracketreplacer = "_"
proc.args[0]  -> proc.args_0

If bracketreplacer = "."
proc.args[0]  -> proc.args.0

Which issue(s) this PR fixes:

Fixes #400
Special notes for your reviewer:

LGTM label has been added.  Git tree hash: 92aa42e159ff7b0ed1a5ed546da061ba827eeb42

[APPROVALNOTIFIER] This PR is APPROVED
This pull-request has been approved by: Issif, leogr
The full list of commands accepted by this bot can be found here.
The pull request process is described here

Needs approval from an approver in each of these files:

OWNERS [Issif,leogr]

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment


train vector copy

Trying to train a model  that copies a 10x1 vector, the loss converges, however the read weights seem to be fade. Why is this happening? (I changed  memory_words_num to 20, and   memory_word_size to 20)

Hmmm ... interesting!
It could be possible because the input is small and needs only one memory location, the neural network was able to learn to copy it directly without needing to query the data it wrote in memory. you can check that by running the same trained model with only 1 memory location and see if it still outputs correctly.

Using a memory of size one resulted in an error during the visualization...
Finally to train a vector, I used the train.py instead of train-series.py, which trains with random length. This worked and resulted in something like this

I believe that error in the visualization can be avoided by tweaking the visualize_op method a little. Anyway, I'm glad you got your results eventually!


feat(1136): Add Tabs component

1. What this code change do:

Add Tabs and TabItem under web-components
Add demo route for Tabs in Angular and React demo
Add a new story book page for Tabs component
Unit tests added

Screenshots

MOBILE VERSION:

DESKTOP:

2. Make sure that you've checked the boxes below before you submit PR:

[x] I have read and followed the contribution guidelines

[x] I have run a build locally.

[x] I have ran unit tests locally.

[x] I have tested the functionality.

3. Which issue and JIRA item does this PR fix (optional)
#1136
4. Additional notes for the reviewer

Tabs component supports for accessibility guideline at w3

Reviewer Checklist

[ x] Appropriate unit test coverage.
[x] Coding Standards followed.

Keyboard Functions:

[ ] Right Arrow: If focus is on the last tab, does not moves focus to the first tab.
[ ] Left Arrow: If focus is on the first tab, does not moves focus to the last tab.

UI

[ ] Profile tabs padding should be 16px on both side (only right padding is 16px).
[ ] Gap between 2 tabs should be 32px. (current gap 0px).

https://www.loom.com/share/f2835ca14b224134874146f91b514e02?sid=9e26c088-e5f0-4964-8350-b2e3a90d053f

Accessibility:

[ ] Chrome OS on Browser: while hovering the tabs, it does not speak for 1st tab (Profile).

https://github.com/GovAlta/ui-components/assets/107069489/4c137883-c046-4aca-85e6-68c2eb3d279d

Keyboard Functions:

[x]  Right Arrow: If focus is on the last tab, does not moves focus to the first tab.
[x]  Left Arrow: If focus is on the first tab, does not moves focus to the last tab.

UI

[x]  Profile tabs padding should be 16px on both side (only right padding is 16px).
[x]  Gap between 2 tabs should be 32px. (current gap 0px).
[x]  the bottom border for hover and active should be 4px.
[x]  the focus state should also include the grey bottom border like the hover state.
[x]  currently the position of the active and hover bottom border is correctly positioned on the first tab, and is lower on all other tabs
[x]  there is extra 16px padding on the left side of all tabs, making the tab content off centre

it should be space-m for padding left and right within the tab

https://www.loom.com/share/f2835ca14b224134874146f91b514e02?sid=9e26c088-e5f0-4964-8350-b2e3a90d053f

Accessibility:

[x]  Chrome OS on Browser: while hovering the tabs, it does not speak for 1st tab (Profile).

Tabs_Accessibility_Windows_Chrome.mp4

I fixed the above. The last point "Accessibility", we agree that NVDA should speak when we focus on the tab (not hover)

[ ] active focus always does have blue underline, not grey

[ ] It looks like the tab order should be:
- focus active tab
- can use arrow keys left and right to change tab
- but next tab key goes to content
- then next tab key goes to next part of page
https://www.w3.org/WAI/ARIA/apg/patterns/tabs/examples/tabs-automatic/


Link FAQ in the app

Perhaps we should update the FAQ with/after the next release before doing this.


illdustry's file

created a branch, created a file and made a commit, and opened a pull request

created a branch, created a file and made a commit, and opened a pull request

allright


Option to create nav container with database "Recovery model" = "Simple"?

Would it be possible to have a switch to create a Nav container with "Recovery model" = "Simple"? I haven't figured out a way to change this outside of the Nav classic IDE => Database => Alter Database. It would be great if this could be scripted.

W1 and all developer preview docker images will in fact use recovery mode simple.
It is a bug, that all images with localizations uses full recovery mode.
I will fix this when the images are rebuilt next time, until then, you can run this command:
docker exec -it  sqlcmd -S "localhost\SQLEXPRESS" -Q "USE master; ALTER DATABASE  SET RECOVERY SIMPLE;"
where containerid is the container id and databasename is the name of the database.
The database names for the localized nav containers are Cronus followed by the country code.
CronusDK is the danish database.

Thanks!!!

Thanks, Freddy!!

All images should be using simple recovery mode by now.


Add an option to install integration dependencies via pip

Motivation

As there was no option to install the dependencies of integration modules, this PR aims to provide such an way.
For example, if you would like to install the dependencies of optuna_integration.lightgbm, we can do with:
$ pip install optuna-integration[lightgbm]

Description of the changes

I added the dependencies of each integration module to pyproject.toml.
To be discussed

Whether to remove requirements.txt from each module
Whether to add dependencies for the deprecated modules

@HideakiImamura Could you review this PR?

This PR relates to the issue in Optuna as well:

https://github.com/optuna/optuna/issues/5197

Let me confirm the motivation of this PR. Wouldn't using requirements.txt be sufficient to install additional dependencies? How about just adding instructions to use it?

@HideakiImamura

How about just adding instructions to use it?

There are several problems for this:

First people would not recognize it,
Even if people know it, it doesn't mean that people immediately recognize how to reach the files,
People need to make too many actions just to install the dependencies,
It's much easier to install the dependencies one by one by checking module not found error, and
However, if we check module not found error, people wouldn't know any version constraints,

The primary difference is whether we have the lists of dependencies either in requirements.txt or in pyproject.toml.
It doesn't add any complexity to the codebase while we will acquire the option to install dependencies via pip, i.e., well-defined 1 command.
Another benefit is the enrichment of the error messages as in PR#5498.
For these reasons, I am seeing more benefits for this change rather than downsides.

Please correct me if I'm wrong, but isn't it possible to install with just one command, pip install -r xxx/requirements.txt, as it stands now?

Did you mean something like this?
(base) shuhei@EB-B9400CBA:~$ pip install -r optuna-integration/botorch/requirements.txt
ERROR: Could not open requirements file: [Errno 2] No such file or directory: 'optuna-integration/botorch/requirements.txt'


Filterchip missing isEnabled property (present in Documentation)

Hi,
I notice that the Filterchip is missing the isEnabled property (as of the latest master today), that should be present according to the documentation here? https://api.flutter.dev/flutter/material/FilterChip/isEnabled.html  Am I missing a trick or is it intentional to pass in a null instead to the onSelected?

Hi @zambetpentru, the property is not missing, it is read-only so you cannot set it directly.

is it intentional to pass in a null instead to the onSelected?

Yes, that would be the case. See the screenshot below for it's definition

Closing as this is the intended design.
Thank you


dotnet new conosle --language 'F#' doesn't work in source-build 5.0 preview 4

$ rm -rf *
$ ls
$ clean-dotnet-cache
+ rm -rf /home/omajid/.aspnet /home/omajid/.dotnet/ /home/omajid/.mono/ /home/omajid/.nuget/ /home/omajid/.local/share/NuGet /home/omajid/.templateengine
+ rm -rf /tmp/NuGet /tmp/NuGetScratch '/tmp/.NETCore*' '/tmp/.NETStandard*' /tmp/.dotnet /tmp/clr-debug-pipe-911446-34502103-in /tmp/clr-debug-pipe-911446-34502103-out /tmp/clr-debug-pipe-921779-34533341-in /tmp/clr-debug-pipe-921779-34533341-out /tmp/clr-debug-pipe-922610-34547028-in /tmp/clr-debug-pipe-922610-34547028-out /tmp/clr-debug-pipe-923574-34557370-in /tmp/clr-debug-pipe-923574-34557370-out /tmp/clr-debug-pipe-924181-34558641-in /tmp/clr-debug-pipe-924181-34558641-out /tmp/Razor-Server /tmp/CoreFxPipe_omajid.5LXP1JCosleKRX01jPUqJZ94F /tmp/VBCSCompiler '/tmp/.NETFramework*' '/tmp/dotnet.*' /tmp/dotnet-diagnostic-911446-34502103-socket /tmp/dotnet-diagnostic-921779-34533341-socket /tmp/dotnet-diagnostic-922610-34547028-socket /tmp/dotnet-diagnostic-923574-34557370-socket /tmp/dotnet-diagnostic-924181-34558641-socket
$ dotnet --info
.NET SDK (reflecting any global.json):
 Version:   5.0.100-preview.4.20161.13
 Commit:    b0d47ebe34

Runtime Environment:
 OS Name:     fedora
 OS Version:  32
 OS Platform: Linux
 RID:         fedora.32-x64
 Base Path:   /usr/lib64/dotnet/sdk/5.0.100-preview.4.20161.13/

Host (useful for support):
  Version: 5.0.0-preview.4.20251.6
  Commit:  47ec733ba7

.NET SDKs installed:
  5.0.100-preview.4.20161.13 [/usr/lib64/dotnet/sdk]

.NET runtimes installed:
  Microsoft.AspNetCore.App 5.0.0-preview.4.20257.10 [/usr/lib64/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 5.0.0-preview.4.20251.6 [/usr/lib64/dotnet/shared/Microsoft.NETCore.App]

To install additional .NET runtimes or SDKs:
  https://aka.ms/dotnet-download
$ dotnet new conosle --language 'F#'

Welcome to .NET 5.0!
---------------------
SDK Version: 5.0.100-preview.4.20161.13

----------------
Installed an ASP.NET Core HTTPS development certificate.
To trust the certificate run 'dotnet dev-certs https --trust' (Windows and macOS only).
Learn about HTTPS: https://aka.ms/dotnet-https
----------------
Write your first app: https://aka.ms/dotnet-hello-world
Find out what's new: https://aka.ms/dotnet-whats-new
Explore documentation: https://aka.ms/dotnet-docs
Report issues and find source on GitHub: https://github.com/dotnet/core
Use 'dotnet --help' to see available commands or visit: https://aka.ms/dotnet-cli
--------------------------------------------------------------------------------------
Getting ready...
Couldn't find an installed template that matches the input, searching online for one that does...
Usage: new [options]

Options:
  -h, --help          Displays help for this command.
  -l, --list          Lists templates containing the specified name. If no name is specified, lists all templates.
  -n, --name          The name for the output being created. If no name is specified, the name of the current directory is used.
  -o, --output        Location to place the generated output.
  -i, --install       Installs a source or a template pack.
  -u, --uninstall     Uninstalls a source or a template pack.
  --nuget-source      Specifies a NuGet source to use during install.
  --type              Filters templates based on available types. Predefined values are "project", "item" or "other".
  --dry-run           Displays a summary of what would happen if the given command line were run if it would result in a template creation.
  --force             Forces content to be generated even if it would change existing files.
  -lang, --language   Filters templates based on language and specifies the language of the template to create.
  --update-check      Check the currently installed template packs for updates.
  --update-apply      Check the currently installed template packs for update, and install the updates.

Unable to determine the desired template from the input template name: conosle.
The following templates partially match the input. Be more specific with the template name and/or language.

Templates                                         Short Name      Language      Tags
--------------------------------------------      ----------      --------      --------------
Console Application                               console         F#            Common/Console
Class library                                     classlib        F#            Common/Library
Unit Test Project                                 mstest          F#            Test/MSTest
NUnit 3 Test Project                              nunit           F#            Test/NUnit
NUnit 3 Test Item                                 nunit-test      F#            Test/NUnit
xUnit Test Project                                xunit           F#            Test/xUnit
ASP.NET Core Empty                                web             F#            Web/Empty
ASP.NET Core Web App (Model-View-Controller)      mvc             F#            Web/MVC
ASP.NET Core Web API                              webapi          F#            Web/WebAPI

PEBKAC. I typoed conosle...


Update articles "read more" link

Some places don't have any articles, only related. Link changed to be less specific.

:+1:


Akamai compatibility with Terraform

Platform or tool
Akamai
Desired or expected behavior
Akamai shell plugin currently provisions credentials using a temporary file. While this approach works great for the Akamai binary, for Akamai Terraform provider, we'll need to use Akamai environment variables:

AKAMAI_DEFAULT_CLIENT_SECRET = xxxxx
AKAMAI_DEFAULT_HOST = xxxxx
AKAMAI_DEFAULT_ACCESS_TOKEN = xxxxx
AKAMAI_DEFAULT_CLIENT_TOKEN = xxxxx

Current behavior
Provisioning happens as a temporary file.
Relevant log output
No response
op CLI version
2.19.0-beta.01

This was tracked in a parent issue, but we are branching it out to track them more precisely.


Libraries cleanup

Why
Correct urls on repositories that have moved
Based on this output from #333
Repository matt-block/react-native-in-app-browser has moved to https://github.com/matei-radu/react-native-in-app-browser

Repository ElekenAgency/ReactNativeWheelPicker has moved to https://github.com/kalontech/ReactNativeWheelPicker
Repository connected-lab/react-native-xml2js has moved to https://github.com/connected-io/react-native-xml2js
Repository includable/react-native-map-link has moved to https://github.com/tschoffelen/react-native-map-link

Repository thinkmill/react-native-schemes-manager has moved to https://github.com/thekevinbrown/react-native-schemes-manager
Repository psicotropicos/react-native-tilt has moved to https://github.com/joao-alberto/react-native-tilt
Repository uxman-sherwani/react-native-fa-icons has moved to https://github.com/uxxman/react-native-fa-icons

Repository fabriciovergal/react-native-localizable has moved to https://github.com/fabriciovergara/react-native-localizable
Repository jeffreymendez1993/react-native-webview-readability has moved to https://github.com/A11yWatch/react-native-reader
Repository bgryszko/react-native-circular-slider has moved to https://github.com/bartgryszko/react-native-circular-slider

Repository bodyflex/react-native-simple-modal has moved to https://github.com/maxjvh/react-native-simple-modal
Repository bgryszko/react-native-circular-progress has moved to https://github.com/bartgryszko/react-native-circular-progress
Repository l-urence/react-native-autocomplete-input has moved to https://github.com/mrlaessig/react-native-autocomplete-input

Repository CentaurWarchief/react-native-android-sms-listener has moved to https://github.com/andreyvital/react-native-android-sms-listener
Repository callstack-io/react-native-fbads has moved to https://github.com/callstack/react-native-fbads

Repository maicki/react-native-event-bridge not found
retrying fetch for https://github.com/maicki/react-native-event-bridge
ERROR fetching https://github.com/maicki/react-native-event-bridge - OUT OF RETRIES

thanks 🙏 can you resolve the conflicts?

@brentvatne sure, updated


Iris: Label is linked to wrong switch

Describe the bug
In the Iris settings clicking on the label to enable/disable Hestia, toggles the switch for the Iris settings.
To Reproduce

Go to Course Management
Click on Iris settings
Click on 'Enabled/Disabled' under the Hestia settings
See error where Iris is instead enabled/disabled

Expected behavior
Hestia should be enabled/disabled
Screenshots
https://github.com/ls1intum/Artemis/assets/38322605/13479135-fbd2-4480-8020-5fd564ef8045
Which version of Artemis are you seeing the problem on?
6.5.4
What browsers are you seeing the problem on?
Safari
Additional context
No response
Relevant log output
No response

Hey, if no one is working on this I can take this as my 1st contrib @ Artemis


Refactor error passing to error handler in oauth2.controller.ts

Todo:
Refactor error passing to error handler in oauth2.controller.ts - instead passing the error to done(err), just throw err.

Conclusion:
There's no need for that refactor cause the functions in oauth2.controller.ts are must pass the error in done function cause without it, the error will not be passed to the error handler.


Better pull dialog, Screen status

Closes #6090
Don't look at the code yet, it is based on the #6089 branch

[X] Screen status
[X] autocretation of CUA
[X] abapmerge stuff - https://github.com/larshp/abapmerge/pull/366
[x] wiring, testing and finetuning
[x] change detection (how to recreate, if GUI status was updated)

Implementation details:

zcl_abapgit_objects_program=>ty_cua became public
zcl_abapgit_persist_migrate got 2 new methods gui_status_create/exists
... and a local class that inherits from zcl_abapgit_objects_program to reuse serialize/deserialize cua (pls review the activation logic)
... and a local class lcl_own_cua_provider with @@abapmerge include-cua pragma
idea is that migration checks the existance of GUI status at startup and creates it if missing
the dialog ALV logic is rather simple, reuses the new GUI status and falls back to SAPMSVIM in case of something unusual
GUI status DECIDE_DIALOG is available for further improvements if any

Demo
https://user-images.githubusercontent.com/15635498/221364038-8ef25b5d-a59c-42cb-9ce2-ecb0e57802b7.mp4

OK, ready for review and test conceptually. I added changes description to the main message above. The testing should be done both over the full AG (should be no problem as the GUI status is a part of XML) and the standalone version (must use new feature of abapmerge - https://github.com/larshp/abapmerge/pull/366).
One unresolved point is detection of CHANGES. So that if I install AGS, run it (CUA autocreated), then update the AGS, and the CUA has been changed in the new code, but it is already created - then there is no clear trigger to recreate. Actually no big issue - just have to compare the new and existing structure.
Question: is there a standard way to compare 2 deep structures ? Any FM or class ? Currently I'm considering import/export from data buffer + zcl_abapgit_hash=>sha1 ...

Also added state column

Debugger does it with CL_TPDA_DIFF* classes maybe that's helpful.

Debugger does it with CL_TPDA_DIFF* classes maybe that's helpful.

Mmmm, seems like it goes via stack in some indirect way ... I ended up with sha1 way. Actually works well. But thanks anyway.
So. I guess now it is really ready for test and review

lint-and-merge error is due to old abapmerge
unit test error ... not sure, no new UTs were created

https://github.com/open-abap/open-abap-core/pull/564

Tested... on 702 😁 It works! 👍

Small issues:

Not wide enough
"Mark selected F7" does not work and selects everything

The following work better:
  METHODS popup_to_select_from_list
    IMPORTING
...
      !iv_start_column       TYPE i DEFAULT 10
      !iv_end_column         TYPE i DEFAULT 125
      !iv_start_line         TYPE i DEFAULT 10
      !iv_end_line           TYPE i DEFAULT 30

Or maybe just rename to "Mark visible"

oh, it's almost twice as wide for your screen (mine is 1920x1080).
Maybe call it "Select filtered objects (F7)"
"Select highlighted objects" would be a good addition since clicking a checkbox is a round-trip:

OK, both work. If anything is selected then it is marked, if nothing - then all visible (after filter) are selected. Text is "Mark selected or all visible" - should be a bit clearer

I also have 1920x1080, scaling 125% ... anyway, I think this dialog wins from size ...

Actually one usability concern ... intuitively, I'd expect that "Select All" (and also Deselect All) is applied to visible records ... Although it is not a hard rule and also a matter of habit, but may be a source of confusion ...
Just thoughts ...

Just in case, no further plans from my side to add anything here. The #6107 will certainly be a separate PR (PRs). The "usability concern" also (if necessary at all).

lgtm 😃

I work with this change since a few days in dev and standalone edition, no problems so far. Good Job. 👍

:tada:

Deployments just became easier :)

just realized what was odd... "OK" (the default) should be on the left:

I can change, but this is arguable. In fact I move them to the right intentionally. Because if it's pressed by mouse it is always on the same place, in particular:

in case of dynamic tool bar change (filter reset button)
in case of new button addition. Both standard alv or new functions - e.g. I want to add a possibility to change package assignments only and this will probably be a separate button, not a filter, because it will need to pass specific params to the deserializer

But if there is a grounded or massive opinion that it's better be the left-most, I can change

default (main) button on left matches our HTML form design.

Hmm maybe a matter of a better hotkey ? I mean key navigation is a very good reason. But TAB-TAB-Enter is then sub-optimal. It's better to have Ctrl+Enter (or similar) at any place of the screen ...


Fallback to using the name table to infer the encoding for TrueType fonts missing such data (issue 15910)

The relevant TrueType font is missing both /ToUnicode and /Encoding entires, either of which would have prevented the (current) broken textLayer rendering. My first idea was that we could use the post table in the TrueType font, see https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6post.html, to get the actual glyphNames and amend the fallback ToUnicode-map that way. Unfortunately that didn't work, since the post table only contained ".notdef" and "" (i.e. empty string) entries.
Instead we try to use the name table in the TrueType font, see https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6name.html, to determine if the platform is Windows and thus fallback to generate a ToUnicode-map from the WinAnsiEncoding.

Also, with these changes, it's not entirely clear to me if we actually need the TrueType-branch since for a Symbolic font we'll always overwrite the encoding with MacRomanEncoding just below!?
https://github.com/mozilla/pdf.js/blob/d8d5545e03d2c7a17b414a65684a745389f2a614/src/core/evaluator.js#L3488-L3494

Also, with these changes, it's not entirely clear to me if we actually need the TrueType-branch since for a Symbolic font we'll always overwrite the encoding with MacRomanEncoding just below!?
https://github.com/mozilla/pdf.js/blob/d8d5545e03d2c7a17b414a65684a745389f2a614/src/core/evaluator.js#L3488-L3494

I don't know either and I don't have any opinions.

/botio browsertest


Version 0.0.12 - Youtube videos being posted thru "Select Youtube Video" feature doesn't play

Expected behavior
Youtube video that is included in publishing a “Post” should play when tapped and viewed, both in app or any front-end (Steemit.com or busy.org).
Actual behavior
Youtube video that is being selected and published as a “Post” doesn’t play when tapped and viewed -
for which it displays a “Video unavailable” message.
How to reproduce

Tap the “+” icon that is found at the bottom center of the app and tap the “Post” button.
Tap the “Select Youtube Video” feature.
Input the keyword of the Youtube video you intend to include in your post and enter.
Tap the video you desire to include and select whichever community that suits the video.
Tap “Publish” button.
After a successful posting, tap thr “Profile” button and wait for your posts to load.
Tap the post you created a while ago and tap the “Play” button found at the middle center of the iframe designated for the Youtube video.
The issue occurs for which it says “Video unavailable”. Additionally, the same message appears too when viewing the post in Steemit front end whereas in busy.org front-end the iframe is not displayed.

For Steemit front-end:

For busy.org front-end:

Environment

App/Plugin version: HapRamp-Android v0.0.12
Device: Samsung Galaxy J2 Prime (SM-G532G/DS)
Operating system: Android version 6.0.1

Recording Of The Bug
https://www.youtube.com/watch?v=o1P-e010IcA

Video is still unavailable in latest version 0.0.13.

@josephace135 Please provide the link to the post which is failing.

@singhpratyush this one - https://steemit.com/hapramp/@froeilanddave/p1g7abkzw2o8cfcd53c4aq6kqb5vo9aquqbkwqn00vc6yo13dinlrkqcwb5zuqsq20180903225032

@josephace135 @singhpratyush This issue is with youtube embed url.
Actually, we are using youtube.com/embed/<video-id>.
This URL is not working for any video on the browser even. We need to find an alternative to embed it.
Cross check:
Original video: https://www.youtube.com/watch?v=pZ0viMxYDA4
Embed link:  https://www.youtube.com/embed/pZ0viMxYDA4

@bxute That's not the case.
This can be fixed by simply changing http to https at https://github.com/hapramp/1Rramp-Android/blob/0d79388a211c848af25a433c8bfa8e513dbf033b/app/src/main/java/com/hapramp/views/post/PostCreateComponent.java#L224.
I've checked the embed URL you mentioned and it is now working.

I tried following @singhpratyush 's proposed fix of changing http to https., the youtube video works fine upon that change, @bxute.

@josephace135: It was the https issue - thanks a lot for reporting the bug :)


Dynamic config key

The config key is now dynamically fetched even if it's used with multi test engine
ReadMe file has been updated to indicate that we support Multi test engine arcanist extension.  and how to use it.

I signed it!

Aye, my apologies - I messed up the CLA state because I used the web editor and my personal email got attached to the commit message. If you squash the edits into your changes and re-push the branch it should clear up the CLA issues.

@jverkoey The function should not return anything and I fixed that. It just checks that the .arcconfig file exists and the format is in proper JSON format and throws exception if file is missing or in not valid format.


Makefile:2: recipe for target 'install' failed

Hi, I've been using your project for several months, and it's been a lifesaver. Haskell in the cloud!
Unfortunately, my project doesn't build anymore. It just stumbled on this today. I'm not even sure if it's me. Perhaps, you can double check with your apps.
I'm hoping it's a cache issue, but I haven't made any Heroku related changes since August.
Makefile:
install:
	    stack build --copy-bins

Build/deploy log:
-----> Haskell app detected
-----> 2017-10-25_00:59:47 Starting...
-----> 2017-10-25_00:59:47 Exporting config vars
-----> 2017-10-25_00:59:47 Restoring 6.0.0a files from cache
-----> 2017-10-25_00:59:47 Restoring stack-1.5.1
-----> 2017-10-25_00:59:47 Substituting stack vars
-----> 2017-10-25_00:59:47 Restoring .stack-work
-----> 2017-10-25_00:59:51 Running stack
-----> 2017-10-25_00:59:51 Makefile detected
stack build --copy-bins
Process exited with ExitFailure 1: /usr/bin/gcc -v
Makefile:2: recipe for target 'install' failed
make: *** [install] Error 1
 !     Push rejected, failed to compile Haskell app.
 !     Push failed

Can you provide a lot more context? Could you reduce the problem down to something that's reproduceable that you could share? Thanks!

Good news! Sorry, for the delay. It was user error, a strange one too.
While failing to reproduce the same error in another project, I realized that I was running on a nightly stackage version from May. I bumped that. No avail. I still wasn't sure if heroku was at fault or what I should isolate. Turned on verbose. Cleared the cache. And slowly toggled away heroku settings. No change.
The problem was already staring me in the face, but I couldn't test on OSX. Turns out /usr/bin/gcc -v will read a file called specs if it exists. I just created a directory named specs, and it was failing to read that. Re-renamed that directory, then deployed it successfully.


Content type and content encoding should be defaulted

Content type and content encoding should be defaulted to application/json and utf-8 in the default message object.

Fix has been checked in, and included in the latest release


Doc edit for the Slack Connector docs

Could not get the Examples file to be green so it can be edited. Will try again with another PR.

Could not get the Examples file to be green so it can be edited. Will try again with another PR.


Grafana URL configuration parameter

Grafana URL should come from the settings.py file instead of literal in the code.
https://github.com/lsst-uk/lasair4/blob/main/webserver/lasair/templates_ZTF/status.html#L8
See issue https://github.com/lsst-uk/lasair-deploy/issues/116

This is done


Update docs for version to 2.0.0

@pfn how do you feel about publishing a version 2.0.0 of this plugin for sbt 1.x?  I have the snapshot version published to an internal artifactory for our company, but would prefer to use an actual published version if possible.

@jeffboutotte I'll see what I can do about publishing a 2.0.0 for you, let me take in all the PRs and see.

@pfn awesome - thank you! Let me know if there are any outstanding issues you have concerns about before releasing a version 2.0.0, I'm happy to dig in and contribute fixes.

I'll merge this and try to get this published over the weekend or Monday. Thanks for your help!

Awesome - thank you!

Thanks for your help!


WebGPU: fix uniform analysis deactivation

Until we update TintWASM with the latest package, I have to re-add the js code that disables uniform analysis by injecting a special diagnostic line in the shader code.

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/14401/merge
Test environment:
https://babylonsnapshots.z22.web.core.windows.net/refs/pull/14401/merge/index.html
To test a playground add it to the URL, for example:
https://babylonsnapshots.z22.web.core.windows.net/refs/pull/14401/merge/index.html#WGZLGJ#4600
Links to test babylon tools with this snapshot:
https://playground.babylonjs.com/?snapshot=refs/pull/14401/merge
https://sandbox.babylonjs.com/?snapshot=refs/pull/14401/merge
https://gui.babylonjs.com/?snapshot=refs/pull/14401/merge
https://nme.babylonjs.com/?snapshot=refs/pull/14401/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/14401/merge#BCU1XR#0


FIX: Use correct event time in flyer, not time collect() is run.

Today at the beamline, we discovered that diag6_flyer1 was generating events with an event.time that corresponded to when the event documents were composed -- after the scan, during the collect() phase -- not when their respective data points were generated.
We worked around this by accessing event.timestamps['diag6_flyer1'] instead of event.time. This PR makes event.time the same value as event.timestamps['diag6_flyer1']. Now get_table and other tools that use event.time will be usable on this data.

Closing this PR. This change is not relevant any longer 20-detectors no longer exists.


Accordion Block Settings

Adds a Settings tab to the Accordion block edit form to allow various configuration options:
Initial State - First item Open, All Items Closed or All Items Open
Item Heading Format - choose appropriate item heading level for SEO etc.
Options - make Bootstrap config options available:

Always Open (make accordion items stay open when another item is opened)
Flush (render accordion edge-to-edge)

I think something about this pull request is wrong – it's on the wrong migration (see tests.) I think you need to update and make sure you've branched off of the latest develop to make this change.

@aembler I've tried a couple of times to update the migration but have removed it now.  I'm afraid I have no idea what to do to make it work.

Thanks; I'll merge this and update the block type with this https://github.com/concrete5/concrete5/pull/10236


Function overloading - obscure logic

I have a variable of a union type (A or B). I have a function with overloads for A and for B.
It seems definitely sensible to allow passing this variable to the function. But TS fails on compilation.
interface A { foo: string };
interface B { bar: string };
let value: A | B;

function test(obj: A): boolean;
function test(obj: B): boolean;
function test(obj) { return true; }

test(value);

See Playground
Expected behavior:
No compile errors.
Actual behavior:
lib.ts(28,6): error TS2345: Argument of type 'A | B' is not assignable to parameter of type 'B'.
  Type 'A' is not assignable to type 'B'.
    Property 'bar' is missing in type 'A'.

I didn't test on all versions but I guess it doesn't depend on particular version as it's failing in the Playground.
I understand that instead of using overloads I can create a function with union type for argument:
function test(obj: A | B): boolean;

but in my case it's not acceptable. Actually the provided code is a simplified example of bigger problem.
I have a component with an option which type is string[] | Map<string> where Map is
export interface Map<T> {
	[key: string]: T;
}

I need to pass this option to a function from Undescore like these ones:
contains<T>(list: _.List<T>, value: T): boolean;
contains<T>(object: _.Dictionary<T>, value: T): boolean;

Duplicate of #14107 ?

@s-ve yes, I guess so


Edit: This is 2022 Not 2021,Year Updated.

AdonS's Authors Not Only Is Adkinsm,He(She/It) is Uazira's Everyone.
This is 2022 not 2021.

Okay, it's my individualism again. I forgot this is a community project, thanks for your contribution.


Logger added.

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Project coverage is 98.11%. Comparing base (e13b293) to head (e3d88ee).
Report is 1 commits behind head on master.

Additional details and impacted files
@@            Coverage Diff             @@
##           master       #8      +/-   ##
==========================================
+ Coverage   97.70%   98.11%   +0.40%
==========================================
  Files           8        9       +1
  Lines         131      159      +28
==========================================
+ Hits          128      156      +28
  Misses          3        3

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


fix(cli): always run in ts-node

:tada: This PR is included in version 1.32.9 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket: