Only the electricity contract appears, but not the gas contract.

When I enter the Repsol credentials in the integration, only the electricity contract appears (which works perfectly), but in my case I also have a gas contract with Repsol, and it is not listed..

Hi, @weto91
Are you able to send me the DEBUG logs from your HA instance? (be careful with personal data that might appear on the logs).
I got that data before the latest changes to the API and it was all working well, so it might be just some minor changes from Repsol that broke it. As I only have an Electricity contract I cannot check it myself.
Once I get that, I will look into it and change whatever needs to be addressed.
Thanks

BTW @weto91
You may activate the debug logs incorporating this into configuration.yaml
logger:
  default: warning
  logs:
    # Repsol Luz y Gas
    custom_components.repsolluzygas: debug

Hello,
Thanks for the quickly reply. I have write the lines that you have indicated in configuration.yaml (then I restarted home assistant) , but I don't know where to download the registry, or if I have to do something before download it.
I've looked in settings/system/registry, but there is no entry for repsolluzygas.
Excuse my ignorance, I've only been using Home Assistant for a couple of weeks and I still don't have all the knowledge I would like.
Thanks in advantage.
Regards.

Hello,
Thanks for the quickly reply. I have write the lines that you have indicated in configuration.yaml (then I restarted home assistant) , but I don't know where to download the registry, or if I have to do something before download it.
I've looked in settings/system/registry, but there is no entry for repsolluzygas.
Excuse my ignorance, I've only been using Home Assistant for a couple of weeks and I still don't have all the knowledge I would like.
Thanks in advantage.
Regards.

Ok, i found it.
repsolluzygas.log
I have modified what I believe was personal information by sequences of type: {HIDDEN_SOMETHING}
I don't think I've left anything out...
In the log, I do see that it accepts the GAS contract without any problem, even though it does not show it to be able to select it and see the corresponding information...
Thanks!

No worries. Let me try to help.
You have to go into Settings >> System >> Logs. Make sure to check that it's showing Home Assistant Core logs. There search for Repsol and you shall get all entries.
If you still have no results, you have a "Load Full Log" button and you can search there. Alternatively, try to reload the integration.

And check the logs again.
Also, make sure that you do not have duplicated entries for the logs on configuration.yaml
Let me know the outcome

No worries. Let me try to help.
You have to go into Settings >> System >> Logs. Make sure to check that it's showing Home Assistant Core logs. There search for Repsol and you shall get all entries.
If you still have no results, you have a "Load Full Log" button and you can search there. Alternatively, try to reload the integration.

And check the logs again.
Also, make sure that you do not have duplicated entries for the logs on configuration.yaml
Let me know the outcome

Yes, I found it before. I left you the log in the previous comment :)
Thank you!

Got. Thanks, @weto91
I am away on vacation, but I will try to have a look as soon as I can. Looking into the log it shall be fairly simple, but I have to delve into it once I get some spare time.
If I get a fix in the meanwhile, I will let you know and release a new version.

Got. Thanks, @weto91
I am away on vacation, but I will try to have a look as soon as I can. Looking into the log it shall be fairly simple, but I have to delve into it once I get some spare time.
If I get a fix in the meanwhile, I will let you know and release a new version.

Nice!,
Thanks!! I'll look forward to it!

Hi @weto91
I think I found a solution for the issue. Although, as I do not have a Gas Contract with Repsol, I cannot fetch the data to see if it works.
To make it easier, would you be able to, please, test the following code on your instance and check if trying to add the integration again (as you have the electricity already, you just need to try to add again to check the gas contract, without deleting the existing integration).
Using File Editor or Visual Studio Code on Home Assistant, you just need to replace the code of these files:

/homeassistant/custom_components/repsolluzygas/__init__.py
/homeassistant/custom_components/repsolluzygas/config_flow.py

Btw, if you do not have File Editor or VS Code installed in HA, you can do it from the Add-On Store: https://my.home-assistant.io/redirect/supervisor
Once you do replace the code restart HA and try to add the integration again, to see if the Gas contract pop-up during the configuration process.
If this works I will release a new version afterwards. Just want to avoid breaking something for everyone in case it does not work for some reason.
Here is the code that you need to use:
init.py
"""Integration for Repsol Luz y Gas."""
import aiohttp
import asyncio

from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import ConfigEntryNotReady
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
from aiohttp.client_exceptions import ClientError

from .const import (
    DOMAIN,
    LOGGER,
    LOGIN_URL,
    CONTRACTS_URL,
    HOUSES_URL,
    INVOICES_URL,
    COSTS_URL,
    NEXT_INVOICE_URL,
    VIRTUAL_BATTERY_HISTORY_URL,
    UPDATE_INTERVAL,
    LOGIN_HEADERS,
    CONTRACTS_HEADERS,
    COOKIES_CONST,
    LOGIN_DATA,
)

PLATFORMS: list[str] = ["sensor"]

async def async_setup(hass: HomeAssistant, config: dict) -> bool:
    return True

async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
    session = aiohttp.ClientSession()
    client = RepsolLuzYGasAPI(session, entry.data["username"], entry.data["password"])

    async def async_update_data_start():
        try:
            return await client.fetch_all_data()
        except Exception as e:
            raise UpdateFailed(f"Error fetching data: {e}")

    coordinator = DataUpdateCoordinator(
        hass,
        LOGGER,
        name="repsolluzygas",
        update_method=async_update_data_start,
        update_interval=UPDATE_INTERVAL,
    )

    await coordinator.async_config_entry_first_refresh()

    hass.data.setdefault(DOMAIN, {})
    hass.data[DOMAIN][entry.entry_id] = {
        "api": client,
        "coordinator": coordinator,
    }

    for platform in ["sensor"]:
        hass.async_create_task(
            hass.config_entries.async_forward_entry_setup(entry, platform)
        )

    return True

async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
    """Unload a config entry."""
    unload_ok = await hass.config_entries.async_unload_platforms(entry, ["sensor"])
    if unload_ok:
        hass.data[DOMAIN].pop(entry.entry_id)
    return unload_ok

async def async_reload_entry(hass: HomeAssistant, entry: ConfigEntry) -> None:
    await async_unload_entry(hass, entry)
    await async_setup_entry(hass, entry)

async def async_update_data(client):
    async def update_data():
        """Fetch data."""
        try:
            async with asyncio.timeout(10):
                data = await client.fetch_data()
                return data
        except (ClientError, asyncio.TimeoutError) as err:
            LOGGER.error("Error fetching Repsol Luz y Gas data: %s", err)
            raise UpdateFailed(f"Error fetching data: {err}") from err

    return update_data

class RepsolLuzYGasAPI:
    """Class to communicate with Repsol Luz y Gas API."""

    def __init__(self, session: aiohttp.ClientSession, username: str, password: str):
        """Initialize."""
        self.session = session
        self.username = username
        self.password = password
        self.uid = None
        self.signature = None
        self.timestamp = None

    cookies = COOKIES_CONST.copy()

    async def async_login(self):
        """Async login to Repsol API."""
        data = LOGIN_DATA.copy()
        data.update(
            {
                "loginID": self.username,
                "password": self.password,
            }
        )

        headers = LOGIN_HEADERS.copy()

        try:
            async with self.session.post(
                LOGIN_URL, headers=headers, cookies=self.cookies, data=data
            ) as response:
                if response.status == 200:
                    data = await response.json(content_type=None)
                    LOGGER.debug(f"Response: {data}")
                    self.uid = data["userInfo"]["UID"]
                    self.signature = data["userInfo"]["UIDSignature"]
                    self.timestamp = data["userInfo"]["signatureTimestamp"]
                else:
                    LOGGER.error(f"Unexpected response status: {response.status}")
                    return None
        except Exception as e:
            LOGGER.error(f"Error during login to Repsol API: {e}")
            return None

    async def async_get_contracts(self):
        """Retrieve contracts."""
        headers = CONTRACTS_HEADERS.copy()
        headers.update(
            {
                "UID": self.uid,
                "signature": self.signature,
                "signatureTimestamp": self.timestamp,
            }
        )

        url = CONTRACTS_URL

        contracts = {"house_id": None, "information": []}

        try:
            async with asyncio.timeout(10):
                async with self.session.get(
                    url, headers=headers, cookies=self.cookies
                ) as response:
                    LOGGER.debug(f"Headers: {headers}")
                    if response.status == 200:
                        data = await response.json()

                        LOGGER.debug("Contracts Data %s", data)

                        if data:  # Check if data is not empty
                            for house in data:
                                house_id = house["code"]
                                if not contracts["house_id"]:
                                    contracts["house_id"] = house_id

                                for contract in house.get("contracts", []):
                                    info = {
                                        "contract_id": contract["code"],
                                        "contractType": contract["contractType"],
                                        "cups": contract["cups"],
                                        "active": contract["status"] == "ACTIVE",
                                    }
                                    contracts["information"].append(info)

                            LOGGER.debug("Contracts Parsed %s", contracts)
                        else:
                            LOGGER.warning("No contract data received")
                    else:
                        LOGGER.error(
                            "Failed to fetch contracts data. HTTP Status: %s",
                            response.status,
                        )
                        return None
        except Exception as e:
            LOGGER.error("Error fetching contracts data: %s", e)
            return None

        return contracts

    async def async_get_houseDetails(self, house_id):
        """Fetch house details including contracts and SVA data."""
        headers = CONTRACTS_HEADERS.copy()
        headers.update(
            {
                "UID": self.uid,
                "signature": self.signature,
                "signatureTimestamp": self.timestamp,
            }
        )

        url = HOUSES_URL.format(house_id)

        try:
            async with asyncio.timeout(10):
                async with self.session.get(
                    url, headers=headers, cookies=self.cookies
                ) as response:
                    if response.status == 200:
                        response_data = await response.json()

                        LOGGER.debug("House Data %s", response_data)
                        return response_data
                    else:
                        LOGGER.error(
                            "Failed to fetch house data. HTTP Status: %s",
                            response.status,
                        )
                        return None

        except Exception as e:
            LOGGER.error("Error fetching house data: %s", e)
            return None

    async def async_get_invoices(self, house_id, contract_id):
        """Retrieve the latest invoice for a given contract."""
        headers = CONTRACTS_HEADERS.copy()
        headers.update(
            {
                "UID": self.uid,
                "signature": self.signature,
                "signatureTimestamp": self.timestamp,
            }
        )
        url = INVOICES_URL.format(house_id, contract_id)

        try:
            async with asyncio.timeout(10):
                async with self.session.get(
                    url, headers=headers, cookies=self.cookies
                ) as response:
                    if response.status == 200:
                        response_data = await response.json()

                        LOGGER.debug("Invoices Data %s", response_data)
                        return response_data
                    else:
                        LOGGER.error(
                            "Failed to fetch invoice data. HTTP Status: %s",
                            response.status,
                        )
                        return None

        except Exception as e:
            LOGGER.error("Error fetching invoice data: %s", e)
            return None

    async def async_get_costs(self, house_id, contract_id):
        """Retrieve cost data for a given contract."""
        headers = CONTRACTS_HEADERS.copy()
        headers.update(
            {
                "UID": self.uid,
                "signature": self.signature,
                "signatureTimestamp": self.timestamp,
            }
        )
        url = COSTS_URL.format(house_id, contract_id)
        data = {
            "totalDays": 0,
            "consumption": 0,
            "amount": 0,
            "amountVariable": 0,
            "amountFixed": 0,
            "averageAmount": 0,
        }

        try:
            async with asyncio.timeout(10):
                async with self.session.get(
                    url, headers=headers, cookies=self.cookies
                ) as response:
                    if response.status == 200:
                        response_data = await response.json()

                        for var in data.keys():
                            data[var] = response_data.get(var, 0)

                        LOGGER.debug("Costs Data %s", data)
                    else:
                        LOGGER.error(
                            "Failed to fetch costs data. HTTP Status: %s",
                            response.status,
                        )
        except Exception as e:
            LOGGER.error("Error fetching costs data: %s", e)

        return data

    async def async_get_next_invoice(self, house_id, contract_id):
        """Retrieve cost data for a given contract."""
        headers = CONTRACTS_HEADERS.copy()
        headers.update(
            {
                "UID": self.uid,
                "signature": self.signature,
                "signatureTimestamp": self.timestamp,
            }
        )
        url = NEXT_INVOICE_URL.format(house_id, contract_id)
        data = {
            "amount": 0,
            "amountVariable": 0,
            "amountFixed": 0,
        }

        try:
            async with asyncio.timeout(10):
                async with self.session.get(
                    url, headers=headers, cookies=self.cookies
                ) as response:
                    if response.status == 200:
                        response_data = await response.json()

                        for var in data.keys():
                            data[var] = response_data.get(var, 0)

                        LOGGER.debug("Next Invoice Data %s", data)
                    else:
                        LOGGER.debug(
                            "Failed to fetch next invoice data. HTTP Status: %s",
                            response.status,
                        )
        except Exception as e:
            LOGGER.debug("Error fetching next invoice data: %s", e)

        return data

    def extract_sva_ids(self, house_details):
        """Extract SVA IDs from house details response."""
        sva_ids = []
        for contract in house_details.get("contracts", []):
            for sva in contract.get("sva", []):
                sva_ids.append(sva["code"])
        return sva_ids

    async def async_get_virtual_battery_history(self, house_id, contract_id):
        headers = CONTRACTS_HEADERS.copy()
        headers.update(
            {
                "UID": self.uid,
                "signature": self.signature,
                "signatureTimestamp": self.timestamp,
            }
        )
        url = VIRTUAL_BATTERY_HISTORY_URL.format(house_id, contract_id)

        try:
            async with asyncio.timeout(10):
                async with self.session.get(
                    url, headers=headers, cookies=self.cookies
                ) as response:
                    if response.status == 200:
                        response_data = await response.json()

                        LOGGER.debug("Virtual Battery History Data %s", response_data)
                        return response_data
                    else:
                        LOGGER.error(
                            "Failed to fetch Virtual Battery History data. HTTP Status: %s",
                            response.status,
                        )
                        return None

        except Exception as e:
            LOGGER.error("Error fetching Virtual Battery History data: %s", e)
            return None

    async def async_update(self):
        """Asynchronously update data from the Repsol API."""
        data = {
            "consumption": 0,
            "amount": 0,
            "amountVariable": 0,
            "amountFixed": 0,
            "averageAmount": 0,
        }

        # Log in and get contracts asynchronously
        uid, signature, timestamp = await self.async_login()
        contracts = await self.async_get_contracts(uid, signature, timestamp)

        if "information" in contracts:
            for contract in contracts["information"]:
                if not contract.get("active", False):
                    continue

                # Get costs asynchronously
                response = await self.async_get_costs(
                    uid,
                    signature,
                    timestamp,
                    contracts["house_id"],
                    contract["contract_id"],
                )
                for var in data:
                    data[var] += response.get(var, 0)

                if response.get("totalDays", 0) > 0:
                    data["totalDays"] = response["totalDays"]
                    data["averageAmount"] = round(response["averageAmount"], 2)

                nextInvoice = await self.async_get_next_invoice(
                    uid,
                    signature,
                    timestamp,
                    contracts["house_id"],
                    contract["contract_id"],
                )
                for var in data:
                    data[var] += nextInvoice.get(var, 0)

                if nextInvoice.get("amount", 0) > 0:
                    data["nextInvoiceAmount"] = nextInvoice["amount"]
                    data["nextInvoiceAmountVariable"] = nextInvoice["amountVariable"]
                    data["nextInvoiceAmountFixed"] = nextInvoice["amountFixed"]

            if len(contracts["information"]) > 0:
                # Get the last invoice asynchronously
                last_contract = contracts["information"][-1]

                invoices = await self.async_get_invoices(
                    uid,
                    signature,
                    timestamp,
                    contracts["house_id"],
                    last_contract["contract_id"],
                )
                if invoices:
                    data["lastInvoiceAmount"] = invoices[0]["amount"]
                    data["lastInvoicePaid"] = invoices[0]["status"] == "PAID"

        self.data = data
        LOGGER.debug("Sensor Data %s", self.data)

    async def fetch_all_data(self):
        """Fetch and combine all necessary data from the API."""
        try:
            await self.async_login()
            contracts_data = await self.async_get_contracts()

            if not contracts_data:
                raise Exception("Failed to fetch contracts.")

            all_data = {}
            for contract in contracts_data.get("information", []):
                house_id = contracts_data["house_id"]
                contract_id = contract["contract_id"]
                house_data = await self.async_get_houseDetails(house_id)
                invoices_data = await self.async_get_invoices(house_id, contract_id)
                costs_data = await self.async_get_costs(house_id, contract_id)
                next_invoice_data = await self.async_get_next_invoice(
                    house_id, contract_id
                )
                virtual_battery_history_data = (
                    await self.async_get_virtual_battery_history(house_id, contract_id)
                )

                all_data[contract_id] = {
                    "contracts": contract,
                    "house_data": house_data,
                    "invoices": invoices_data,
                    "costs": costs_data,
                    "nextInvoice": next_invoice_data,
                    "virtual_battery_history": virtual_battery_history_data,
                }
            LOGGER.debug("Sensor Data %s", all_data)

            return all_data

        except Exception as e:
            LOGGER.error(f"Error fetching all data: {e}")
            raise

config_flow.py
from homeassistant import config_entries, core, exceptions
from homeassistant.core import HomeAssistant
import voluptuous as vol

from .const import (
    DOMAIN,
    LOGGER,
)
from . import RepsolLuzYGasAPI

class RepsolConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
    VERSION = 1
    CONNECTION_CLASS = config_entries.CONN_CLASS_CLOUD_POLL

    async def async_step_user(self, user_input=None):
        errors = {}
        if user_input is not None:
            # Initialize the API client and attempt to login
            api = RepsolLuzYGasAPI(
                self.hass.helpers.aiohttp_client.async_get_clientsession(),
                user_input["username"],
                user_input["password"],
            )
            try:
                await api.async_login()
                # Store the API client instance for use in the next step
                self.hass.data.setdefault(DOMAIN, {})["api"] = api
                # Store credentials for potential future use
                self.hass.data[DOMAIN]["credentials"] = user_input
                return await self.async_step_contract()
            except exceptions.HomeAssistantError:
                errors["base"] = "login_failed"

        data_schema = vol.Schema(
            {
                vol.Required("username"): str,
                vol.Required("password"): str,
            }
        )

        return self.async_show_form(
            step_id="user", data_schema=data_schema, errors=errors
        )

    async def async_step_contract(self, user_input=None):
        errors = {}
        api = self.hass.data[DOMAIN]["api"]
        contracts_data = await api.async_get_contracts()

        if not isinstance(contracts_data, dict) or "information" not in contracts_data:
            LOGGER.error("Unexpected contracts data structure: %s", contracts_data)
            errors["base"] = "invalid_contracts_data"
            return self.async_show_form(step_id="user", errors=errors)

        if user_input is not None:
            selected_contract = contracts_data["information"][
                int(user_input["contract_index"])
            ]

            # Check if the contract is already configured
            existing_ids = {
                entry.data["contract_id"] for entry in self._async_current_entries()
            }
            if selected_contract["contract_id"] in existing_ids:
                errors["base"] = "already_configured"
                return self.async_show_form(
                    step_id="contract",
                    data_schema=self._get_contracts_schema(contracts_data),
                    errors=errors,
                )

            self.hass.data[DOMAIN]["contract_id"] = selected_contract["contract_id"]
            self.hass.data[DOMAIN]["house_id"] = contracts_data["house_id"]
            return self.async_create_entry(
                title="Repsol Luz y Gas",
                data={
                    **self.hass.data[DOMAIN]["credentials"],
                    "contract_id": self.hass.data[DOMAIN]["contract_id"],
                    "house_id": self.hass.data[DOMAIN]["house_id"],
                },
            )

        return self.async_show_form(
            step_id="contract",
            data_schema=self._get_contracts_schema(contracts_data),
            errors=errors,
        )

    def _get_contracts_schema(self, contracts_data):
        """Generate dynamic schema for contract selection based on available contracts."""
        return vol.Schema(
            {
                vol.Required("contract_index"): vol.In(
                    {
                        i: f'{contract["contractType"]} - {contract["cups"]}'
                        for i, contract in enumerate(contracts_data["information"])
                    }
                ),
            }
        )

Ok, now I can add the gas contract, but it doesn't add devices or entities to it.

Regards!

Great. So, if that now works, we can check on the sensors.
But for that, I need you to send me the logs again with the info from the Gas contract. It shall be reading the invoices and all.
Without that I cannot map the sensors to the info from the server.
Can you send the updated logs, checking that you get the gas info?
Thanks a lot for the help

Hi, here is the log. I think it can help you =)
home-assistant_2024-08-22T16-53-18.380Z.log

Alright, let me have a look into it.
A quick question, since you hide all data, is this information related to one electricity invoice and the other with one gas invoice? Is the idContract different or is it the same?
2024-08-22 17:21:34.925 DEBUG (MainThread) [custom_components.repsolluzygas.const] Invoices Data [{'idContract': '{ID}', 'startDate': '{date}', 'endDate': '{date}', 'amount': {amount}, 'debt': 0, 'status': 'PAID', 'invoiceCode': '{code}', 'invoiceNumber': '{number}', 'subsizedConsumptionAmount': 0, 'subsizedConsumptionPercentage': 0}]
2024-08-22 17:21:34.931 DEBUG (MainThread) [custom_components.repsolluzygas.const] Invoices Data [{'idContract': '{ID}', 'startDate': '{date}', 'endDate': '{date}', 'amount': {amount}, 'debt': 0, 'status': 'PAID', 'invoiceCode': '{code}', 'invoiceNumber': '{number}', 'subsizedConsumptionAmount': 0, 'subsizedConsumptionPercentage': 0}]

Would you be able to go into the Area de Cliente website on Repsol and send me the developr tools info that appears when you look into the gas invoices and gas data?
Similar to this (in this case is an example with Electricity)

If you can post the whole structure of the response that will help a lot!
Thanks again for your time and help.

Those two lines are from the same contract, the electricity one.
Regarding the development tools, I use Brave, and it seems that the interface is not the same, if you tell me where I have to click... of course.
However, keep in mind that GAS does not have a connected meter, so it only allows you to view and download the latest invoices, it apparently has no more identities to show.

Esas dos líneas son del mismo contrato, la eléctrica.
En cuanto a las herramientas de desarrollo, utilizo Brave, y parece que la interfaz no es la misma, si me dices dónde tengo que hacer clic...
Sin embargo, tenga en cuenta que GAS no tiene un medidor conectado, por lo que solo le permite ver y descargar las últimas facturas, aparentemente no tiene más identidades para mostrar.

I think that the only identities that could be obtained are the date of the last invoice, whether or not it is paid, the total price of that invoice, fixed price and variable price.

I can see this data for the GAS contract in the logs:
'amount': 0, 'amountVariable': {XXXX}, 'amountFixed': {XXXX}}, 'virtual_battery_history': None}, '{XXXX}': {'contracts': {'contract_id': '{XXXX}', 'contractType': 'GAS', 'cups': '{XXXX}', 'active': True}
I think that is all can be obtained...

I use Brave, and it seems that the interface is not the same, if you tell me where I have to click... of course.

Not sure how Brave handles that nor their development tools. What I sent you was from Chrome.
My guess is that there is more data available, at least from the logs I have from when I had Gas (way before the new API changes).
If you can get the data from the website, whatever you see there, we may get the same thing from the API, I just need to map the sensor fields to the correct API mapping and endpoints.
Cheers

@weto91 were you able to get those logs and info?
Without that I cannot really move on and get this fixed, as I do not have a Gas contract. So if you can, I will highly appreciate it.
On another note, if you prefer, we can chat privately on any other platform to try to get this sorted. Let me know and we can work it out.

Hello, sorry. I was on vacations 😅. Can you share me your email? I think is better and faster.

Hello, sorry. I was on vacations 😅. Can you share me your email? I think is better and faster.

Sent you an email. Cheers


Getting a a struct error after writing

Hello, thanks for providing such a great resource; I'm having an issue though.
In the frequency for loop, the third one, the program crashes after 85 iterations with the log provided below. This is my first Python script, so I'm not sure how to debug Python just yet.
I've gone through the source and the issue seems to stem from the variable self.last_btag. After 85 iterations, using the functions I have the value of the variable would have been incremented (85 * 3) times = 255, hence the error.
Am I supposed to reset the value of self.last_btag somewhere?
Thanks!
EDIT: Calling lcr.last_btag = 0 in the loop fixes the problem. I don't know what this variable is for, so if you could tell me a better way to fix it, I'd appreciate it.
from time import sleep
import usbtmc
import serial

lcr = usbtmc.Instrument(2391, 2313)

Arduino = serial.Serial('/dev/tty.usbmodem1421', 38400, timeout=10)

for i in range(0, 4):
    print()
    for R1 in range(0, 64):
        # Instruct Arduino to change rheostat wiper
        Arduino.write(b'1')
        sleep(0.1)
        for f in range(0, 99):
            lcr.write(":TRIG:IMM")
            # THIS IS THE FIX:
            lcr.last_btag = 0
            sleep(0.1)
            data = lcr.ask("FETC:IMP:FORM?")
            sleep(0.1)
            print(str(R1) + "," + str(f) + "," + data)

Error Log:
  File "build/bdist.macosx-10.10-intel/egg/usbtmc/usbtmc.py", line 479, in write
  File "build/bdist.macosx-10.10-intel/egg/usbtmc/usbtmc.py", line 410, in write_raw
  File "build/bdist.macosx-10.10-intel/egg/usbtmc/usbtmc.py", line 359, in pack_dev_dep_msg_out_header
  File "build/bdist.macosx-10.10-intel/egg/usbtmc/usbtmc.py", line 356, in pack_bulk_out_header
struct.error: ubyte format requires 0 <= number <= 255

This should get reset automatically.

Please remove your last_btag fix and test with the latest git revision and let me know what happens.

Unfortunately our LCR developed issues recently and I won't be able to test just yet. I will as soon as I can.

Well, this should be fixed with the latest version.  Feel free to re-open this issue if it isn't.


raensteiarsnt

ratsrt

CI report:

7ea41ab90f17cbe41a7ff04039f3cfe794890000 UNKNOWN

Bot commands
  @hudi-bot supports the following commands:

@hudi-bot run azure re-run the last Azure build


VirtualizedPropertyGrid: Action buttons might overflow

Describe the bug
ActionButtons in VirtualizedPropertyGrid might overflows at small size.
To Reproduce
Steps to reproduce the behavior:

Place VirtualizedPropertyGrid with some actions buttons into resizable panel.
Start reducing panel width.
Actions buttons start overflowing VirtualizedPropertyGrid

Expected behavior
Actions buttons should stay inside.
Screenshots

Additional context
If width is reduced even more VirtualizedPropertyGrid item style changes and buttons do not overflow. https://github.com/iTwin/appui/blob/cdf196a5ab3abe1fc6b00f26094639d11df1ca71/ui/components-react/src/components-react/properties/renderers/PropertyGridColumns.ts#L76

Fix available in 4.2.0.


enable twig 2.0

Thanks!  Could you please create another release? This is the last step for us to use twig 2.0 :)

No problem, I have created a new release.


updated readme add shields last commit

did i do something wrong?

No - I followed your advice and introduced shields by myself
Вт, 11 янв. 2022 г. в 15:15, Sergey Mikhaylenko @.***>:

did i do something wrong?
—
Reply to this email directly, view it on GitHub
https://github.com/intersystems-community/intersystems-iris-dev-template/pull/4#issuecomment-1009907936,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAVHEP4PCLZM5HDGNMUQWQ3UVQNN7ANCNFSM5JNCZSFQ
.
You are receiving this because you modified the open/close state.Message
ID:
<intersystems-community/intersystems-iris-dev-template/pull/4/c1009907936@
github.com>


Gulp support

It would be nice if you could have gulp support ...as most of us use it for developing these days...

The same problem, most libraries today support both

Over a year later, the tide has turned in favor of gulp I would say.  :)

+1

+1

Gulp :+1:

@pyros2097 @daneden

Wow! :walking: its been more than a year and gulp has emerged. Gulp :100:

gulp +1

+1 📢

gulp :+1:


Issues with suspend-then-hibernate due to script in /usr/lib/systemd/system-sleep/

If I use suspend-then-hibernate, e.g. "systemctl suspend-then-hibernate" I observe that it takes up to 90 seconds to successfully suspend, and 90 seconds again to wake up.
If I use suspend e.g. "systemctl suspend" or hybrid-sleep e.g. "systemctl hybrid-sleep", the laptop suspends and wakes in just a couple of seconds.
If I remove /usr/lib/systemd/system-sleep/fw-fanctrl-suspend, the issue goes away.  I have no idea why, as running the command "runuser -l myuser -c "fw-fanctrl sleep" returns instantly.

I have no such issue if I modify the script to use "sudo -u username -i cmd" instead.

I tried both and it works the same on my machine (Ubuntu 22.04)
Not sure how to investigate that :/

Hi @galfwender ,
We recently did a consequent refactoring of our codebase, is this issue still present in the latest version?

Having this issue as well including on the newest version. Journalctl shows a pam_systemd(login:session): Failed to create session: Connection timed out error near where it happens. The logs around it are a bit inconsistent in what they show, but I've seen the following which seem relevant to debugging the issue
May 21 18:43:45 HOSTNAME systemd-logind[1080]: Power key pressed short.
May 21 18:43:45 HOSTNAME kernel: mei_pxp 0000:00:16.0-fbf6fcf1-96cf-4e2e-a6a6-1bab8cbe36b1: bound 0000:00:02.0 (ops i915_pxp_tee_component_ops [i915])
May 21 18:43:45 HOSTNAME kernel: cros_ec_lpcs cros_ec_lpcs.0: bad packet checksum 3b
May 21 18:43:45 HOSTNAME python3[15060]: EC returned error result code 7
May 21 18:43:45 HOSTNAME python3[15060]: EC returned error result code 12
May 21 18:43:45 HOSTNAME python3[15060]: EC response has invalid checksum
May 21 18:43:45 HOSTNAME python3[15060]: EC returned error result code 7
May 21 18:43:45 HOSTNAME python3[15060]: EC returned error result code 7
May 21 18:43:45 HOSTNAME systemd-sleep[14637]: System returned from sleep operation 'suspend-then-hibernate'.
May 21 18:43:45 HOSTNAME kernel: PM: suspend exit
May 21 18:43:45 HOSTNAME systemd-sleep[15089]: logname: no login name
May 21 18:43:45 HOSTNAME runuser[15096]: pam_unix(runuser-l:session): session opened for user root(uid=0) by root(uid=0)
May 21 18:44:15 HOSTNAME runuser[14654]: pam_systemd(runuser-l:session): Failed to create session: Connection timed out
May 21 18:44:15 HOSTNAME systemd-sleep[15397]: Success
May 21 18:44:15 HOSTNAME runuser[14654]: pam_unix(runuser-l:session): session closed for user root
May 21 18:45:15 HOSTNAME systemd[1]: systemd-suspend-then-hibernate.service: Deactivated successfully.
May 21 18:45:15 HOSTNAME systemd[1]: Finished System Suspend then Hibernate.
May 21 18:45:15 HOSTNAME systemd[1]: systemd-suspend-then-hibernate.service: Consumed 1.301s CPU time.
May 21 18:45:15 HOSTNAME systemd[1]: Stopped target Sleep.
May 21 18:45:15 HOSTNAME systemd[1]: Reached target Suspend; Hibernate if not used for a period of time.
May 21 18:45:15 HOSTNAME systemd-logind[1080]: Operation 'suspend-then-hibernate' finished.

I've also seen things like this though this was with an older version
May 21 17:56:02 HOSTNAME runuser[2861]: pam_systemd(runuser-l:session): Failed to create session: Connection timed out
May 21 17:56:02 HOSTNAME systemd-sleep[3296]: Traceback (most recent call last):
May 21 17:56:02 HOSTNAME systemd-sleep[3296]:   File "/usr/bin/fw-fanctrl", line 321, in <module>
May 21 17:56:02 HOSTNAME systemd-sleep[3296]:     main()
May 21 17:56:02 HOSTNAME systemd-sleep[3296]:   File "/usr/bin/fw-fanctrl", line 302, in main
May 21 17:56:02 HOSTNAME systemd-sleep[3296]:     client_socket.connect(COMMANDS_SOCKET_FILE_PATH)
May 21 17:56:02 HOSTNAME systemd-sleep[3296]: FileNotFoundError: [Errno 2] No such file or directory
May 21 17:56:02 HOSTNAME runuser[2861]: pam_unix(runuser-l:session): session closed for user root
May 21 17:57:02 HOSTNAME systemd[1]: systemd-suspend-then-hibernate.service: Deactivated successfully.
May 21 17:57:02 HOSTNAME systemd[1]: Finished System Suspend then Hibernate.
May 21 17:57:02 HOSTNAME systemd[1]: systemd-suspend-then-hibernate.service: Consumed 4.417s CPU time.
May 21 17:57:02 HOSTNAME systemd[1]: Stopped target Sleep.
May 21 17:57:02 HOSTNAME systemd[1]: Reached target Suspend; Hibernate if not used for a period of time.
May 21 17:57:02 HOSTNAME systemd[1]: Stopped target Suspend; Hibernate if not used for a period of time.

Don't want to do too more much investigation because the long login times are quite annoying to test, but I'm happy to give more information or to test fixes.
System is Framework 12th gen Intel, Arch Linux kernel 6.9.1-arch1-1, systemd version 255 (255.6-1-arch). Issue is fairly consistent for me, but isn't 100% occurence. I've only seen the issue occur with suspend-then-hibernate both when resuming from suspend and from hibernate.

Hi,
There seems to be a problem with the runuser -l command.
It is no longer used in the latest commit and is most likely still here due to the AUR package.
We are currently working on a PR (#37 ) with the AUR package maintainer (@icedream ) to create a long term solution for packaging.
Your issue will most likely be resolved in the next AUR version, to test if it will be the case, you can try installing the program via the install script and check if you still have the issue.
I will let you know when the pr is merged.
Have a nice day.

You're right. Installed via the install script and it works properly now. Sorry for not trying that first before saying I had the issue as well.


Runtume error on a finetuned model

I'm getting an error when I run pplm with a gpt2 model I finetuned with the language modeling example from the huggingface transformers repo.
run_pplm.py
-B /path/to/BOW.txt
--pretrained_model=/user/FindtunedModelOut
--cond_text="potato"
--num_samples=20
--length=150
--stepsize=0.03
--num_iterations=3
--window_length=5
--gamma=1.5
--gm_scale=0.95
--kl_scale=0.01
--colorama
--verbosity=regular
--sample
and I get the error:
Traceback (most recent call last):
File "/pythonProjects/transformerTest/venv/PPLM/run_pplm.py", line 936, in
run_pplm_example(**vars(args))
File "/pythonProjects/transformerTest/venv/PPLM/run_pplm.py", line 768, in run_pplm_example
unpert_gen_tok_text, pert_gen_tok_texts, _, _ = full_text_generation(
File "/pythonProjects/transformerTest/venv/PPLM/run_pplm.py", line 472, in full_text_generation
pert_gen_tok_text, discrim_loss, loss_in_time = generate_text_pplm(
File "/pythonProjects/transformerTest/venv/PPLM/run_pplm.py", line 584, in generate_text_pplm
pert_past, _, grad_norms, loss_this_iter = perturb_past(
File "/pythonProjects/transformerTest/venv/PPLM/run_pplm.py", line 213, in perturb_past
bow_logits = torch.mm(probs, torch.t(one_hot_bow))
RuntimeError: mat1 dim 1 must match mat2 dim 0
I'm not sure if I screwed up the finetuning or pplm, but the model does generate text with the run_generation example, and if I just change the model to gpt2 pplm runs on the bag of words. Anyone know how to fix this error, or what I am doing wrong?
Thanks.
Edit: The problem seems to have to do with the special tokens I added.

Can you elaborate what "gpt2 pplm runs on the bag of words" means? I don't know if I fully follow what is causing the problem. I haven't seen this error in this context before.

Hi, I have the same problem; I think the issues lies with added tokens in the finetuning process... Any ideas how to solve this?

Can you elaborate what "gpt2 pplm runs on the bag of words" means? I don't know if I fully follow what is causing the problem. I haven't seen this error in this context before.

I meant that pplm runs without error with the pretrained gpt2 model, without my fine-tuneing, using a bag of words. I was trying to relay that pplm works with other models and that the model, not the bag of words, was causing the problem. If I remove the two lines of code that I use to add my special tokens to huggingface's language modeling example, pplm does run.
special_tokens_dict = {'bos_token': '<SOT>', 'eos_token': '<EOT>', 'pad_token': '<PAD>'}
num_added_toks = tokenizer.add_special_tokens(special_tokens_dict)


Conversion to managed drives renames the drives

The errors started happening after the machines were converted from unmanaged to managed drives.
Example:
Message: The Resource 'Microsoft.Compute/disks/string000-OSDisk' under resource group 'xxxx' was not found.
Failed to create snapshot of: string000-OSDisk
Azure Error: ResourceNotFound
Message: The Resource 'Microsoft.Compute/disks/string000-LogDisk' under resource group 'xxxx' was not found.
Failed to create snapshot of: string000-LogDisk
Azure Error: ResourceNotFound
Message: The Resource 'Microsoft.Compute/disks/string000-DataDisk' under resource group 'xxxx' was not found.
Failed to create snapshot of: string000-DataDisk
Azure Error: ResourceNotFound
Both azure portal and python SDK show the disks named string000-DataDisk, string000-OSDisk, string000-LogDisk are attached to the machine string000. Disks are functional and we can see the data on our mountpoints.
However, when I rebuild the machine with the above disk names they appear empty. They only work as expected if left alone after the conversion.
I also noticed that the disks attached to some of the machines in this resource group after the conversion are named:
string001-OSDisk_random hex string
string001-LogDisk_random hex string
string001-DataDisk_random hex string
They were originally created as unmanaged without the hex string.
This makes me suspect that the disks attached to string000 have the hex string appended to them, but some APIs are not aware of it. There are no references to disk renaming or how the conversion is done under the hood in the documentation.
Disks are P30 and the errors seem reproducible only when there is a significant amount of data on them.
I was able to reproduce in multiple resource groups, but not on every run.
Is there another way to check for the "real" name of the disks attached to string000?
Thanks!

Thanks @TihoElek - this seems like a service issue rather than an SDK issue.
@hyonholee - are you able to provide any insight into this behavior?

@yugangw-msft any idea?

Please share more detail of 2 activities you mentioned:

How did you converted from unmanaged to managed drives.
How did you rebuild the machine with the above disk names
Once i know the detail, I can provide more helo

Hi Yugang,
1.) We converted to managed drives using:
https://github.com/Azure/azure-sdk-for-python/blob/master/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/operations/virtual_machines_operations.py#L590
2.) We "rebuilt" the machine using delete (
https://github.com/Azure/azure-sdk-for-python/blob/master/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/operations/virtual_machines_operations.py#L365
)
and create_or_update (
https://github.com/Azure/azure-sdk-for-python/blob/master/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30/operations/virtual_machines_operations.py#L267)
operations using the same configuration parameters (storage, network and
compute) as when we provisioned the unmanaged machine.
Please let me know if you need any more details.
Best,
Tihomir
On Wed, Apr 18, 2018 at 9:42 AM, Yugang Wang<EMAIL_ADDRESS>wrote:

Please share more detail of 2 activities you mentioned:

How did you converted from unmanaged to managed drives.
How did you rebuild the machine with the above disk names
Once i know the detail, I can provide more helo

—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/Azure/azure-sdk-for-python/issues/2380#issuecomment-382451862,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AEt7dKwD5IHcr67_9MPSgPyLwLrewwB8ks5tp2z8gaJpZM4TQwvn
.

In the rebuild step, to confirm, when you tried to rebuild the same VM with unmanaged disk, you got the error of The Resource 'Microsoft.Compute/disks/string000-OSDisk' under resource group 'xxxx' was not found.?

There were several scenarios:
1.) Snapshot operation failed with the The Resource
'Microsoft.Compute/disks/string000-OSDisk' error after the conversion to
managed without any rebuilds.
2.) When we rebuild machines we try to attach the existing disks with
predefined names and if they don't exist then they are added as empty
disks. On a rebuild after the conversion the disks we are sure were there
got attached as empty.
3.) When we list storage some disks after the conversion, the disks on some
machines are renamed.

Let us handle one after one, for 1), can you share with me the code you wrote for capturing a snapshot from an existing disk?
If the code volume is big, you can send me to yugangw at microsoft dot com. My initial take is the request payload is not right, particularly the resource id for the source disk.

It is important to note that this code always works on resource groups
created as managed. It also works on some of our converted resource groups
without any problems and it works on all but several machines in this
resource group.
I agree that managed_disk.id could be wrong, but probably because it was
created differently on conversion, unlikely that we payload it incorrectly.
def snapshot_disk(self, cluster, machine, disk_name, snap_time):
    snapshot_name ="example"
    try:
       # get the disk by name
        managed_disk = self.cmc.disks.get(cluster, disk_name)
        async_snapshot_creation = self.cmc.snapshots.create_or_update(
            resource_group_name=cluster,
            snapshot_name=snapshot_name,
            snapshot=Snapshot(
                location="example"
                creation_data=compute.models.CreationData(
                    create_option='Copy',
                    source_uri=managed_disk.id
                )
            )
        )
        snapshot = async_snapshot_creation.result()
        if snapshot.name:
            print("Created snapshot of: {}".format(disk_name))
        else:
            print("Failed to create snapshot of: {}".format(disk_name))
            return Failed
        return snapshot
    except Exception as e:
        print(e)
        print("Failed to create snapshot of: {}".format(disk_name))
        return "Failed"

I think the problem is that during the conversion disk name gets a hex
string appended to it in some cases which causes the get request to not
find it. But both portal and python SDK seem to think the name is not
modified on some nodes. On the others hex string is visible.
Just for reference again:
https://github.com/Azure/azure-sdk-for-python/issues/2380
On Wed, Apr 18, 2018 at 12:40 PM, Yugang Wang<EMAIL_ADDRESS>wrote:

Let us handle one after one, for 1), can you share with me the code you
wrote for capturing a snapshot from an existing disk?
If the code volume is big, you can send me to yugangw at microsoft dot
com. My initial take is the request payload is not right, particularly the
resource id for the source disk.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/Azure/azure-sdk-for-python/issues/2380#issuecomment-382505027,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AEt7dDZjTqp365bnwZZX9ekt-UpRle3gks5tp5aUgaJpZM4TQwvn
.

Please change your code to use  source_resource_id, instead of source_blob_uri which is used to capture snapshot from unmanaged disk blob
creation_data=compute.models.CreationData(
                        create_option='Copy',
                        source_resource_id=managed_disk.id
                    )

If it helps, you can cross check  CLI's code logics

According to:
https://github.com/Azure/azure-sdk-for-python/wiki/Managed-Disk
Create a snapshot of a Managed Disk that is currently attached to a Virtual
Machine.
    managed_disk = compute_client.disks.get('my_resource_group', 'myDisk')
    async_snapshot_creation =

self.compute_client.snapshots.create_or_update(
'my_resource_group',
'mySnapshot',
{
'location': 'westus',
'creation_data': {
'create_option': 'Copy',
'source_uri': managed_disk.id
}
}
)
snapshot = async_snapshot_creation.result()
If source_uri was the issue, wouldn't it then fail on all snapshots of
disks created this way? It works on other disks attached to the machines in
this resource group.
On Wed, Apr 18, 2018 at 3:14 PM, Yugang Wang<EMAIL_ADDRESS>wrote:

Please change your code to use source_resource_id, instead of
source_blob_uri which is used to capture snapshot from unmanaged disk blob
creation_data=compute.models.CreationData(
create_option='Copy',
source_resource_id=managed_disk.id
)
If it helps, you can cross check CLI's code logics
https://github.com/Azure/azure-cli/blob/dev/src/command_modules/azure-cli-vm/azure/cli/command_modules/vm/custom.py#L380-L383
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/Azure/azure-sdk-for-python/issues/2380#issuecomment-382546264,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AEt7dCKRyS26jjAMRB1dFhxTdfm02JWWks5tp7rhgaJpZM4TQwvn
.

It works on other disks attached to the machines in this resource group.

I don't think source_uri=managed_disk.id would work for other scenarios, as the source_uri is meant for unmanaged blob uri; but feel free to share the code that works and I will cross check.

Thanks for quick responses :)
The code I shared above works for 12 machines in the same resource group.
It snapshot their disks correctly. The same code fails for 3 machines in
the same resource groups. There is nothing different between machines. They
were all created as unmanaged and converted to managed using the same
method.
    I don't think source_uri=managed_disk.id would work for other

scenarios
Other scenarios being 2 and 3 listed above? But according to the document I
sent it should work for scenario 1. The code we use is different for other
scenarios, but let's try to get to the bottom of this one first. I believe
the underlying issue is the same for all 3 scenarios.

Okay, for working case, can you share out the http trace with request & response payload? I believe you can get it by turning on debug/verbose logging?

We can only backup at certain times since it's a production environment.
Are there any server side logs that support could access?
You were mentioned on another thread with support. I think they should have
access to our subscription. Can you please respond there?
Thanks,
Tiho

Cleaning up old issues from 2016 - 2018. Please reopen this issue if it is still a concern.


Windows/MSVC support

As per title.

Thank you very much for your excellent proposal, @ddengster :D
I have just investigated the Microsoft x64 ABI, and such coroutine Windows support in libcoro and byuu's libco, please just give me more time to write a detailed plan.

Would love to see this.

Would also love to see support for this!

Would also love to see support for this!

I'm wondering whether there's any updates about this. Would be fantastic to use this on Windows as well.


chore(main): release 1.7.0

:robot: I have created a release beep boop
1.7.0 (2024-02-20)
Features

🎉 添加新的文章并更新依赖版本 (c3e9242)

This PR was generated with Release Please. See documentation.

:robot: Release is at https://github.com/viarotel/viarotel.github.io/releases/tag/v1.7.0 :sunflower:


Do not distribute documentation

With Packagist and GitHub

Coverage remained the same at 92.819% when pulling ce0e975c7506d62fa521d7c3e6f39f6b044fea32 on szepeviktor:patch-1 into d172836ce7819423fb259b3d75929424706b11f9 on FriendsOfPHP:3.0.

docs are out of phar. i would move them away from composer export too.
if one looks for docs, they can go to repo/page/run describe command
and docs are like 1.3MB
so, it's 1:1 between core team for now.
@julienfalque @kubawerlos @localheinz , any opinion?

I'm +0, happy to go either direction

I'm glad that you are not -0

I'm for removing the docs from dist, but isn't breaking links in README.rst a problem?

I'm eager to take that risk and see how many folks would complain, if any

I prepared https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.github.io/pull/5 to unblock this PR

Thank you @szepeviktor.

You're welcome.


Icons not displayed in docs right sidebar

Describe the bug
Font Awesome icons added with the icon shortcode are not displayed in the docs right sidebar, whereas they are nicely shown in the main table of contents.
To Reproduce
Steps to reproduce the behavior:

In the exampleSite example course, add an icon to a heading, using the icon shortcode.
Add the {{% toc %}} shortcode at the beginning.
The icon will be displayed in the table of contents added with the {{% toc %}} shortcode but will not be displayed in the right sidebar.

Expected behavior
I would expect the icon to be shown also in the right sidebar.
Technical details:

Academic Version: Latest (updated with the script).
Hugo Version: 0.72.0

See image attached. Icons are displayed in the main table of contents but not in the right sidebar.

This is appears to be a Hugo related issue - Bep posted a solution here https://github.com/gohugoio/hugo/issues/6081#issuecomment-633147234 . Feel free to click the Edit link at the bottom of an Academic Docs page to document it.


[Candidate 1v1 AKAs Magic ZH v1] Many rocks float above terrain

Observed behaviour
Many rocks float above terrain.
Expected behavior
Rocks sit tight on ground.
Screenshots

All these example rocks have been fixed, plus lots of ruins that block paths also removed to enable more free flow lanes to enemy base

Looks better in new version. There are still a couple floating rocks. Perhaps can do another polishing pass on them.
1

2

3

4

5

6

fixed and new version sent on discord.

Sending v4 on discord now. I cannot attach zip because winzip trial expired. I only have winRAR.
This will be the final version, i fixed about 20-30 rocks all around the map. If there are more, its taking too long so won't be fixed. Players haven't noticed even on the oldest versioin current 20k tournament,

Looks good to me. I would remove or lower these rocks though, because they are located in the middle of the pathway and at a glance give the impression of blockage.

To illustrate the point, here is a spot where rocks are less and lower, but unit cannot move over:

There are some other spots where rocks are high on passable terrain. Perhaps can be lowered a bit so they do not look like passage blockers.

those 2 rock screenshots fixed, sent v5 on discord

Ok the first removal is good.
The second one is not good, because now there is a terrain patch that looks passable but it is not:

I suggest to make it either passable or put big rock there.
Note though: I was able to pull USA Dozer through there. So impassable area seems to be very narrow. Perhaps needs to be bigger?
Here is video:
https://github.com/TheSuperHackers/GeneralsRankedMaps/assets/4720891/e5c54bf4-1162-4628-93fe-52467c71e2ef

fixed by increasing passable area. Will send v5 on discord again, replace old

This gap still acts strange. New video:
https://github.com/TheSuperHackers/GeneralsRankedMaps/assets/4720891/101a33a3-fe37-4659-94ed-f921db711c58

fixed named v5 still, sent on discord.


Create string_length.py

a simple python to get the length of a string

Thanks for your PR. Make sure to  star the repo.


kubernetes 1.4 no longer validates the certificate resource

Getting the error
error validating data: the server could not find the requested resource; if you choose to ignore these errors, turn validation off with --validate=false

trying to create a new certificate resource on a 1.4 cluster.
setting --validate=false does appear to resolve the issue for now.
The new third part resource requirements are documented in this k8s PR https://github.com/kubernetes/kubernetes/commit/620cc66ead8256ad27fceb61d5d37e6d6c0c3efc

Silly question, but are you sure you've imported k8s/certificate.yaml in your new cluster?

Yes, I have:
Error from server: error when creating "certmanager/certificate.yaml": thirdpartyresources.extensions "certificate.stable.k8s.psg.io" already exists```

I've been unable to reproduce this in my own 1.4 cluster. Can you get in touch with me on slack ?

After a hangouts call, we've discovered that running kubectl 1.3 with a 1.4 cluster causes these problems.


Confidence intervals and IRFs

Nice!
Is it possible to compute conf intervals for the forecasts?
Also, I'm not sure if this is w/i the scope of your package, but it's often convenient to derive IRFs w/ confidence bands.
Luca has some nice Julia options here.

Originally posted by @azev77 in https://github.com/fipelle/TSAnalysis.jl/issues/9#issuecomment-604054920

Confidence intervals
Although there is not a high-level interface to compute the confidence intervals yet, you could use the variance in the output of the Kalman filter or the subsampling methods. The latter is easier to implement. For instance, you could follow the steps below:

Compute the coefficients for a series of data partitions - for instance, generated with the artificial delete-d jackknife or the stationary bootstrap;
Compute a range of forecasts with the real data (and not the random partitions) using, in turn, each matrix of coefficients generated in the previous point;
Compute the empirical confidence intervals.

Impulse response functions
I know Luca, I am sure that the VectorAutoregression package is a good way to go for computing impulse response functions. I am not sure I will extend support to the IRFs anytime soon. I think I will give priority to other forecasting models (e.g., dynamic factor models) and basic analytics. However, I recon that it would be interesting to look at the IRFs of semi-structural models.

Sounds good.
Unfortunately VectorAutoregression.jl doesn't currently work & isn't being upgraded...

xref https://github.com/lucabrugnolini/VectorAutoregressions.jl/pull/8
VectorAutoregressions now passes tests under Julia 1.6

Thank you for this! I will get back to these features once a series of compatibility issues are resolved.

It would be good to have some cross interface between VectorAutoregressions.jl and MessyTimeSeriesOptim.jl to compute the IRFs of the models estimated with the latter (either just for VARs or VMA and DFMs as well).

It says the issue was closed.
Does that mean IRFs are now included?

@azev77 they are not online yet, but I have a private repo I am testing with the IRFs. They will be included in MessyTimeSeriesOptim.jl.


Design Meeting Notes, 7/27/2018

Mapped tuple types
#25947

Already been thinking about this a bit
We already special-case homomorphic mapped types

So we can special-case tuples as well
But we can't special-case keyof.
A homomorphic mapped type already has some strange behavior.

For example, homomorphic mapped types know not to collapse the keys to string in the presence of a string index signature like [x: string]: SomeType.

Leveraging existing mapped types means you don't need to split the world into two sets of types.

First off, in the proposal, we shouldn't change the order.
*
What about array-likes?

ReadonlyArray?

And what does readonly from a mapped type mean operating on a tuple type.

Does it feel weird that readonly doesn't apply to tuple element fields?

"Not really, but we could make tuple fields support readonly."

"It's not complete garbage"

[[Something about index signatures that catch unknown properties]]

[[Tangential discussion about how you can do this with intersections]]

Let's come back to the discussion: does all this actually solve the use-case described in the issue?

Could write
all<T extends unknown[]>(...args: T):
  Promise<{ [K in keyof T]: Unpromise<T[K]> }>;

Interesting to note: Unpromise is like awaited.

Conclusion: Let's see how the PR on the current direction

null/undefined as discriminators
#24193

We don't consider null or undefined as discriminators

Yes we do, we just don't narrow them from properties on object types since they're not unit types.

What you need to know is that these types have disjoint domains.

Might add some complexity to the control flow analyzer.

Can't just be based on identity.

What about in the following case?
type ErrorOrSuccess<T> =
  | { value: null, message: string }
  | { value: T };

In that case, you don't know if T could be null at runtime.
You really need to ensure that there are disjoint domains.

Conclusion: let's try this!

Narrowing unknown

Two things:

There was narrowing based on checking for presence in properties (using in).
There was a request to say "I know the type in this block"

in can potentially throw if the right side is null/undefined

So you can force something like
if (x && typeof x.a === "string" && /*...*/)

Current issue: you end up also generating new types as you narrow. We want a robust way to do this.

You get a gold star if you figure something out here :star:

Wrong date in the title?

Nope, we just forgot to post the notes when it happened


Improve rpcallowip in bitcoin.conf

Current coverage is 29.88%

Merging #21 into master will not affect coverage as of fede903

@@            master     #21   diff @@
======================================
  Files            7       7
  Stmts          271     271
  Branches         0       0
  Methods          0       0
======================================
  Hit             81      81
  Partial          0       0
  Missed         190     190

Review entire Coverage Diff as of fede903

Powered by Codecov. Updated on successful CI builds.


Descending order stream support

I want to know doest this support descending order stream, I found the doc in source code https://github.com/danieldg/ordered-stream/blob/master/src/lib.rs#L69, it says stream values must be ascending order.
But how can I make it to support descending order streams merge?

One simple way is to just use std::cmp::Reverse on the ordering element.

@danieldg The stream data may be too large and can not reverse in memory, the goal that I use stream is fetching data in lazy way.

Yes, that's what std::cmp::Reverse lets you do.

@danieldg the stream fetch data in an upstream which will stream data in descending order, how can Reverse make it to ascending without fetching all data first?

@danieldg Oh, I see what you means, thanks.


Include source-url

Without this, our current indexing system won't index your module....

@zoffixznet
Sorry I misunderstood this post was "ISUEE", not "Pull Request"

No problem :) As long as the META file is fixed :)


Add dependency on compile package

Without it, I get an error that the variable compilation-error-regexp-alist-alist is not defined.

Thanks, you are right!


Add orthographic profile

This PR adds a profile, as per https://github.com/lexibank/starostinkaren/issues/2
Tones are preserved with the slash notation.
There is one problematic lexeme that seems to be due the pylexibank provider not addressing the lexemes.csv file correctly, but I'd need to investigate more.
Note that the CLDF files are compiled with the latest commit to pylexibank master.

Ok, I'm merging -- sorry for the ts grapheme, it was my fault for being a bit too clever in compiling the first set of correspondences.


xt/examples-compilation.t doc/Language/containers.pod6

from
$ xt/examples-compilation.t doc/Language/containers.pod6
   # my Int \z = 42;
    # z := 100; # OK
    # z := "x"; # Typecheck failure
    # Cannot bind to 'z' because it is a term and terms cannot be rebound
    not ok 4 - doc/Language/containers.pod6 chunk 4 starts with “my Int \z” compiles

This example is not currently correct  and dies on the first bind:
23:43 < [Coke]> m: my Int \z = 42; z :=100;
23:43 < camelia> rakudo-moar 284b56232: OUTPUT: «===SORRY!=== Error while compiling <tmp>␤Cannot bind to 'z' because it
                 is a term and terms cannot be rebound␤at <tmp>:1␤------> my Int \z = 42; z :=100⏏;␤»

Bisectable6 output: https://gist.github.com/Whateverable/6f770a2858b5477de41b1581e4e067e6
Shows a change in behavior, but this may have never worked as intended. The example needs to be improved (and if it isn't intended to compile, should skip the compilation test.
Also check the other code that has the comment "Typecheck failure" as it is not failing - the example there is compiling and doesn't look like it intended to.
This code hasn't change in some time in the file.

Oh, that must be from my Rakudo PR from a bit before that release (rakudo/rakudo#4536).  I'll take a look at this – from a quick glance, it looks like we were documenting a bug as though it was intentional.  Oops!
(Though, in fairness, it took quite a while – and quite a few SO questions – to figure out which rebindings were supposed to be allowed, so I'm not surprised that our docs didn't always get it right.  With that PR merged, I really ought to get back to #3961 and make sure we have all the rules in one place in the docs)


[SPARK-15033][SQL] fix a flaky test in CachedTableSuite

What changes were proposed in this pull request?
This is caused by https://github.com/apache/spark/pull/12776, which removes the synchronized from all methods in AccumulatorContext.
However, a test in CachedTableSuite synchronize on AccumulatorContext and expecting no one else can change it, which is not true anymore.
This PR update that test to not require to lock on AccumulatorContext.
How was this patch tested?
N/A

cc @yhuai @rxin

Test build #57428 has started for PR 12811 at commit 1a5234e.

Test build #57428 has finished for PR 12811 at commit 1a5234e.

This patch fails Spark unit tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test FAILed.

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/57428/
Test FAILed.

retest this please

Test build #57437 has started for PR 12811 at commit 1a5234e.

Test build #57437 has finished for PR 12811 at commit 1a5234e.

This patch fails Spark unit tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test FAILed.

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/57437/
Test FAILed.

Test build #2951 has started for PR 12811 at commit 1a5234e.

Test build #2952 has started for PR 12811 at commit 1a5234e.

Test build #2953 has started for PR 12811 at commit 1a5234e.

Test build #2952 has finished for PR 12811 at commit 1a5234e.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Test build #2951 has finished for PR 12811 at commit 1a5234e.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Test build #2953 has finished for PR 12811 at commit 1a5234e.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Merging in master.


Question: Is it possible to only parse versions from tags based on a version prefix?

Let's say I have a monorepo with multiple projects where tags have the format {project}-v{version}.  Is it possible for PSR to only parse the previous tags that have a specified {project} tag prefix?
If I understand correctly, tag_format only specifies the format of the version string at the time of creating new tags?

Hi @andrewcstewart :wave:
Your understanding of the tag_format option is correct.
I have seen a couple of attempts at doing this - e.g. via storing a separate pyproject.toml in each project subdirectory with the different configuration in each, and then cd-ing during the workflow to release each project. That works ok, except that the commits are parsed from the repo as a whole, meaning a feature scoped to one project would register as a feature in every project.
There's also a PR which is another interim solution, but it needs some tests adding. Monorepo support is still an open discussion.

Thanks for the info @bernardcooke53 - Do you think the idea of a tag-prefix-filter would make for a good feature request?

Also, apologies if this is a naive question - but why do we have to parse the git tags to get the next version number at all?  Why can't that just be parsed from the pyproject.toml and/or other files where the new version numbers will be written to?

@bernardcooke53 sorry for multiple replies, but digging through the code here I think this could be a pretty simple feature to enable monorepos.  I created a feature request: https://github.com/python-semantic-release/python-semantic-release/issues/579
I have the motivation and hopefully the time soon to draft a PR.  Would welcome any implementation thoughts / guidelines.
I'll close this question as answered too.


oid attributes fail validation on debug page

The engine IdP debug page (https://engine.demo.openconext.org/authentication/sp/debug) has a few bigger and smaller issues, also see attached screenshot

An image seems to be missing in the top left
When using an IdP that provides urn:OID attributes only, like e.g. surfnets DIY IdP, the debug page incorrectly reports various attributes (I assume UID and SHO) cannot be validated, however login in connected services works as engine does correctly interpret the right urn:OID attributes.
Various urn:OID attributes are not mapped to normal, descriptive displaynames

To reproduce, login via the DIY IdP with user student5 pass: student5

The friendly name is now displayed correctly.
What's still open now is:

Reports that "urn:mace:dir:attribute-def:uid requires at least 1 values" while IdP sends urn:oid:0.9.2342.192003<IP_ADDRESS>, which will work with EngineBlock.


::marker pseudo-class is ignored

First of all, thank you for making such a nice product. I am using it for generating PDFs in my projects. An issue I noticed when I pass a particular CSS property,
ol li::marker {
  color: rgb(117, 154, 199);
  display: inline-block;
  width: 1em;
  margin-left: -1em;
}

::marker pseudo-class is ignored.
ul li::before { content: "•"; color: rgb(117, 154, 199); display: inline-block; width: 1em; margin-left: -1em; }  works fine though. I had tested this on both Chrome and Chromium and ::marker is showing up as expected, so my doubt is on puppeteer.

Ignored for styling or as a CSS selector?

The styles inside the ::marker are not applied on the PDF. If I save the HTML and CSS used for generating the PDF, and open it in Chrome or Chromium, I can see the ::marker class applied.

That might be an issue with the PDF renderer from Chromium. Can you confirm that it is working if you print that page to PDF using Chrome?

Works fine when print and saved as a PDF from both chrome and chromium.

Currently, in the docker container on the server, I have Chrome CHROME_VERSION="81.0.4044.138-1". I had tried to use the latest chrome[91.0.4472.114], and after the 1st PDF generation, it stops working for some reason. I had to use CHROME_VERSION="81.0.4044.138-1". Is there any Chrome version that puppeteer-sharp recommends, and if yes, where can I find that info?

This piece of code worked for me.
using var browser = await Puppeteer.LaunchAsync();
using var page = await browser.NewPageAsync();
await page.GoToAsync("https://www.w3schools.com/css/tryit.asp?filename=trycss_marker");

Console.WriteLine("Generating PDF");
await page.PdfAsync(Path.Combine(Directory.GetCurrentDirectory(), "bullets.pdf"));

My API looks like this,
       [HttpPost]
        public async Task<IActionResult> Post([FromBody] RequestObject req)
        {
            try
            {

                using (var browser = await Puppeteer.LaunchAsync(new LaunchOptions
                {
                    Headless = true,
                    Args = new[] {   "--no-sandbox",
                        "--disable-setuid-sandbox", }
                }))
                using (var page = await browser.NewPageAsync())
                {
                    await page.SetContentAsync("<!DOCTYPE html><meta charset=\"UTF-8\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=2.0\"><meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\">" + req.Html + "");
                    await page.AddStyleTagAsync(new AddTagOptions()
                    {
                        Content = req.Css
                    });

                    var stream = await page.PdfStreamAsync();
                    return new FileStreamResult(stream, "application/pdf");
                }

            }
            catch (Exception ex)
            {

                return BadRequest(ex);
            }

        }

Let me try your method.

Same result. Didn't work for me. Could be the difference in chromium versions. in my test code, I am pointing to, public const int DefaultRevision = 706915; Is there any difference between my Chromium and yours?

I'm using the default one. Are you getting the same outside docker?

yes.

hmm no idea.

tried your code and still no luck.

Everything worked when I updated the puppeteer-sharp to version 4. Now Chromium is 848005. in my docker, which version of Chrome can I install to get this working? I already have puppeteer-sharp 4.0 in my docker project. My chrome version inside docker is 81.0.4044.138-1.

Finally, I got it working from Docker. As you said in the beginning, it was the issue with the old chrome version. Now I am using Chrome 88.0.4324.96 inside docker and everything seems to work. I had to track the 848005 chromium version release date and used a chrome version in that month. The latest chrome seems not to work well with Puppeteer.


+jacobian option for optimizers & service functions

Summary:
Add options to include Jacobian correction for optimizers and related service functions in order to allow max a posteriori (MAP) estimates as well as the existing penalized maximum likelihood estimates (MLE).
Description:

Add a boolean template parameter jacobian to each of the optimizers  in src/stan/optimization at the entry point for the optimization service functions;  a value of true uses Jacobian and value of false turns off Jacobian adjustments;  this should be the final template parameter and should default to false.

Add a boolean template parameter jacobian to the optimization service functions in src/stan/services;  a value of true uses Jacobian adjustment and value of false turns it off; this should be the final template parameter and default to false.  The value set here should be passed as a template parameter to the optimization functions.

Expected Output:
MLE or MAP estimates as specified.
Additional Information:
By making the new template parameter the last in the chain, this should be backward compatible.
Current Version:
v2.30.0

Closed by https://github.com/stan-dev/stan/pull/3152


Level ID XXXXXXXXX could not be downloaded

Hi. I decided to try this SMM2 level viewer because the other one by JiXiaomai stopped working for me even though it was working before.
When I type in the level code and click "Download Level", I get a very quick error message that says "Level ID XXXXXXXXX could not be downloaded", where the XXXXXXXXX is the code.
It still creates a .BCD file, but when I attempt to load it, it gives another quick error: "Level file could not be parsed." By quick error, I mean it appears and disappears almost instantly, and I had to record my screen in order to read it.
I'm guessing that something stopped working on the server's end.

If you try https://tgrcode.com/mm2/level_data/XXXXXXXXX you'll see it's a maker code, not a level code. The temp.bcd is always created, it's essentially a temporary file, but is just an empty file if it's not a valid level. The message lasts for 3 seconds, I was not sure if that was long enough

When I go to the website, it says This domain was recently registered at Namecheap.com. Please check back later!
Is the website and software working for everyone else?

The domain name nearly expired, but I've renewed it a few days ago. Most
regions should be fixed but I'll check
On Mon, Dec 27, 2021, 1:16 AM unsightedmetal6 @.***>
wrote:

When I go to the website, it says This domain was recently registered at
Namecheap.com. Please check back later!
Is the website and software working for everyone else?
—
Reply to this email directly, view it on GitHub
https://github.com/TheGreatRambler/toost/issues/2#issuecomment-1001421760,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AHTNY2CLXFQ7XFXSYFUBGVDUTAOGNANCNFSM5KZHU44A
.
Triage notifications on the go with GitHub Mobile for iOS
https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675
or Android
https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.
You are receiving this because you modified the open/close state.Message
ID: @.***>

It works now!


feat: add storage-class flag to install command

Refs: #16
Closes: #16

Codecov Report

Merging #17 (a4cd290) into master (50dd1a3) will increase coverage by 0.10%.
The diff coverage is 100.00%.

@@            Coverage Diff             @@
##           master      #17      +/-   ##
==========================================
+ Coverage   52.49%   52.59%   +0.10%
==========================================
  Files          17       17
  Lines         461      462       +1
==========================================
+ Hits          242      243       +1
  Misses        198      198
  Partials       21       21

Impacted Files
Coverage Δ

cmd/swctl/install.go
34.00% <100.00%> (+1.34%)
:arrow_up:

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 50dd1a3...e1252c9. Read the comment docs.


CASMINST-6543: Linting

Description
MitchLint (TM)

Checklist

[X] If I added any command snippets, the steps they belong to follow the prompt conventions (see example).
[X] If I added a new directory, I also updated .github/CODEOWNERS with the corresponding team in Cray-HPE.
[X] My commits or Pull-Request Title contain my JIRA information, or I do not have a JIRA.

/backport release/1.4 release/1.3


Strip binaries for release

It seems to me (I could be wrong) that the binaries are not stripped when released.
Stripping comes with some tradeoff, but it is usually well worthed in the release.
The loraserver goes from 16MB to 9.2MB when stripped -> +40% reduction
Similarly the lora-app-server.
To strip the binaries is sufficient to add "-w -s" to the -ldflags.

Hi @siscia I'll look into it to see if there is any negative impact. For now this hasn't been an issue as usually a few more megabytes isn't an issue, but if there is no impact, then I don't see a reason why we shouldn't strip the binaries :-)

:+1: I definitely agree that it is not a pressing issues.


logstash heap to small on systems with > 96G ram

What version (commit) do you encounter this issue on?
ALL RPC version
What type of issue is this (bug, feature, documentation, regression)?
bug
What is the expected behavior?
Use 1/4th of the installed RAM just for logstash, I might go far as even using 1/2 when using > 64G
What is actually happening?
Uses "hard coded" 16G
How can we reproduce this issue?
root@infra01:/opt/rpc-openstack/rpcd/playbooks# ssh logging01_logstash_container-a2fb86f1 grep LS_HEAP_SIZE /etc/default/logstash; free -g
LS_HEAP_SIZE=16384m
total       used       free     shared    buffers     cached
Mem:           125         53         72          0          2         24
-/+ buffers/cache:         26         99
Swap:            7          0          7
How can we verify your issue is addressed?
LS_HEAP_SIZE is configured appropriately
If this is a large issue, what can be done immediately to alleviate the issue while working on a longer-term solution?
Small issue
What is your evaluation on the importance of this issue, and why?
P3 prio
What branches / milestones do you believe this issue should target?
The list below is what is currently supported for backports, remove branches you do not wish to target.

[x] Master
[ ] liberty-12.0
[x] liberty-12.1
[ ] kilo

PR pending

FYI the jre cannot allocate more than 16GB of RAM - that is why the 16GB limit was there. I would recommend that the calculation maintains the 16GB limit otherwise the JRE will try to book the RAM, but can never use it.

@odyssey4me  We are running already logstash with > 32G RAM. There's no 16GB limit. Not sure where you get this limit from


How to import the GridItem.vue

How to import the GridItem.vue in my project? I got an error when i import GridItem.vue.I must import vue-grid-layout.js.
I changed GridItem.vue:
.vue-grid-item.vue-draggable-dragging { transition:none; z-index: 3; }
But my import like this:
import VueGridLayout from './../../node_modules/vue-grid-layout/dist/vue-grid-layout'
How to change vue-grid-layout.js or import GridItem.vue?

if you have installed vue-grid-layout from npm (npm install --save vue-grid-layout) then...
in any component you can use below statements
import VueGridLayout from 'vue-grid-layout';
var GridLayout = VueGridLayout.GridLayout;
var GridItem = VueGridLayout.GridItem;

export default {
     components: {
        GridLayout,
        GridItem,
    },
    data(){
        return {
        }
    }
}

Thanks for your reply!
I mean that  i change the content of source code(GridItem.vue), but it doesn't reflected in the pages......
How can make changes to vue-grid-layout.js?


Does Pronunciation assessment support PhraseListGrammar ?

I am using the Pronunciation Assessment along with a reference text, and speaking according to the reference text yields relatively good scores. However, when I use an empty string as the reference text and additionally use PhraseListGrammar to improve the recognition of certain words, it seems that PhraseListGrammar does not work with Pronunciation Assessment.
Has anyone used PhraseListGrammar for Pronunciation Assessment and encountered similar issues?
    enable_miscue = True
    enable_prosody_assessment = True
    pronunciation_config = speechsdk.PronunciationAssessmentConfig(
        reference_text="",
        grading_system=speechsdk.PronunciationAssessmentGradingSystem.HundredMark,
        granularity=speechsdk.PronunciationAssessmentGranularity.Phoneme,
        enable_miscue=enable_miscue)
    # pronunciation_config.reference_text = reference_text
    pronunciation_config.phoneme_alphabet = 'IPA'
    pronunciation_config.nbest_phoneme_count = 2
    pronunciation_config.reference_text = ""
    if enable_prosody_assessment:
        pronunciation_config.enable_prosody_assessment()

    # Creates a speech recognizer using a file as audio input.
    language = 'en-US'
    speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, language=language,
                                                   audio_config=audio_config)
    # apply pronunciation assessment config to speech recognizer
    phrase_list_grammar = speechsdk.PhraseListGrammar.from_recognizer(speech_recognizer)
    phrase_list_grammar.addPhrase("ielts")
    phrase_list_grammar.addPhrase("hot")
    phrase_list_grammar.addPhrase("is")

    pronunciation_config.apply_to(speech_recognizer)

@hmthang96 Azure Pronunciation Assessment relies on Azure Speech Recognition and we share the same API. I've tested the 1PhraseListGrammar in my machine and did not find any issues.


Work engine

A lot of these changes came from the force-async-prov branch. The bulk of the work I did was around provision_job, provision_subscriber, and work-engine (which I brought in from our work on cap-server).
The gist behind async is that a provision request comes in with a accepts_incomplete=true flag. We create a provision job that runs in the background writing the output to a channel. While the job is running, the provision call returns 202 ACCEPTED to the catalog. When the provision job finishes, it will write its output to the channel which the subscriber pulls the message from it and updates etcd with either failed or succeeded and extracted_credentials.

@jmrodri how many of those patches are only relevant to the async work? There's also a few conflicts.


Bug: Pulldown menus - Last entry not shown completely

OPNsense 16.1.7-amd64 & Firefox 45.0.1:
When pulling down pull-down-menus with a lot of entries, such as /Firewall/Rules/Edit rule/Protocol, the last entry at the bottom of the pull-down-menu is only shown half, i.e. it is cut off horizontally approximately at it's middle line.
Another example would be "Destination" in the same menu.
Cheers

Same issue on OPNsense 16.7.a_648-0c6e70a3c [16.7.a_456-01b168c51]

The current fix forces reversed artefacts such as the following:

I've said this before on the PR: having the last item "cut off" looks a bit weird but is in some UIs used to indicate that further entries are available. I am unsure whether it should be fixed or kept as is.

some attempts have been made, but this won't fix easily. for better or for worse assume this working as intended.


Clarifications

I'm a technical writer at Ping, and we've noticed a couple of pieces that could be clarified here.
First, in the "Then make sure your redirect URL is set to your external URL:" procedure, we need to add another step, as we've found that two Redirect URIs are needed: One that uses the external URL as currently described, and another that uses the current URL with /pa/oidc/cb appended to the end.
Second, it might be worth discussing custom claim mapping and the license limitations. Perhaps a note in the "Enable PingAccess to use custom claims" section along these lines:
It is possible to map Azure custom claims to headers using PingAccess, but that capability requires a full PingAccess license. Contact Ping for instructions and licensing information.

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

ID: a9dd280a-20a3-d0b7-6591-c38a0b2f3c8e
Version Independent ID: d066ade6-8b55-0b3e-3d13-6988c392e51e
Content: Header-based authentication with PingAccess for Azure AD Application Proxy
Content Source: articles/active-directory/manage-apps/application-proxy-configure-single-sign-on-with-ping-access.md
Service: active-directory
Sub-service: app-mgmt
GitHub Login: @kenwith
Microsoft Alias: kenwith

@OallenPing Thanks for the feedback !  I have assigned this issue to content author to investigate and update the document as appropriate.

@kenwith I agree with the suggestions above. I suggest the following edits:

In the section "Then make sure your redirect URL is set to your external URL:" add step 5: "Then add an additional redirect URL with the format of /pa/oidc/cbnd.
Add a note in the "Enable PingAccess to use custom claims" :
It is possible to map Azure custom claims to headers using PingAccess, but that capability requires a full PingAccess license. Contact Ping for instructions and licensing information.

See referenced PR above. If other updates are needed please go ahead and re-open. #please-close

See referenced PR above. If other updates are needed please go ahead and re-open. #please-close


Add local logdb for tier0 test

@hufnagel, Dirk please review

Seems to have done it. New Tier0 replay with this patch in doesn't show the JobSubmitter errors anymore.

Thanks for checking, Dirk. I will merge after I cut the production (cmsweb version) tag.

@hufnagel, Dirk this is merged now.
And below commit is needed for Tier0
https://github.com/dmwm/WMCore/pull/8500/commits/6e8ff08f25240f28eff1e9afc2763c073aa559f1