Update GH Actions and CodeCov

This PR:

Adds a list of file change event triggers to build_and_test.yml so that those tests only run when one of those files is changed.
Updates the codecov GH Action to version 4 and adds a secret token.
Adds a list of file change event triggers to deploy_docs.yml and docs_check.yml, and limits docs_check.yml to only run on pull requests.

cc: @jdebacker @talumbau

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

Project coverage is 73.40%. Comparing base (8f25b15) to head (1b3d842).

Additional details and impacted files

@@            Coverage Diff             @@
##           master     #922      +/-   ##
==========================================
- Coverage   73.44%   73.40%   -0.05%
==========================================
  Files          19       19
  Lines        4610     4588      -22
==========================================
- Hits         3386     3368      -18
+ Misses       1224     1220       -4

Flag
Coverage Δ

unittests
73.40% <ø> (-0.05%)
:arrow_down:

Flags with carried forward coverage won't be shown. Click here to find out more.
see 11 files with indirect coverage changes

@jdebacker @talumbau . I reran all the failed jobs, and Linux Python 3.9 passed with no dask concurrent futures error. On this second round, it was Mac Python 3.11 that failed. So I have rerun the jobs again to see if they will pass. My guess is that they will. But this is at least as annoying as the Codecov issue that this PR fixes.

@rickecon Yes, perhaps we should drop at least the 3.9 tests. I think I'm ok with that.
But I do also think we should minimize running tests when not needed.  Here's what I posted over at the OG-USA that you might add to this PR:
Re my comments a few weeks ago about unnecessary compute time, from a read of the updated workflow docs, I think we should be able to condition tests to run only when relevant files are affected.
E.g., something like:
on:
  [push, pull_request]:
    paths:
      - './ogusa/**.py'
      -  './tests/**.py'

@jdebacker. I have removed the draft status of this PR and have made all the commits that I think this one needs. It is ready for your review and is ready to merge as soon as all the tests pass. I also have the full battery of tests running locally on my machine.

@jdebacker. This PR had a concurrent futures failure in test_SS.py. I reran the failed tests and got Linux Python 3.9, 3.10, and 3.11 to pass. I am rerunning these tests now to see if I can get more of them to pass. I suspect this is an issue that @talumbaugh's PRs may fix.

@jdebacker. All tests are passing now on GitHub. However, I had 20 tests fail on the full run of my local machine. Here are the results of my full set of local tests. 15 of these failures are  concurrent.futures._base.CancelledError, which may be a temporary dask issue, although I haven't seen these errors at this scale before. Of the remaining 5 errors, three are those test_txfunc.py tests that differ across machines (bad tests or bad code). And the other two are in test_demographics.py and may reflect the tests not being up-to-date with the updates we have made to the demographics.py module.
I am going to re-run these tests locally overnight tonight and see if the concurrent.futures errors go away.
(ogcore-dev) richardevans@Richards-MacBook-Pro-2 OG-Core % pytest
=================================================== test session starts ====================================================
platform darwin -- Python 3.11.8, pytest-8.1.1, pluggy-1.4.0
rootdir: /Users/richardevans/Docs/Economics/OSE/OG-Core
configfile: pytest.ini
testpaths: ./tests
plugins: cov-5.0.0, anyio-4.3.0, xdist-3.5.0
collected 536 items

tests/test_SS.py .............................F.....                                                                 [  6%]
tests/test_TPI.py ............F.....FFFF.FFFF                                                                        [ 11%]
tests/test_aggregates.py .....................................                                                       [ 18%]
tests/test_basic.py FF..                                                                                [ 19%]
tests/test_demographics.py .....F.F........                                                                          [ 22%]
tests/test_elliptical_u_est.py .......                                                                               [ 23%]
tests/test_execute.py F                                                                                [ 23%]
tests/test_firm.py .....................................................................                             [ 36%]
tests/test_fiscal.py ...................                                                                             [ 40%]
tests/test_household.py ..............................................                                               [ 48%]
tests/test_output_plots.py ..............................................                                            [ 57%]
tests/test_output_tables.py ..............                                                                           [ 59%]
tests/test_parameter_plots.py ........................................                                               [ 67%]
tests/test_parameter_tables.py .......                                                                               [ 68%]
tests/test_parameters.py ..............                                                                              [ 71%]
tests/test_run_example.py ..                                                                                [ 71%]
tests/test_run_ogcore.py F                                                                                [ 71%]
tests/test_tax.py ......................................                                                             [ 78%]
tests/test_txfunc.py .....F.......F..........F.                                                                      [ 83%]
tests/test_user_inputs.py F........                                                                                [ 85%]
tests/test_utils.py ..............................................................................                   [100%]
================================================= short test summary info ==================================================
FAILED tests/test_SS.py::test_run_SS[Reform, use zeta] - concurrent.futures._base.CancelledError: root-055b8346-ccbd-47e5-bfe3-52a3eeae7987
FAILED tests/test_TPI.py::test_run_TPI_full_run[Baseline, small open some periods] - concurrent.futures._base.CancelledError: root-4b9cc401-8c57-48a6-8ee6-d7e018084aa1
FAILED tests/test_TPI.py::test_run_TPI[Baseline] - concurrent.futures._base.CancelledError: root-320f378b-81e4-4ce3-9ca9-0dda61e4dd66
FAILED tests/test_TPI.py::test_run_TPI[Reform] - concurrent.futures._base.CancelledError: root-eea042f6-0281-411d-b0b2-cac372b0077e
FAILED tests/test_TPI.py::test_run_TPI_extra[Baseline, balanced budget] - concurrent.futures._base.CancelledError: root-e5df3b8e-0b98-49c2-ac0e-db5bdfe45e99
FAILED tests/test_TPI.py::test_run_TPI_extra[Baseline, small open] - concurrent.futures._base.CancelledError: root-6edb82fb-402b-41bd-9e2a-42b091bb8bb3
FAILED tests/test_TPI.py::test_run_TPI_extra[Baseline, delta_tau = 0] - concurrent.futures._base.CancelledError: root-2dd87d34-03b2-4ee0-af2b-84f94b4f752a
FAILED tests/test_TPI.py::test_run_TPI_extra[Baseline] - concurrent.futures._base.CancelledError: root-87f6771f-58ab-4a9d-97ce-db4368458d5b
FAILED tests/test_TPI.py::test_run_TPI_extra[Reform, baseline spending] - concurrent.futures._base.CancelledError: root-f29bfc5f-2d2d-4969-b6ae-6857e557b5ea
FAILED tests/test_TPI.py::test_run_TPI_extra[Baseline, Kg>0] - concurrent.futures._base.CancelledError: root-4f4c1d44-ca78-44b9-934e-965647a9c682
FAILED tests/test_basic.py::test_run_small[SS] - concurrent.futures._base.CancelledError: root-bbd4ff45-00bd-445f-922d-8066481e63b3
FAILED tests/test_basic.py::test_run_small[TPI] - concurrent.futures._base.CancelledError: root-218a4746-4b97-409a-8f6f-75c409a4d9ab
FAILED tests/test_demographics.py::test_get_fert - TypeError: unsupported operand type(s) for -: 'list' and 'int'
FAILED tests/test_demographics.py::test_infant_mort - assert array([0.00477758]) == 0.00491958
FAILED tests/test_execute.py::test_runner_baseline_reform - concurrent.futures._base.CancelledError: root-e821f6ba-3211-45d0-ae77-5e993d502e4d
FAILED tests/test_run_ogcore.py::test_run_micro_macro - concurrent.futures._base.CancelledError: root-f59b0866-3ecf-4b89-8442-778aa623dfb6
FAILED tests/test_txfunc.py::test_txfunc_est[DEP] - assert False
FAILED tests/test_txfunc.py::test_tax_func_loop - assert False
FAILED tests/test_txfunc.py::test_tax_func_estimate - assert False
FAILED tests/test_user_inputs.py::test_frisch[Frisch 0.32] - concurrent.futures._base.CancelledError: root-6073dc31-f57a-4ebe-93a9-f4c02a53fc56
=============================== 20 failed, 516 passed, 15179 warnings in 26276.40s (7:17:56) ===============================

Here is the full traceback of the first test_SS.py concurrent.futures error.
______________________________________________ test_run_SS[Reform, use zeta] _______________________________________________

tmpdir = local('/private/var/folders/d4/trj3dssd6s3g8kxvjmczz11w0000gn/T/pytest-of-richardevans/pytest-0/test_run_SS_Reform__use_zeta_0')
baseline = False, param_updates = {'initial_guess_TR_SS': 0.06, 'initial_guess_r_SS': 0.06, 'use_zeta': True}
filename = 'run_SS_reform_use_zeta.pkl'
dask_client = <Client: 'tcp://<IP_ADDRESS>:60025' processes=7 threads=14, memory=64.00 GiB>

    @pytest.mark.parametrize(
        "baseline,param_updates,filename",
        [
            (True, param_updates1, filename1),
            (False, param_updates9, filename9),
            (True, param_updates2, filename2),
            (False, param_updates10, filename10),
            (True, param_updates3, filename3),
            # (True, param_updates4, filename4),
            (False, param_updates5, filename5),
            (False, param_updates6, filename6),
            (False, param_updates7, filename7),
            # (False, param_updates8, filename8),
            (False, param_updates11, filename11),
            (True, param_updates12, filename12),
            (True, param_updates13, filename13),
            (True, param_updates14, filename14),
        ],
        ids=[
            "Baseline",
            "Reform, baseline spending",
            "Baseline, use zeta",
            "Reform, baseline spending, use zeta",
            "Baseline, small open",
            # "Baseline, small open use zeta",
            "Reform",
            "Reform, use zeta",
            "Reform, small open",
            # "Reform, small open use zeta",
            "Reform, delta_tau=0",
            "Baseline, non-zero Kg",
            "Baseline, M=3, non-zero Kg",
            "Baseline, M=3, zero Kg",
        ],
    )
    @pytest.mark.local
    def test_run_SS(tmpdir, baseline, param_updates, filename, dask_client):
        # Test SS.run_SS function.  Provide inputs to function and
        # ensure that output returned matches what it has been before.

K_d has negative elements. Setting them positive to prevent NAN.
GE loop errors =  [0.20734268432167868, 0.22057035696032112, -0.5360365211086738, 0.0, -0.3575103674688288, -0.12207799142791351, -0.032175933072194594, 0.14829677948467448]
K_d has negative elements. Setting them positive to prevent NAN.
  The test is that given
        inputs from previous run, the outputs are unchanged.
        """
        micro_data = utils.safe_read_pickle(
            os.path.join(CUR_PATH, "test_io_data", "micro_data_dict_for_tests.pkl")
        )
        s = 80
        t = 2030
        df = txfunc.tax_data_sample(micro_data[str(t)])
        output_dir = tmpdir
        # Put old df variables into new df var names
        df.rename(
            columns={
                "MTR labor income": "mtr_labinc",
                "MTR capital income": "mtr_capinc",
                "Total labor income": "total_labinc",
                "Total capital income": "total_capinc",
                "ETR": "etr",
                "expanded_income": "market_income",
                "Weights": "weight",
            },
            inplace=True,
        )
        test_tuple = txfunc.txfunc_est(
            df, s, t, rate_type, tax_func_type, numparams, output_dir, True
        )

        for i, v in enumerate(expected_tuple):
>           assert np.allclose(test_tuple[i], v)
E           assert False
E            +  where False = <function allclose at 0x10e8feab0>(array([2.27262567e-23, 6.52120583e-05, 2.58990603e-13, 5.79381098e-09,\n       3.37733247e-01, 8.00000000e-01, 9.14366590e-01, 9.02760087e-06,\n       9.02760087e-06, 3.37724219e-03, 7.99990972e-03, 9.02760087e-06]), array([2.27262567e-23, 6.52115408e-05, 2.58988624e-13, 5.79701075e-09,\n       3.39354147e-01, 7.60132613e-01, 9.14365331e-01, 9.02760087e-06,\n       9.02760087e-06, 3.39345119e-03, 7.60123585e-03, 9.02760087e-06]))
E            +    where <function allclose at 0x10e8feab0> = np.allclose

tests/test_txfunc.py:253: AssertionError
____________________________________________________ test_tax_func_loop ____________________________________________________

    @pytest.mark.local
    # mark as local run since results work on Mac, but differ on other
    # platforms
    def test_tax_func_loop():
        """
        Test txfunc.tax_func_loop() function. The test is that given inputs from
        previous run, the outputs are unchanged.
        """
        input_tuple = decompress_pickle(
            os.path.join(
                CUR_PATH, "test_io_data", "tax_func_loop_inputs_large.pbz2"
            )
        )
        (
            t,
            micro_data,
            beg_yr,
            s_min,
            s_max,
            age_specific,
            analytical_mtrs,
            desc_data,
            graph_data,
            graph_est,
            output_dir,
            numparams,
            tpers,
        ) = input_tuple
        tax_func_type = "DEP"
        # Rename and create vars to suit new micro_data var names
        micro_data["total_labinc"] = (
            micro_data["Wage income"] + micro_data["SE income"]
        )
        micro_data["etr"] = (
            micro_data["Total tax liability"] / micro_data["Adjusted total income"]
        )
        micro_data["total_capinc"] = (
            micro_data["Adjusted total income"] - micro_data["total_labinc"]
        )
        # use weighted avg for MTR labor - abs value because
        # SE income may be negative
        micro_data["mtr_labinc"] = micro_data["MTR wage income"] * (
            micro_data["Wage income"]
            / (micro_data["Wage income"].abs() + micro_data["SE income"].abs())
        ) + micro_data["MTR SE income"] * (
            micro_data["SE income"].abs()
            / (micro_data["Wage income"].abs() + micro_data["SE income"].abs())
        )
        micro_data.rename(
            columns={
                "Adjusted total income": "market_income",
                "MTR capital income": "mtr_capinc",
                "Total tax liability": "total_tax_liab",
                "Year": "year",
                "Age": "age",
                "expanded_income": "market_income",
                "Weights": "weight",
            },
            inplace=True,
        )
        micro_data["payroll_tax_liab"] = 0
        test_tuple = txfunc.tax_func_loop(
            t,
            micro_data,
            beg_yr,
            s_min,
            s_max,
            age_specific,
            tax_func_type,
            analytical_mtrs,
            desc_data,
            graph_data,
            graph_est,
            output_dir,
            numparams,
        )

        expected_tuple = utils.safe_read_pickle(
            os.path.join(CUR_PATH, "test_io_data", "tax_func_loop_outputs.pkl")
        )

        for i, v in enumerate(expected_tuple):
            if isinstance(test_tuple[i], list):
                test_tuple_obj = np.array(test_tuple[i])
                exp_tuple_obj = np.array(expected_tuple[i])
                print(
                    "For element",
                    i,
                    ", diff =",
                    np.absolute(test_tuple_obj - exp_tuple_obj).max(),
                )
            else:
                print(
                    "For element",
                    i,
                    ", diff =",
                    np.absolute(test_tuple[i] - v).max(),
                )
>           assert np.allclose(test_tuple[i], v, atol=1e-06)
E           assert False
E            +  where False = <function allclose at 0x10e8feab0>([array([2.55264562e-22, 3.51268116e-05, 3.98196664e-09, 2.22091644e-04,\n       2.94518504e-01, 1.10154861e-03, 1.00000...5296e-01, 1.00000000e+00, 1.01110118e-03,\n       1.01110118e-03, 2.86635079e-03, 1.64414195e-03, 1.01110118e-03]), ...], [array([2.55264562e-22, 3.51268127e-05, 3.88349581e-09, 1.86048713e-04,\n       2.94518501e-01, 1.10154861e-03, 1.00000...0733e-01, 1.00000000e+00, 1.01110118e-03,\n       1.01110118e-03, 2.86635057e-03, 1.67539632e-03, 1.01110118e-03]), ...], atol=1e-06)
E            +    where <function allclose at 0x10e8feab0> = np.allclose

tests/test_txfunc.py:434: AssertionError
--------------------------------------------------- Captured stdout call ---------------------------------------------------
Year= 2025 Age= 21
Year= 2025 Age= 22
Year= 2025 Age= 23
Year= 2025 Age= 24
Year= 2025 Age= 25
Year= 2025 Age= 26
Year= 2025 Age= 27
Year= 2025 Age= 28
Year= 2025 Age= 29
Year= 2025 Age= 30
Year= 2025 Age= 31
Year= 2025 Age= 32
Year= 2025 Age= 33
Year= 2025 Age= 34
Year= 2025 Age= 35
Year= 2025 Age= 36
Year= 2025 Age= 37
Year= 2025 Age= 38
Year= 2025 Age= 39
Year= 2025 Age= 40
Year= 2025 Age= 41
Year= 2025 Age= 42
Year= 2025 Age= 43
Year= 2025 Age= 44
Year= 2025 Age= 45
Year= 2025 Age= 46
Year= 2025 Age= 47
Year= 2025 Age= 48
Year= 2025 Age= 49
Year= 2025 Age= 50
Year= 2025 Age= 51
Year= 2025 Age= 52
Year= 2025 Age= 53
Year= 2025 Age= 54
Year= 2025 Age= 55
Year= 2025 Age= 56
Year= 2025 Age= 57
Year= 2025 Age= 58
Year= 2025 Age= 59
Year= 2025 Age= 60
Year= 2025 Age= 61
Year= 2025 Age= 62
Year= 2025 Age= 63
Year= 2025 Age= 64
Year= 2025 Age= 65
Year= 2025 Age= 66
Year= 2025 Age= 67
Year= 2025 Age= 68
Year= 2025 Age= 69
Year= 2025 Age= 70
Year= 2025 Age= 71
Year= 2025 Age= 72
Year= 2025 Age= 73
Year= 2025 Age= 74
Year= 2025 Age= 75
Year= 2025 Age= 76
Year= 2025 Age= 77
Year= 2025 Age= 78
Year= 2025 Age= 79
Year= 2025 Age= 80
Year= 2025 Age= 81
Insuff. sample size for age 81 in year 2025
Year= 2025 Age= 82
Insuff. sample size for age 82 in year 2025
Year= 2025 Age= 83
Insuff. sample size for age 83 in year 2025
Year= 2025 Age= 84
Insuff. sample size for age 84 in year 2025
Year= 2025 Age= 85
Linearly interpolate previous blank tax functions
Fill in all remaining old age tax functions.
For element 0 , diff = 0.0
For element 1 , diff = 0.0
For element 2 , diff = 0.0
For element 3 , diff = 0.0
For element 4 , diff = 0.0
For element 5 , diff = 0.0
For element 6 , diff = 0.0
For element 7 , diff = 6.6615927808126045
__________________________________________________ test_tax_func_estimate __________________________________________________

tmpdir = local('/private/var/folders/d4/trj3dssd6s3g8kxvjmczz11w0000gn/T/pytest-of-richardevans/pytest-0/test_tax_func_estimate0')
dask_client = <Client: 'tcp://<IP_ADDRESS>:61381' processes=2 threads=4, memory=64.00 GiB>

    @pytest.mark.local
    def test_tax_func_estimate(tmpdir, dask_client):
        """
        Test txfunc.tax_func_loop() function.  The test is that given
        inputs from previous run, the outputs are unchanged.
        """
        input_tuple = utils.safe_read_pickle(
            os.path.join(CUR_PATH, "test_io_data", "tax_func_estimate_inputs.pkl")
        )
        micro_data = utils.safe_read_pickle(
            os.path.join(CUR_PATH, "test_io_data", "micro_data_dict_for_tests.pkl")
        )
        (
            BW,
            S,
            starting_age,
            ending_age,
            beg_yr,
            baseline,
            analytical_mtrs,
            age_specific,
            reform,
            data,
            client,
            num_workers,
        ) = input_tuple
        tax_func_type = "DEP"
        age_specific = False
        BW = 1
        test_path = os.path.join(tmpdir, "test_out.pkl")
        test_dict = txfunc.tax_func_estimate(
            micro_data,
            BW,
            S,
            starting_age,
            ending_age,
            start_year=2030,
            baseline=baseline,
            analytical_mtrs=analytical_mtrs,
            tax_func_type=tax_func_type,
            age_specific=age_specific,
            reform=reform,
            data=data,
            client=dask_client,
            num_workers=NUM_WORKERS,
            tax_func_path=test_path,
        )
        expected_dict = utils.safe_read_pickle(
            os.path.join(CUR_PATH, "test_io_data", "tax_func_estimate_outputs.pkl")
        )
        del expected_dict["tfunc_time"]

        for k, v in expected_dict.items():
            if isinstance(v, str):  # for testing tax_func_type object
                assert test_dict[k] == v
            elif isinstance(expected_dict[k], list):
                test_dict_obj = np.array(test_dict[k])
                exp_dict_obj = np.array(expected_dict[k])
                print(
                    "For element",
                    k,
                    ", diff =",
                    np.absolute(test_dict_obj - exp_dict_obj).max(),
                )
            else:  # for testing all other objects
                print(
                    "Max diff for ", k, " = ", np.absolute(test_dict[k] - v).max()
                )
>               assert np.all(np.isclose(test_dict[k], v))
E               assert False
E                +  where False = <function all at 0x10e8e6530>(array([[ True,  True,  True,  True,  True,  True,  True,  True,  True,\n         True,  True,  True,  True,  True,  Tru...rue,  True,  True,  True,  True,  True,  True,  True,\n         True,  True,  True,  True,  True,  True,  True,  True]]))
E                +    where <function all at 0x10e8e6530> = np.all
E                +    and   array([[ True,  True,  True,  True,  True,  True,  True,  True,  True,\n         True,  True,  True,  True,  True,  Tru...rue,  True,  True,  True,  True,  True,  True,  True,\n         True,  True,  True,  True,  True,  True,  True,  True]]) = <function isclose at 0x10e8febb0>(array([[     0.        ,      0.        ,      0.        ,\n             0.        ,      0.        ,      0.        ,\n...     0.        ,\n             0.        ,      0.        ,      0.        ,\n             0.        ,      0.        ]]), array([[     0.        ,      0.        ,      0.        ,\n             0.        ,      0.        ,      0.        ,\n...     0.        ,\n             0.        ,      0.        ,      0.        ,\n             0.        ,      0.        ]]))
E                +      where <function isclose at 0x10e8febb0> = np.isclose

tests/test_txfunc.py:722: AssertionError
---------------------------------------------------- Captured log setup ----------------------------------------------------
INFO     distributed.scheduler:scheduler.py:1711 State start
INFO     distributed.scheduler:scheduler.py:4072   Scheduler at:     tcp://<IP_ADDRESS>:61381
INFO     distributed.scheduler:scheduler.py:4087   dashboard at:  http://<IP_ADDRESS>:8787/status
INFO     distributed.scheduler:scheduler.py:7872 Registering Worker plugin shuffle
INFO     distributed.nanny:nanny.py:368         Start Nanny at: 'tcp://<IP_ADDRESS>:61384'
INFO     distributed.nanny:nanny.py:368         Start Nanny at: 'tcp://<IP_ADDRESS>:61386'
INFO     distributed.scheduler:scheduler.py:4424 Register worker <WorkerState 'tcp://<IP_ADDRESS>:61388', name: 0, status: init, memory: 0, processing: 0>
INFO     distributed.scheduler:scheduler.py:5932 Starting worker compute stream, tcp://<IP_ADDRESS>:61388
INFO     distributed.core:core.py:1019 Starting established connection to tcp://<IP_ADDRESS>:61390
INFO     distributed.scheduler:scheduler.py:4424 Register worker <WorkerState 'tcp://<IP_ADDRESS>:61391', name: 1, status: init, memory: 0, processing: 0>
INFO     distributed.scheduler:scheduler.py:5932 Starting worker compute stream, tcp://<IP_ADDRESS>:61391
INFO     distributed.core:core.py:1019 Starting established connection to tcp://<IP_ADDRESS>:61393
INFO     distributed.scheduler:scheduler.py:5689 Receive client connection: Client-5d9430b0-f94d-11ee-aa00-3e0b0b363548
INFO     distributed.core:core.py:1019 Starting established connection to tcp://<IP_ADDRESS>:61394
--------------------------------------------------- Captured stdout call ---------------------------------------------------
BW =  1 begin year =  2030 end year =  2030
Finished tax function loop through 1 years and 1 ages per year.
Tax function estimation time: 46.815 sec
For element tfunc_etr_params_S , diff = 0.03986738741392759
For element tfunc_mtrx_params_S , diff = 5.2194314981157675e-09
For element tfunc_mtry_params_S , diff = 0.25037693709098546
Max diff for  tfunc_avginc  =  0.0
Max diff for  tfunc_avg_etr  =  0.0
Max diff for  tfunc_avg_mtrx  =  0.0
Max diff for  tfunc_avg_mtry  =  0.0
Max diff for  tfunc_frac_tax_payroll  =  0.0
Max diff for  tfunc_etr_sumsq  =  0.008424060302786529
Max diff for  tfunc_mtrx_sumsq  =  0.0
Max diff for  tfunc_mtry_sumsq  =  25.278880264493637

@jdebacker. I re-ran all the tests on my machine locally, and I got 17 errors instead of the previous 20. There were three fewer concurrent.futures errors. But still had the same two errors in test_demographics.py and three errors in test_txfunc.py. It is also interesting to note that I get a different set of concurrent.futures test failures in this run, than I did in my last run. Compare, in particular, the failures in test_SS.py, test_TPI.py, test_run_example.py, and test_run_ogcore.py.
(ogcore-dev) richardevans@Richards-MacBook-Pro-2 OG-Core % pytest
=========================================== test session starts ===========================================
platform darwin -- Python 3.11.8, pytest-8.1.1, pluggy-1.4.0
rootdir: /Users/richardevans/Docs/Economics/OSE/OG-Core
configfile: pytest.ini
testpaths: ./tests
plugins: cov-5.0.0, anyio-4.3.0, xdist-3.5.0
collected 536 items

tests/test_SS.py ...................................                                                [  6%]
tests/test_TPI.py ..................FFFFFF.F.                                                       [ 11%]
tests/test_aggregates.py .....................................                                      [ 18%]
tests/test_basic.py FF..                                                                            [ 19%]
tests/test_demographics.py .....F.F........                                                         [ 22%]
tests/test_elliptical_u_est.py .......                                                              [ 23%]
tests/test_execute.py F                                                                             [ 23%]
tests/test_firm.py .....................................................................            [ 36%]
tests/test_fiscal.py ...................                                                            [ 40%]
tests/test_household.py ..............................................                              [ 48%]
tests/test_output_plots.py ..............................................                           [ 57%]
tests/test_output_tables.py ..............                                                          [ 59%]
tests/test_parameter_plots.py ........................................                              [ 67%]
tests/test_parameter_tables.py .......                                                              [ 68%]
tests/test_parameters.py ..............                                                             [ 71%]
tests/test_run_example.py F.                                                                        [ 71%]
tests/test_run_ogcore.py F                                                                          [ 71%]
tests/test_tax.py ......................................                                            [ 78%]
tests/test_txfunc.py .....F.......F..........F.                                                     [ 83%]
tests/test_user_inputs.py .........                                                                 [ 85%]
tests/test_utils.py ..............................................................................  [100%]
========================================= short test summary info =========================================
FAILED tests/test_TPI.py::test_run_TPI[Baseline] - concurrent.futures._base.CancelledError: root-8b86c093-667b-4bb8-82ea-4e3a22e9d6ea
FAILED tests/test_TPI.py::test_run_TPI[Reform] - concurrent.futures._base.CancelledError: root-eb454283-2afb-453c-98b5-8fa8c4a93064
FAILED tests/test_TPI.py::test_run_TPI_extra[Baseline, balanced budget] - concurrent.futures._base.CancelledError: root-156f3675-4f08-4f67-8118-ac5e3f1d93c5
FAILED tests/test_TPI.py::test_run_TPI_extra[Baseline, small open] - concurrent.futures._base.CancelledError: root-6bc14d86-25c8-41ca-862f-2b12f6311397
FAILED tests/test_TPI.py::test_run_TPI_extra[Baseline, small open for some periods] - concurrent.futures._base.CancelledError: root-a18edfcc-8871-4069-9b2c-ac9b0fb7e2a2
FAILED tests/test_TPI.py::test_run_TPI_extra[Baseline, delta_tau = 0] - concurrent.futures._base.CancelledError: root-80cb87f4-7bbb-4f30-8624-bc218371d1de
FAILED tests/test_TPI.py::test_run_TPI_extra[Reform, baseline spending] - concurrent.futures._base.CancelledError: root-eaadc23f-4e2c-4635-b148-3f7b6ba51596
FAILED tests/test_basic.py::test_run_small[SS] - concurrent.futures._base.CancelledError: root-99ce897a-c277-42f9-ba6d-1bfae4c031f9
FAILED tests/test_basic.py::test_run_small[TPI] - concurrent.futures._base.CancelledError: root-b611f50d-cdfb-48e6-81fd-3789ea6af8dd
FAILED tests/test_demographics.py::test_get_fert - TypeError: unsupported operand type(s) for -: 'list' and 'int'
FAILED tests/test_demographics.py::test_infant_mort - assert array([0.00477758]) == 0.00491958
FAILED tests/test_execute.py::test_runner_baseline_reform - concurrent.futures._base.CancelledError: root-1008377b-f217-42f5-94f8-cc748698ae02
FAILED tests/test_run_example.py::test_run_ogcore_example - assert False
FAILED tests/test_run_ogcore.py::test_run_micro_macro - concurrent.futures._base.CancelledError: root-1e84ff5a-01e1-4604-aee2-e81f5d20f95d
FAILED tests/test_txfunc.py::test_txfunc_est[DEP] - assert False
FAILED tests/test_txfunc.py::test_tax_func_loop - assert False
FAILED tests/test_txfunc.py::test_tax_func_estimate - assert False
====================== 17 failed, 519 passed, 15449 warnings in 25832.94s (7:10:32) =======================

@jdebacker. I recommend we:

Merge this PR.
Fix the five real test failures in test_demographics.py and test_txfunc.py.
Work on memory management as a fix for the concurrent.futures failures.

@rickecon thank you for these updates! Merging.


Allow invoking a menu action by index.

@cnjinhao I think I need your input on this. Following the hint I was given on issue #525 I tried to add shortcuts to my menu but that created lots of code duplication. For example:
my_menubar.at(0).append("E&xit", [](nana::menu::item_proxy&){nana::API::exit();});
my_form.keyboard_accelerator(accel, [](){nana::API::exit();});

Since the functor signature is different it's quite hard to re-use the same functor. So now if I want to show an "Are you sure?" dialog I have to remember to do it in two places and create clutter. I'm sure we agree on the problem here.
My idea then was to be able to do this:
template <typename F>
void append_to_menu (nana::form& owner, nana::menu& menu, const std::string& text, const F& func, nana::accel_key accel) {
    menu.append(text, func);
    owner.keyboard_accelerator(accel, [&menu,idx=menu.size()-1](){menu.invoke(idx);});
}

but I obviously need to be able to trigger the menu entry functor from outside. My code above works form my simple case (with the changes from this PR) but I'm not too sure about my invoke() implementation. For example I'm not sure it will work for submenus. What are your thoughts? Was there such a feature already? If not, how can I improve my PR?

On a second thought I think I realise this is a hackish solution.
menu::append() should really accept an accel_key, but I don't know how to retrieve the top-level form from a menu object to register the accel key. Also, I think nana::form code is missing a remove method, because if you remove an entry from a menu then the corresponding shortcut should also be removed from the form.

menu::append() should really accept an accel_key

I agree on this approach. I think we should implement it in version 1.8


bolt publish command tries to publish private packages

Title
Description

Version
0.20.0

Type
Bug

node
8.10.0

Operating System
MacOS

Short Description
publish command tries to publish private packages

Detailed description
another variable is used here https://github.com/boltpkg/bolt/blob/master/src/commands/publish.js#L86 and in the next line

It should be "publicPackages".

BTW Why didn't eslint detect unsed variable?
Symptoms in logs:
$ npm publish --access public npm
$ npm publish --access public  ERR! This package has been marked as private
$ npm publish --access public npm ERR! Remove the 'private' field from the package.json to publish it.

O.o
If I'm not mistaken eslint isn't used in this repo, but interesting there was no typing issues using an undefined variable... I'll take a look after the weekend if you like

Oh, this was fixed btw.
Thanks for reportimg


release: push scorecard-test-kuttl images on scorecard-kuttl/v* tags

Description of the change:

.github/workflows: release scorecard-test-kuttl images on scorecard-kuttl/v* tags, and only run image deploy jobs for code changes and appropriate tag patterns

Motivation for the change: breaking changes to kuttl happen, and the accepted solution is to version the scorecard-test-kuttl version independently, starting at v2.0.0 (see #4557 for details). Releases will be tagged with scorecard-kuttl/vX.Y.Z. operator-sdk releases will still have tags like vA.B.C, but will not cause scorecard-test-kuttl images to be published.
Checklist
If the pull request includes user-facing changes, extra documentation is required:

[ ] Add a new changelog fragment in changelog/fragments (see changelog/fragments/00-template.yaml)
[ ] Add or update relevant sections of the docs website in website/content/en/docs

Testing this on my fork. Will post a test run when complete.

Successful builds:

master: https://github.com/estroz/operator-sdk/actions/runs/641130830
tag scorecard-kuttl/v2.0.0: https://github.com/estroz/operator-sdk/actions/runs/641131181

@camilamacedo86 because the next release of this image will contain a breaking change, thus it cannot be in v1.

/retest


xrdp memory growth is particularly fast when using VPN proxies

Hi,
Memory has been growing rapidly with VPNS, especially for batch operations or video playback.

I don't think VPNs matter but can you confirm it reproduces also without VPN?

I can confirm that the memory is stable without VPN

Possibly a duplicate of #1634


Fixing conflicting params in default_args

I can take a shot a writing a test case for this today.

Teamwork!


configurable RequestWrapper for "requests" and "urllib2"

Motivation

I want to be able to customize HTTP client span's operation_name
A good way I can think of is to overwrite AbstractRequestWrapper.operation

What this PR does

parametize RequestWrapper for client_hooks.requests and client_hooks.urllib2. So that we can do the following

from opentracing_instrumentation.client_hooks import requests

class MyWrapper(requests.DefaultRequestWrapper):

    @property
    def operation(self):
        return '{} {}'.format(self.method, self.full_url)

requests.install_patches(RequestWrapper=MyWrapper)

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

Coverage decreased (-0.06%) to 73.477% when pulling d71da757241c0ba3454668108a1b16680ebbae80 on lpan:lpan/configure-request-wrapper into e8507e7254ef2cbedfd320836755cf1b3943b09e on uber-common:master.


active_record finders ignores STI class

If single table inheritance is used on the back end, hyper-mesh won't instantiate the correct subclass, only ever the parent class.
# field.string :type
class User < ActiveRecord
  def self.meaningful
    find(42)
  end
end

class Employer < User
end

Employer.create.id # 42
Employer.meaningful.class #=> User (should be Employer)
User.meaningful.class #=> User (should also be Employer!)

The AR method becomes should also be added to allow switching class:
User.find.becomes(User)
Employer.find.becomes(User)

Basically Rails always automatically converts into the most specific STI sub-class.
Fairly sure this will fix #38 too

I've found 2 places in the code where the class is changing to the superclass.
Wrong self in finders
https://github.com/ruby-hyperloop/hyper-mesh/blob/5e811858548f31a73a33e3e856e65c97b57c20e8/lib/reactive_record/active_record/class_methods.rb#L45
Instance eval changes self so you're not passing in the self you might think. Easy fix:
def find(id)
  base_class.instance_eval {ReactiveRecord::Base.find(self, primary_key, id)}
end

base_class used unnecessarily
https://github.com/ruby-hyperloop/hyper-mesh/blob/5e811858548f31a73a33e3e856e65c97b57c20e8/lib/reactive_record/active_record/class_methods.rb#L5-L18
I assume there's a reason why base_class is used all over the place. But it does what it says and gives you the superclass so you loose access to the methods in the actual model you're trying to use. I don't see why base_class is necessary at all, as with inheritance all the superclass methods are available in the child. And if you're able to call base_class then you must have inherited from Base so there's no point checking this condition.
Maybe there's another kind of AR internals object that you can end up with where it's necessary to call superclass to get something useful? But checking for those edge cases might be better than always calling base_class.
Redefining base class to return self seems to work fine. Async loading and saving on the client works in STI models.
def base_class
  self
end

Alternative - remove calls to base_class
https://github.com/ruby-hyperloop/hyper-mesh/blob/5e811858548f31a73a33e3e856e65c97b57c20e8/lib/reactive_record/active_record/reactive_record/base.rb#L78
Commenting out model = model.base_class has the same effect as redefining it. So if there are places when base_class is actually needed to do it's thing then they could be left in and everywhere else removed.
Alternative - use always assignment
https://github.com/ruby-hyperloop/hyper-mesh/blob/5e811858548f31a73a33e3e856e65c97b57c20e8/lib/reactive_record/active_record/reactive_record/base.rb#L97
Without the base_class fix the model is initially memoized as User and then the server correctly returns Employer but it's never updated. Changing this to a regular assignment updates the class correctly but doesn't help with the initial page load and is probably undesirable for caching reasons.
TLDR monkeypatch
The below patch got STI models working correctly for me. The model starts of as Employer and stays that way. So far it doesn't seem to have broken anything else but probably has as I don't know what the reason behind base_class really is.
if RUBY_ENGINE == "opal"
  module ActiveRecord
    module ClassMethods
      def base_class
        self
      end

      def find(id)
        clss = self # instance_eval changes self
        base_class.instance_eval do
          ReactiveRecord::Base.find(clss, primary_key, id)
        end
      end
    end
  end
end


Add edges to device

Closes #3696

Updated the function name to edge_set() because there was a conflicting edges property in graph_device. There is already a qubit_set() function, so following that precedent with the new name.

+1 using a name other than "edges"

What would be better here? The tuple implementation I had first is error prone because tuples are not symmetric. The implementation with the custom QidPair is symmetric but then the question was raised about whether that's a valid assumption for all devices.
Should we go with a third option, which is back to using tuples, but have both orderings be emitted instead of just one? That would double the output size but allow for directional edges if needed.
Per 3+ qubit gates, I don't think this is where that functionality would go. Once you have the two gate edges, you can feed those into some external function to extract n-gate sequences. I'd say that should be external to the device code. Unless there's something specific about devices and what edges are n-qubit capable?

I don't think any of my questions should be seen as blockers. Just curious if you'd thought about any of them or had any thoughts.

Per 3+ qubit gates, I don't think this is where that functionality would go. Once you have the two gate edges, you can feed those into some external function to extract n-gate sequences. I'd say that should be external to the device code. Unless there's something specific about devices and what edges are n-qubit capable?

Yeah fair. Of course you can always dream up something crazy like if three qubits could do a toffli but you couldn't do a two-qubit interaction between any two of them.
QidPair is a nice addition for order-agnostic pairs. I suspect the main problem will be that there are many locations in the code where we technically should be using such a class but instead use a two-tuple.
For something actionable: I do think the name should be qubit_pairs and not anything to do with edges.

Sure, Balint said he wanted to take a look first and think about it, since
he opened the original issue. So I'll let this hang out here until then. No
rush.
On Wed, Apr 14, 2021 at 4:35 PM Matthew Harrigan @.***>
wrote:

I don't think any of my questions should be seen as blockers. Just curious
if you'd thought about any of them or had any thoughts.
Per 3+ qubit gates, I don't think this is where that functionality would
go. Once you have the two gate edges, you can feed those into some external
function to extract n-gate sequences. I'd say that should be external to
the device code. Unless there's something specific about devices and what
edges are n-qubit capable?
Yeah fair. Of course you can always dream up something crazy like if three
qubits could do a toffli but you couldn't do a two-qubit interaction
between any two of them.
QidPair is a nice addition for order-agnostic pairs. I suspect the main
problem will be that there are many locations in the code where we
technically should be using such a class but instead use a two-tuple.
For something actionable: I do think the name should be qubit_pairs and
not anything to do with edges.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/quantumlib/Cirq/pull/3993#issuecomment-819916481, or
unsubscribe
https://github.com/notifications/unsubscribe-auth/AAG464ISJTMAPOAWHJGNWBTTIYRELANCNFSM42MHYQ2Q
.

@balopat ping to look at this whenever you have time, no rush. I'm by no means attached to this PR so if you want to change it completely, or table it until some other things are settled just lmk.

Paging @balopat for review.


lib/lua: workaround builtins.match alias issue

A user has reported (https://github.com/nix-community/nixvim/pull/1760#issuecomment-2192066615) that with lib isn't bringing match into scope on in their flake. Odd, but we can fix by explicitly using builtins.match

I feel like an idiot... I still had my nixpkgs.url set to a fork from something I was doing a week ago to resolve a package build issue. I changed it back to unstable and it was fine...i only noticed it when i was adding the new codeium module and it was complaining about the pkg missing.

I changed it back to unstable and it was fine...

Thanks for confirming 😀
I'll close this then

I'm re-opening this because we've had additional reports and I can reproduce the issue with my own config.
I don't understand why, but this PR does fix the issue.

I'm re-opening this because we've had additional reports and I can reproduce the issue with my own config.
I don't understand why, but this PR does fix the issue.

It was confusing to me why it would have just magically went away with a different nixpkgs url too… lol


issue with recovery wallet with 81 seed

Issue description = issue with recovery wallet with 81 seed
Briefly describe the issue.
Wallet version
Which version of wallet are you using?

wallet version (version number, commit, or branch): 1.1.0

System specification
What is your operating system?
win 10
Is it a repeatable issue?
Yes
Steps To reproduce the issue
Explain how the maintainer can reproduce the issue.

i did copy and past my recovery seed (81 words)  and pushed Continue .but Appears this massage :
" try checking again. if you still can't find your balance you might have entered your seed incorrectly."

Expected behaviour
Describe what you expect to happen.
Actual behaviour
Describe what actually happens.
Errors
Paste any errors that you see from the Error Log in the Firefly menu or share screenshots of the issue.
Error Log is empty

Have the same problem. I am forced to migrate from tirnity wallet where can I perfectly see my balance to the new firefly wallet. Tried to export a seedvault from Trinity to Firefly but doesn´t work and my balance is still 0 and isn´t updated, tried to write manually the 81 characters of the wallet , but still appears the same problem

Same here... And I'm sure the seed is correct

@ArshaParsa @aramhakobyan66 @agutm Try clicking the "Check Again" button a few times as well. This button actually searches more addresses for funds, because it might be the case where your funds aren't on the 0th index.

Still 0... and it was on 0th index.
"accounts": {
"onboardingComplete": true,
"accountInfo": {
"AguWallet": {
"index": 0,
"meta": {
"type": "keychain",
"index": null,
"page": null,
"indexAddress": null
},
"addressData": [
{
"address": "LSJHAIYLJZNYQGIJBFHLYEXZWSJZ9VRNOUFVVNICRMCFMQTUKGIAGQUYFLRNKTRGVTFVPKTAEMGOVVYDD",
"index": 0,
"balance": 49450000,
"checksum": "FFPGTBWBX",
"spent": {
"local": false,
"remote": false
}
}

@agutm Maybe you are mixing something. For the migration of the ledger wallet you don´t need a 81 char seed. Did you migrate with the 81 char seed or with the ledger wallet?

@aramhakobyan66 @ArshaParsa Have you successfully migrated your tokens?

@MiKeF05 I don't even have a ledger, I just have the 81 char seed and a kdbx file, they both open the same wallet. It is in the 0 index and there are no others.

Okay. I checked the address and the tokens are still on that address in the legacy (old) network. If you open trinity you should see the balance and your seed. Please try to migrate this seed from trinity again and use the search again button until the balance appears in Firefly

@MiKeF05 Ok, thanks for checking. I actually can't access trinity, it was entirely disabled so I uninstalled it, it only allowed me to make a state export (I took the fragment above from there). Now I downloaded it again to try but it's the same... any ideas?
That button is disabled

@agutm Okay. Try to disable your internet connection and then try again. Normally you should be able to log in

@MiKeF05 Thanks, I don't know how I never tried that. Now I have another (and bigger imo) problem; there's only one address (0i) and it's one I've never seen. Sorry if I'm saying something obvious, I don't completely understand how iota works.

@agutm Okay. So basically on the legacy network you have a 81 char seed. To this seed there are connected severall addresses to receive and send tokens. To migrate your tokens you need the 81 char seed NOT the address. To get the seed you can go to your account -> account management -> view seed. This seed has a 3 char checksum. Maybe you had another account and seed where the address was connected to?

@MiKeF05 If you restore a wallet using the 81 char, for the next time does that 81 chars change? If yes, I'm screwed. I have only one seed and never used its tokens, I just read some time ago iota whitepaper and found tangle interesting :/ so I bought some because I saw potential in it. The only seed I have it's the one generated at the moment of creating the account, so if that seed changes, it got lost at the moment I reinstalled trinity (retarded choice)

@agutm No this seed doesn´t change if you only use this account.
Try to go to your account -> account management -> view seed in Trinity. Copy the seed and paste it in the migration process in Firefly. Then search the balance until it appears in Firefly. Then you can migrate your tokens to the new network.

@MiKeF05 No, I have 0i in trinity and that new address. If seed never change, something strange is happening.

It would be good to join the IOTA discord server and go to the #help channel. Otherwise it would be difficult to solve this issue.

Thanks for all, I'll continue there.


Add Disqus to a list of adapters

The list of hubot adapters in the hubot documentation is being replaced with a link to a GitHub topic search. Add the hubot-adapter topic to your repository on GitHub to include it in this list.
/cc https://github.com/github/hubot/pull/1320


Add spotify data team as code owner

Description

Add spotify data team as code owner
Motivation and Context

To make sure the team will get notified when there is a PR.
Have you tested this? If so, how?

N/A

CI failed with
======================================================================
ERROR: test_task_events (db_task_history_test.DbTaskHistoryTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/travis/build/spotify/luigi/test/db_task_history_test.py", line 61, in test_task_events
    self.assertEqual(len(task.events), 3)
  File "/home/travis/build/spotify/luigi/.tox/py37-core/lib/python3.7/site-packages/sqlalchemy/orm/attributes.py", line 449, in __get__
    return self.impl.get(state, dict_)
  File "/home/travis/build/spotify/luigi/.tox/py37-core/lib/python3.7/site-packages/sqlalchemy/orm/attributes.py", line 893, in get
    value = self.callable_(state, passive)
  File "/home/travis/build/spotify/luigi/.tox/py37-core/lib/python3.7/site-packages/sqlalchemy/orm/strategies.py", line 831, in _load_for_state
    % (orm_util.state_str(state), self.key)
sqlalchemy.orm.exc.DetachedInstanceError: Parent instance <TaskRecord at 0x7f4bb00fea20> is not bound to a Session; lazy load operation of attribute 'events' cannot proceed (Background on this error at: http://sqlalche.me/e/14/bhk3)

We will look into this.


Only isolates context

I added the ability to add only to a component to isolate the components context from the parent (similar to what django implements for include: https://docs.djangoproject.com/en/5.1/ref/templates/builtins/#include)
with a simple component:
simple.html
test
this component, with parent context {"class":"herebedragons"}
will render (as normal)
<c-simple /> as test
whereas
<c-simple only /> (with the same parent context {"class":"herebedragons"}) renders as test
I think the tests I added are sufficient but I'm not 100% sure.

Looks good, thanks - I will line up change to docs


#workspaces button.current_output does not appear to work

I am trying to use #workspaces button.current_output but it never has effect.  The  buttons which are on the current output never change the colors provided
config:
    "sway/workspaces": {
        "all-outputs": true,
	"persistent_workspaces": {
		"1": ["eDP-1"],
		"2": ["eDP-1"],
		"3": ["eDP-1"],
		"4": ["DP-5"],
		"5": ["DP-5"],
		"6": ["DP-5"],
		"7": ["DP-4"],
		"8": ["DP-4"],
		"9": ["DP-4"]
		},
        "disable-scroll": true,
       "format": "{icon}",
        "format-icons": {
            "1": "Ⅰ",
            "2": "Ⅱ",
            "3": "Ⅲ",
            "4": "Ⅳ",
            "5": "Ⅴ",
            "6": "Ⅵ",
            "7": "Ⅶ",
            "8": "Ⅷ",
            "9": "Ⅸ",
            "0": "Ⅹ",
            "urgent": "ↀ"
        }
    },

styles.css
#workspaces {
    margin: 0px;
    padding: 0px;
    padding-top: 2px;
    padding-right: 4px;
    padding-left: 4px;
    padding-bottom: 2px;
}

#workspaces button {
    /* To compensate for the top border and still have vertical centering */
    background-color: #000000;
    border: 3px outset #423E3E;
}

#workspaces button.focused {
    color: #000000;
    background-color: #423E3E;
    border: 3px inset #423E3E;
}

#workspaces button.urgent {
    border-color: #DB1D1D;
}

#workspaces button.visible
#workspaces button.persistent

#workspaces button.current_output {
    color: #ffffff;
    background-color: #00ff00;
    border: 3px inset #423E3E;
}

note:  I tried it with persistent_workspaces commented out just to be sure, but the issue persists

I'm really more interested in changing the background color, is that not possible?

I have three outputs.  I split my 9 workspaces across them with this config.  Three workspaces for each output.
~/.config/sway/workspaces
workspace 1 output eDP-1
workspace 2 output eDP-1
workspace 3 output eDP-1
workspace 4 output DP-5
workspace 5 output DP-5
workspace 6 output DP-5
workspace 7 output DP-4
workspace 8 output DP-4
workspace 9 output DP-4

I also use  persistent_workspaces in swaybar to match this configuration.
button
I setup my defaults with this
#workspaces {
    margin: 0px;
    padding: 0px;
    padding-top: 0px;
    padding-right: 0px;
    padding-left: 0px;
    padding-bottom: 0px;
}

#workspaces button {
    /* To compensate for the top border and still have vertical centering */
    background-color: #151515;
    border: 3px dashed #423E3E;
    padding-top: 0px;
    padding-right: 2px;
    padding-left: 2px;
    padding-bottom: 0px;
    color:#aaaaaa;

}

This creates a dotted line border around any workspaces not accounted for below with an almost invisible dark background.
button.current_output
The below CSS block colors the backgrounds of the buttons which represent the workspaces assigned to that output, and the result is different buttons styled for each monitor.
#workspaces button.current_output {
    background-color: #000000;
    border: 3px outset #423E3E;
}

On output eDP-1, buttons 1-3 have the background color.
On output DP-5, buttons 4-6 have the background color.
On output DP4, buttons 7-9 have the background color.
button.visible
Then I use the below block to change the background color of the workspaces which are actually visible on the outputs.
#workspaces button.visible {
    background-color: #0000ff;
    border: 3px outset #423E3E;
}

However this is kind of annoying/confusing because with 3 outputs there are three different buttons that look the same drawn on all of the bars, as opposed to just styling the workspace that is visible on the output being displayed in that bar.
button.persistent
I would had thought persistent would style workspaces which were configured in persistent_workspaces, but that is not what I have observed.   This background color is never applied to any bar on any output.
#workspaces button.persistent {
    background-color: #00ff00;
    border: 3px outset #423E3E;
}

button.focused
You said .focused is the workspace where an app has active focus, but with this block I never see that background color take effect.
Maybe .visible and .focused conflict and I need to disable .visible?
#workspaces button.focused {
    background-color: #ff0000;
    border: 3px outset #423E3E;
}

button.urgent
This one works as expect. No problems.

Very good thank you.
I spent my afternoon figuring these out too.  I had some observations that you may have noticed but didn't call out.
#workspaces button.persistent

Only applies if the workspace was populated at some point but is now empty.
This is what was eluding me before, as I have workspaces which start unpopulated and did not inherit this style they had been populated and then unpopulated
Something to do with  persistent_workspaces and/or my workspaces config perhaps?

#workspaces button.current_output label

You can set border and background-color which create a circular space around the text

#workspaces button.focused

Mentioned earlier, but not mentioned in your last comment.
I discovered you must  place this below button.visible or it will not apply.

I  didn't know there was a #workspaces button.current_output.focused.   I will play with that. :)


Error parsing enums during generate

I'm running: go run github.com/steebchen/prisma-client-go generate
This enum:
enum ServerOS {
  Unknown // corresponds to ServerOS_Unknown
  Linux // corresponds to ServerOS_Linux
  Windows // corresponds to ServerOS_Windows
  Mac // corresponds to ServerOS_Mac
}

Seems to be getting changed in the db_gen.go to ServerOs and it's causing me the following errors:
# my-lovely-project/db
db/db_gen.go:753:23: undefined: ServerOs
db/db_gen.go:4894:52: undefined: ServerOs
db/db_gen.go:4914:55: undefined: ServerOs
db/db_gen.go:4929:65: undefined: ServerOs
db/db_gen.go:4945:56: undefined: ServerOs
db/db_gen.go:4954:53: undefined: ServerOs
db/db_gen.go:4968:62: undefined: ServerOs
db/db_gen.go:4975:56: undefined: ServerOs
db/db_gen.go:4989:65: undefined: ServerOs
db/db_gen.go:4996:52: undefined: ServerOs
db/db_gen.go:4996:52: too many errors

At the minute I have a workaround, but I have to put this in a build step:
# Ensure db/db_gen.go is present and then apply the sed command to replace all occurrences
RUN if [ -f db/db_gen.go ]; then sed -i 's/ServerOs/ServerOS/g' db/db_gen.go; else echo "db/db_gen.go not found"; exit 1; fi

Thanks, fixed via https://github.com/steebchen/prisma-client-go/pull/1359 and release in v0.41.0

Thanks, fixed via #1359 and release in v0.41.0

Awesome thank you! 🎉


[Fix] no-unused-modules: make type imports mark a module as used

Fixes #1924
ExportMap now keeps track of each imported declaration (imports.get(path).declarations) and whether the declarations are only importing types (isOnlyImportingTypes). This is used by no-cycle to

ignore only type imports
report circular dependencies at the correct line

For example (from this existing test):
depth-zero.js
import { bar } from './flow-types-depth-one'

flow-types-depth-one.js
// @flow

// this import declaration doesn't trigger the rule because it's a type import
import type { FooType } from './flow-types-depth-two'
// this declaration does because of the 'bar' import, so the error message refers to this line
import { type BarType, bar } from './flow-types-depth-two'

export { bar }

flow-types-depth-two.js
import { foo } from './depth-one'

depth-one.js
import foo from './depth-zero'

The only significant change in no-unused-modules is here where each declaration's importedSpecifiers is added to a file's import list. However, because the imports in a file's ExportMap now include type imports, type imports now mark an export as being used.

Coverage decreased (-2.0%) to 95.917% when pulling 326244f742072b71b3813a9b9664682570fd5bff on cherryblossom000:1924 into ff50964df1234515bc6f7969b90d87ada1982008 on benmosher:master.

Coverage decreased (-2.0%) to 95.917% when pulling 326244f742072b71b3813a9b9664682570fd5bff on cherryblossom000:1924 into ff50964df1234515bc6f7969b90d87ada1982008 on benmosher:master.

Coverage decreased (-2.0%) to 95.917% when pulling 326244f742072b71b3813a9b9664682570fd5bff on cherryblossom000:1924 into ff50964df1234515bc6f7969b90d87ada1982008 on benmosher:master.

Coverage decreased (-2.0%) to 95.917% when pulling 326244f742072b71b3813a9b9664682570fd5bff on cherryblossom000:1924 into ff50964df1234515bc6f7969b90d87ada1982008 on benmosher:master.

@ljharb what's the timeline for releases in this repo? I was assuming CI deployment would just take it away but I'm seeing in the CHANGELOG that this is unreleased.

@ljharb what's the timeline for releases in this repo? I was assuming CI deployment would just take it away but I'm seeing in the CHANGELOG that this is unreleased.

Assuming automatic releases is not a safe assumption; I find that incredibly dangerous and don't do it in any package I maintain.
There is no concrete timeline for releases; I tend to find time every 3-6 months in this project.

Assuming automatic releases is not a safe assumption; I find that incredibly dangerous and don't do it in any package I maintain.
There is no concrete timeline for releases; I tend to find time every 3-6 months in this project.

Can I request that you release anytime soon? It's misleading to mark #1924 (and any other issues with unreleased fixes) as resolved considering it'll continue to be broken for dependents for up to 6 months.

@saiichihashimoto it is a decade-old standard practice that issues are closed when fixes are merged, entirely unrelated to the time of release. If that doesn't match your expectations, I'm afraid the easiest path is to adjust your expectations.
I am indeed planning a release soon, but it's blocked right now due to npm 7's release breaking tests on master.

That makes sense, no sass intended.

What's the progress on this? It's been a while...

It's still blocked on #1986.

Now that #1986 is resolved, is there a timeline of when we can expect a release?

There is no such timeline. As soon as I move through all the PRs that have been waiting, I plan to cut a release.

Is there a way you could cut a release and then go through those PRs? My understanding is that the changes that are waiting have already been tested so the wait for them to go out is arbitrary.

Every release that goes out increases maintenance burden for the project, and anything that's not in master yet, but would be in the next release if I wait, might add features or fix bugs, thus reducing that maintenance burden.

@saiichihashimoto If you really want to use eslint-plugin-import with this bug fix without waiting for a release, you could use GitHub dependencies in package.json:
{
  "devDependencies": {
    "eslint-plugin-import": "benmosher/eslint-plugin-import#462b016"
  }
}

462b016cd70b2f192c3eab78a70adcd2284f100d is the commit that merged this PR, but you could also use a newer commit if you want.

@saiichihashimoto v2.23.0 has been released, which includes this bug fix.

Thanks for bearing with my persistence!


Production Ads will load on iOS but not Android.

Plugin Version
1.2.0
Steps to Reproduce
I developed my app using Test ads with test devices. All worked 100% on iOS and Android. Then came the time to send the app out to external testers. I created the App IDs and Ad Units for both platforms and updated the app. Compiled and loaded it as test apps for external testers on both platforms.
I have created an App ID and ad units in AdMob all is green and ready to serve ads. The same code will work on iOS (with its created ad units) but I get load errors on Android. In the production version of the app.
Here is the error
I/flutter ( 2600): Anchored adaptive banner failedToLoad: LoadAdError(code: 1, domain: com.google.android.gms.ads, message: Error building request URL., responseInfo: ResponseInfo(responseId: null, mediationAdapterClassName: , adapterResponses: []))
As a test I took my app ID and ad units and updated the Demo app for the googleads-mobile-flutter package and I got the same errors so I know it is not my code as the Demo app gives the same load error.
I then logged an issue with the Google ads team as All is in place from a settings point of view on Admob.
https://groups.google.com/g/google-admob-ads-sdk/c/NVq91OTACGM.
The Google Ads team asked me for my App ID and Ad units and was able to load ads in their sample app.
They made the following statement

Hi Jaco,
Thank you for providing the requested information privately.
I've tested your Ad Unit ID on our sample app, and was able to load ads successfully. Since the issue here seems to be platform specific, we would recommend to post it on AdMob Flutter issue tracker instead. The developer specialist there should be able to assist you further on your concern.
Regards,

So if somebody from this team can contact me then I will give you the app id and ad units to test to see if you get the same issue.

OK so I may have it working. Please tell me if this is correct as I did not see this in any documentation or examples.
It seems that the production ads for Android will only load if I build an app bundle and upload it to the Playstore. I build an app bundle now and sent out a link for testing and I got ads on the devices that I installed the app from the store.
If this is the case then all the documentation is wrong as it does not say you have to do this. It only says replace your ids and remove the test device code.

Closing as solved.

@maheshmnj I know I have to use test ads when I develop. I Did that as stated, please read my question. It seems you are just dismissing my question. What is does not say in the documentation is that you have to upload the production app the Playstor for Android. On iOS I can build the app in Release mode and install it on test devices from my Macbook and all works 100%. But if I build the app for Release Mode on Android it does not work. Only if I build an app bundle and upload it to the store can I install it on test devices and all works the way it should. Obviously, I have to test the app before I let it loose on the world.


Efficiency improvements

Currently, recombination detection is slow at 5 seconds / sequences. Multiprocessing helps (--threads) but certainly there is code efficiency improvements needed.

I think most of the slowdown is purely in passing large objects as parameters to genome_mp.

Passing simple parameters (boolean, logger, int), runs at 200-350 sequences / second.
Passing complex parameters (tree, dataframe), runs at 1-3 sequences/second.
Passing+analyzing complex parameters, runs at 0.2 sequences/second (~5 seconds / sequence).

Because of this, I don't think my implementation of the analysis is the biggest problem.

This might be a problem in which rust could solved.

raise ValueError(f"target {t!r} is not in this tree")

ValueError: target 'FL.1.10.1' is not in this tree

The code base rewrite to Rust (PR #5) was extremely helpful for this issue. On a single core, I've seen processing speeds ranging from 1-100 sequences/second. And that's not even taking --threads into account 😀
But I am leaving this unresolved until I benchmark with a larger dataset (ex. VirusSeq).


[ALVR v19] Client sends malformed packets to server on controller standby

Description
Controllers teleport to some weird location in SteamVR playspace when controllers go standby.
Either when removing the battery of Quest controllers or opening the Dashboard on the Quest.
Pose position, orientation, velocity even battery life gets zeroed out on the server when the client sends the malformed packet.
However, this does not seem to happen with Quest hand tracking.

I have made a server side workaround to avoid teleporting. (bccb1250966a281a04d4a040e66630078dd7e727)
Test when removing batteries and opening quest dashboard:
https://user-images.githubusercontent.com/22834512/200198070-a9aac598-1a1b-46a6-b417-aab830e1f5b8.mp4
General Troubleshooting

[x] I carefully followed the instructions in the README and successfully completed the setup wizard
[x] I read the ALVR Wikis here and here

Environment
Hardware
Note: for Linux, an upload to the hw-probe database is preferred: hw-probe -all -upload
CPU: AMD Ryzen 7 5700X
GPU: AMD RX 6700 XT
Installation
ALVR Version: ALVR v19
Install Type:

[x] Packaged (exe, deb, rpm, etc)
[ ] Portable (zip)
[ ] Source

OS Name and Version (winver on Windows or grep PRETTY_NAME /etc/os-release on most Linux distributions): Windows 10 21H2 (Build 19044.2130)

This happend on ALVR v18 as well, but it was only orientation that was broken.

Is this a problem with the oculus sdk or with ALVR data handling? Did you check?

Right now i don't have a Android environment so i could not test the client, i only tested the server, will do that later. But from what i've seen, it looks more like a ALVR issue because quest hand tracking does not seem to have this kind of issue.
I tried listening to the incoming motion packets and it seems like the client is reading data still from the controller when the controller is standby for some frames before it stop sending controller data.
I will do some more testing.
session_log.txt
In the log you can see at 20:19:28.252672000 in the log that the server still receives data from the client even tho the controller is in standby opening the quest dashboard, which contains zeroed data.

Just a side note, my Quest 1 still uses Oculus firmware v37, people reported the same with theirs, but with updated firmware. So i doubt its an firmware thing.

I was looking at the old ALVR v18 android code.
It seems like in v18 it was checking for VRAPI_TRACKING_STATUS_POSITION_TRACKED before pushing the motion data as seen here https://github.com/alvr-org/ALVR/blob/v18/alvr/client/android/app/src/main/cpp/ovr_context.cpp#L473.
Which is missing in the v19 code.
I guess we should add a check (VRAPI_TRACKING_STATUS_ORIENTATION_TRACKED and VRAPI_TRACKING_STATUS_POSITION_TRACKED) for position and orientation for Quest.
I assume the above return false if the controllers are out of view of the Quest cameras so maybe using  VRAPI_TRACKING_STATUS_POSITION_VALID and VRAPI_TRACKING_STATUS_ORIENTATION_VALID would be better?


Demo site down

Summary:
Steps to reproduce:

Go to http://reactcommunity.org/react-modal/

Expected behavior:
See demos of react-modal.

Looks like the reactcommunity.org domain expired.  I'm not quite sure who was in charge of that.  Presumably this is affecting all the repos under the reactjs organization. @gaearon do you know what's up?

Looking at: https://github.com/reactjs/reactjs.github.io/commit/a3518a3ca023b6da4952ec447a9e3180247b8344
Maybe @mjackson might be help with this issue?

Related: https://github.com/reactjs/reactjs.github.io/issues/15

It's back!


[poco] bin and debug/bin directories should also be removed on macOS

In macOS there's an error if both directories are created but empty.

These regressions seem to be false, please wait for our processing to make changes later.

LGTM, thanks for the PR!


adds ruby / bundler / rbenv instructions

I found that I couldn't complete the "Import production data" step without installing bundles, which required bundler, which required a version of ruby that isn't locked down

Actually can we hold off merging this for a sec? I'm not sure the bash_profile instructions are working (got rbenv is not defined this morning 😫) - and also I've just noticed Homebrew is in the Managed Software Center, so that may be an easier route!

Should be good for a re-review 😄 thanks for your time @chao-xian !

Thanks Kelvin! I wanted that commit to fail so that I could verify that https://github.com/alphagov/govuk-developer-docs/pull/1696/commits/e5575bd49a4bf9378c93fec48edbd52599206cf0 fixes it correctly 😄
I'll go ahead and merge now it has a ✅ !


gRPC asynchronous client-server

UPDATE: I mark this PR as draft until we decide on the adequate underlying transport for MPI messaging.
In this PR I introduce an asynchronous client-server pair for the inter-host MPI messaging layer. The current version runs a single-threaded server, and is very much inspired on gRPC's tutorial.
Preliminary results show a decent improvement as we increase the volume of inter-host communication.
I am already working in the multi-threaded async server, which should be included in #84. The version there changes quite a bit the server-side logic, but I prefer to merge them separately, as this one is tested and working fine.

Closing as #85 has been merged.


[7.x] Add Callbacks with Output to Console Schedule

Our health check provider allows POSTing output logs. Currently there's no built in way to do this. Instead of trying to figure out a one-size-fits-all to POST, my proposal is to use callbacks. This way you can use any kind of HTTP library you want, attach additional data, filter the output, etc.
I took the $onlyIfOutputExists argument from the emailOutputTo() command, so you can optionally only run the callback if an output was generated.
There are 4 callable methods, similar to the ping URL methods:

thenWithOutput()
thenIfWithOutput()
onSuccessWithOutput()
onFailureWithOutput()

Example:
$schedule->command('inspire')
    ->onSuccessWithOutput(function ($text) {
        Http::send('POST', 'https://healthcheckservice.test/abc123', [
            'body' => $text,
        ]);
    })
    ->daily();

I made a few tweaks to this. The "output" is injected into the Closure using the container->call() method like the other callbacks. This means you must name the variable $output.
Which leads me to my next point, I think these methods shouldn't really be called directly and in 8.x I'm going to make the standard then callbacks reflect into the Closure and inject a Stringable $output of the Closure is requesting it.

OK, got it fixed up on 8.x (master branch)... works with after, then, onSuccess, onFailure:


Quake Style Drop Down

Summary of the new feature/enhancement
It would be nice to have a console drop down key (or combo), where the shell would slide down from the top of the screen. Refer to Linux based terminal emulators such as Tilda for an example.

@att0002, PowerShell is not itself a terminal emulator, it is  a shell that runs inside of one, so this is not the right place for your suggestion.
PowerShell Core works just fine with Tilda - by default, if it is your default shell, or via Preferences >  Title and Command > Run a custom shell instead of the shell.

ConEmu is a terminal which can do this on Windows.

Please create this issue in github.com/Microsoft/Console. I'd love to see this too.

Thank you all for your replies. It looks like there is already a suggestion for this feature and it is in the backlog for the console. You can view it and vote for it here: https://wpdev.uservoice.com/forums/266908-command-prompt-console-windows-subsystem-for-l/suggestions/6510797-global-hotkey-to-activate-deactivate-running-conso


feat(rest-api-client): implement GET /k/v1/app/notifications/perRecord.json

Why

In January update of Kintone, several APIs were newly added.
In this PR, I'll support GET /k/v1/app/notifications/perRecord.json.
(defined in https://developer.cybozu.io/hc/ja/articles/900004873723)
What

[x] implement getPerRecordNotifications() method in AppClient
[x] add a test
[x] add an example script
[ ] write a document

How to test

$ yarn build
$ cd examples/rest-api-client-demo
$ yarn run-script app getPerRecordNotifications

Checklist

[x] Read CONTRIBUTING.md
[ ] Updated documentation if it is required.
[x] Added tests if it is required.
[x] Passed yarn lint and yarn test on the root directory.

@shisama
Thank you for your review!
I fixed where you commented on.


Create search expression tree based on roles and action for authorization

Moving work item tracking to Azure DevOps.


[TFLite] Using real image for QNN testing.

This PR does 2 things

Test QNN on a real image. QNN and TFLite outputs differ due to rounding differences, making random input not a good candidate for label testing. So, this PR adds a real image for testing QNN.
@inadob also found a bug in QNN parsing #4807  This PR needs that fix as well to enable the real image tests, so adding that fix here.

Thanks to @inadob for finding the bug
@FrozenGene @kevinthesun @inadob Can you please review?

@inadob Can you please the TFLite pad test portion? I am not very familiar with using fake quant, and I just replicated your code for Pad. So, closer scrutiny would be good.

Ping @FrozenGene

ping @inadob , would you review it again? If you have no other comments, would you set explicit approve? Thanks?

@inadob Done

@FrozenGene Good to merge?

Thanks @anijain2305 @inadob It is merged now.

What happen if the zero point is a vector, as in per channel quantuzation? What should the pad value be?

What happen if the zero point is a vector, as in per channel quantization? What should the pad value be?

@masahi good question but please file a separate issue only affecting master since per channel quantization came in after this. Otherwise I fear this will be missed.
Ramana

@anijain2305  - this needs a backport to 0.6 tag ?

@u99127 I figured the answer myself. QNN support for per channel quantization applies to only weight quantization (which is supposed to be a common restriction in other frameworks as well). For pad value we can use a scalar zero point associated with activations.

@masahi You are right (as always :) )
@u99127 Let me look into this.


[Question] Can someone point me in the direction regex for checking jinja syntax?

I have an application that has a requirement to parse jinja syntax to determine correct structure before the template is sent up to the server for processing. If the expression is ill-formed, the user is to be notified so they can correct it.
Can someone point me toward a class in the Jinja source that implements something similar, or a couple of regular expressions I can implement in code? Anything along these lines would be helpful, thanks in advance.

Perform the validation server side by trying to parse and returning an error if it doesn't. env.parse(source) The alternative is to recreate the parser in whatever language your client is written in.
Please use our Discord for discussion about your own code. This tracker is for issues related to the project itself.


Move header customization to parent theme

Developer
Why changes are needed
Our child theme has a forked copy of the header template, which was meant to be a stripped down version of the parent theme's header that was used on some sites. Unfortunately, we've been poor at keeping this stripped-down header in sync with the full-content version. For example, our recent work changing the favicon was made to the full-content header in the parent theme, but not to the stripped-down version.
What this does
Rather than trying to identify all the changes that have been made and catching the slim header up, this re-factors the slim header entirely.
First, it moves the feature up from the child theme to the parent theme, so that only one of our themes has any header content at all.
Second, it re-structures the logic of the slim header to not be a separate file at all - but rather a conditional in the header template that skips some elements if the slim header is desired. This helps reduce the amount of repeated content that would need to be kept in sync in the future, and makes the code implementation of the feature match what is implied in the UI.
Stylesheets

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

Secrets

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

Documentation

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

Accessibility

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

Stakeholder approval

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

Dependencies
NO dependencies are updated
Code Reviewer

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

I agree about a future refactor that separates the contents of the <head> element from the markup of the navbar. Both about the refactor being needed, and about it happening in the future.


Create new Uri struct

Here is the first draft of the new Uri struct. If this seems okay to you @seanmonstar, I'll remove the actual UriRequest and replace it with the new Uri.
PS: This is a WIP so do not merge!

This is absolutely the direction I had in mind. I would also remove the use
of the Url type here, since it actually does more than is wanted on the
server side, and does several allocations. Since this type is created for
every request, we need to make it faster.
I can do that as follow up if you prefer.
On Sat, Jan 14, 2017, 5:40 AM Guillaume Gomez<EMAIL_ADDRESS>wrote:

Here is the first draft of the new Uri struct. If this seems okay to you
@seanmonstar https://github.com/seanmonstar, I'll remove the actual
UriRequest and replace it with the new Uri.
You can view, comment on, or merge this pull request online at:
https://github.com/hyperium/hyper/pull/1007
Commit Summary

Create new Uri struct

File Changes

M src/uri.rs
https://github.com/hyperium/hyper/pull/1007/files#diff-0 (139)

Patch Links:

https://github.com/hyperium/hyper/pull/1007.patch
https://github.com/hyperium/hyper/pull/1007.diff

—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/hyperium/hyper/pull/1007, or mute the thread
https://github.com/notifications/unsubscribe-auth/AADJF25pKOqxkQBOnMp-tVEHD76ZPmDBks5rSNBKgaJpZM4LjoIg
.

I think I can do it in a second step. I'll just "borrow" the url method and use them directly instead of creating a type. For now I'll replace RequestUri everywhere and then I'll remove the url type usage.

I think I'll stop here for this PR. I cleaned up a bit and remove the old RequestUri.
@seanmonstar: Do you see anything I might have forgotten?


fix: set null for empty values in NumberInput and DateField

Fix #2445

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


Fix typo in perl script

minium -> minimum
maxium -> maximum
Checklist

[ ] documentation is added or updated
[ ] tests are added or updated

Closed, It could cause compatibility issue.