Coder Social home page Coder Social logo

worldtidesinfocustom's Introduction

worldtidesinfocustom

world tides info custom component for Home Assistant.

GitHub release hacs_badge

This component is used to retrieve tide information for a dedicated location (all over the world) : https://www.worldtides.info/

This component allows to :

  • display the tide curve (height)
  • give the current height
  • give a forcast height (1 hour)
  • give the next tide
  • give tide tendancy, amplitude
  • display location on default map
  • display tide prediction over user defined period
  • insert tide extrema in calendar

==> the monitored location is either static, either given by GPS data (tracker)

WorldTidesInfo uses credit. Hereafter example with 1 day prediction :

  • In static, refresh rate (Scan Interval) is every 15minutes with refresh of data from server once a day (3 credits). NB: At init 5 credits.

  • In motion, refresh rate (Scan Interval) is every 15minutes with refresh of data from server once a day (3 credits), or if the position has moved more than a user parameter defined in UI (the new position information are then request : 5 credits)

  • Please refer to https://www.worldtides.info/developer for pricing (as few requests are done per month, prepaid seems to be the best deal).

    • As an example, in static, as the request per day per location uses 3 credits : for one location, 20000 credits will last ~18 years

Installation

Either use HACS (default), either manual

HACS (Home Assistant Community Store)

  1. Go to HACS page on your Home Assistant instance
  2. Select integration
  3. Press add icon and search for worldtidesinfocustom
  4. Select worldtidesinfocustom and install

Manual

Manual Procedure
  1. Download the folder worldtidesinfocustom from the latest release (with right click, save link as)
  2. Place the downloaded directory on your Home Assistant machine in the config/custom_components folder (when there is no custom_components folder in the folder where your configuration.yaml file is, create it and place the directory there)
  3. restart HomeAssistant

Breaking change

detail description

Version V2.5.0: Remove CreditCallUsedForInit attribute as init data are also refresh periodically (1 month)

Version V2.6.1: After this version, the information given is by default with unit system configured in HA (metric or imperial). NB: Before V2.6.0, information were given only in metric. At V2.6.0 the information given is by default in metric.

Version V2.7.0: After this version Coeff attribute is renamed in Coeff_resp_MWS . MWS stands for mean water spring.

Version V3.0.0: After this version worldtides_request_interval configuration optional parameter is removed.

Using the component

Example of YAML
##configuration.yaml example
sensor:
  - platform: worldtidesinfocustom
    name: royan_tides
    api_key: YOUR_API_KEY
    latitude: 45.61949378902948
    longitude: -1.0318721687376207
#    unit: home_assistant
#    station_distance: 50
#    day_tide_prediction : 1
#    vertical_ref : LAT
#    plot_color: 2,102,255
#    plot_background: 255,255,255
#    scan_interval: 900

camera:
  - platform: worldtidesinfocustom
    name: royan_tides

where :

  • name is name of your sensor
  • api_key is the key you get from world tides info
  • latitude, longiude is the place you want to see (hereabove Royan,France)

and optional parameter

  • unit: the unit that you have chosen in home_assistant or metric or imperial (to display height in meter or feet, to specify station_distance in km or miles)
  • station_distance: the radius in km/miles from location to retrieve tide station
  • day_tide_prediction: the prediction you want to display (cf. camera)
  • vertical_ref : the reference you want to use for tide (default is LAT). See datum ref
  • plot_color : the comma-separated RGB values for the tide graph foreground color
  • plot_background : the comma-separated RGB values for the tide graph background color
  • scan_interval : the scan rate to refresh entity (should not be used)

NB:UI allows to have more features.

  • Several sensors and several cameras are provided with attibutes. To see some attributes as sensor, you have to use template inside configuration.yaml.
Please follow the hereafter example
##configuration.yaml example
sensor:
  - platform: template
    sensors:
      tide_royan_next_high:
        value_template: '{{ as_timestamp(states.sensor.royan_tides.attributes.high_tide_time_utc) | timestamp_custom("%a %d/%m/%Y %H:%M") }}'
        friendly_name: "Royan Next High Tide"
      tide_royan_next_low:
        value_template: '{{ as_timestamp(states.sensor.royan_tides.attributes.low_tide_time_utc) | timestamp_custom("%a %d/%m/%Y %H:%M") }}'
        friendly_name: "Royan Next Low Tide"
      tide_royan_next_high_height:
        value_template: "{{ state_attr('sensor.royan_tides','high_tide_height')  }}"
        friendly_name: "Royan Next High Tide Height"
        unit_of_measurement: m
#change m into ft , if you are in imperial
      tide_royan_next_low_height:
        value_template: "{{ state_attr('sensor.royan_tides','low_tide_height')  }}"
        friendly_name: "Royan Next Low Tide Height"
        unit_of_measurement: m
#change m into ft , if you are in imperial
      tide_royan_credit:
        value_template: "{{ state_attr('sensor.royan_tides','CreditCallUsed')  }}"
        friendly_name: "Royan Tide Credit"
        unit_of_measurement: credit
      tide_royan_current_height:
        value_template: "{{ state_attr('sensor.royan_tides','current_height')  }}"
        friendly_name: "Royan Tide Current Height"
        unit_of_measurement: m
#change m into ft , if you are in imperial
      tide_royan_station:
        value_template: "{{ state_attr('sensor.royan_tides','tidal_station_used')  }}"
        friendly_name: "Royan Tide Station used"
      tide_royan_coeff_mws:
        value_template: "{{ state_attr('sensor.royan_tides','Coeff_resp_MWS')  }}"
        friendly_name: "Royan Tide Coeff MWS"
        unit_of_measurement: "%"
      tide_royan_amplitude:
        value_template: "{{ state_attr('sensor.royan_tides','tide_amplitude')  }}"
        friendly_name: "Royan Tide Amplitude"
        unit_of_measurement: m
#change m into ft , if you are in imperial


## CAMERA
camera:
  - platform: generic
    name: Royan_tides_curve
    still_image_url: https://127.0.0.1:8123/local/royan_tides.png
    verify_ssl: false

Dashboard example

Hereafter the display of attributes within lovelace UI

Size Limit CLI

Hereafter an example under lovelace UI

Size Limit CLI

(*NB*: plot_color, plot_background options can be used to change color for plot curve)

and a dedicated view on tide amplitude / coeff (over Mean Water Spring) on several days

Size Limit CLI

and a dedicated view credit (the station monitored and all other declared)

Size Limit CLI

An example of the camera that plot the current tide height respect to current prediction

Size Limit CLI

(*NB*: mat_plot_transparent_background option can be used to have transparent background)

Hereafter an example of picture element card under lovelace UI

Size Limit CLI

(*NB*: plot_color, plot_background options can be used to change color for plot curve)
with the source code of the card (please **ADAPT** the name of sensors respect to your case)
##UI interface example (can be entered via manual card)
elements:
  - entity: sensor.tide_royan_station
    style:
      background-color: 'rgba(0, 0, 0, 0.3)'
      bottom: 0
      color: white
      font-size: 14px
      left: 0
      line-height: 34px
      padding: 0 15px
      pointer-events: none
      transform: initial
      font-weight: bold
      width: 100%
    type: state-label
  - entity: sensor.tide_royan_current_height
    style:
      color: white
      font-size: 12px
      line-height: 32px
      margin: 150px 5px
      pointer-events: none
      font-weight: bold
      right: 0
      top: 0
      transform: initial
    prefix: 'Current Tide Height : '
    type: state-label
  - entity: sensor.tide_royan_next_high
    style:
      color: black
      font-size: 12px
      line-height: 32px
      margin: 1px 35px
      pointer-events: none
      font-weight: bold
      right: 0
      top: 0
      transform: initial
    prefix: 'Next High Tide : '
    type: state-label
  - entity: sensor.tide_royan_next_high_height
    style:
      color: black
      font-size: 12px
      line-height: 32px
      margin: 30px 35px
      font-weight: bold
      pointer-events: none
      right: 0
      top: 0
      transform: initial
    prefix: 'High Tide Height: '
    type: state-label
  - icon: 'mdi:arrow-up-bold'
    style:
      color: black
      line-height: 32px
      margin: 39px 20px
      pointer-events: none
      right: 0
      top: 0
      transform: scale(0.8)
    type: icon
  - entity: sensor.tide_royan_next_low
    style:
      color: black
      font-weight: bold
      font-size: 12px
      line-height: 32px
      margin: 59px 35px
      pointer-events: none
      right: 0
      top: 0
      transform: initial
    prefix: 'Next Low Tide : '
    type: state-label
  - entity: sensor.tide_royan_next_low_height
    style:
      color: black
      font-weight: bold
      font-size: 12px
      line-height: 32px
      margin: 84px 35px
      pointer-events: none
      right: 0
      top: 0
      transform: initial
    type: state-label
    prefix: 'Low Tide Height : '
  - icon: 'mdi:arrow-down-bold'
    style:
      color: black
      line-height: 40px
      margin: 88px 20px
      pointer-events: none
      right: 0
      top: 0
      transform: scale(0.8)
    type: icon
camera_image: camera.royan_tides_curve
type: picture-elements

NB: watch out : in the code we use the camera_image keyword and not image

Hereafter an example of the default map under lovelace UI

Size Limit CLI

Hereafter an example of the prediction within Calendar

Size Limit CLI

Hereafter an example of update thanks to a boat tracker :

  • blue : a boat tracker
  • purple : the difference place where tide info has been taken

NB: a boat tracker can be easily given by running HomeAssistant Application on your phone. The application offers to you a tracker with lat/long of your current position.

Size Limit CLI

with the change of tide station

Size Limit CLI

Each time the position is changed (distance greater than the UI parameter) the information is request to server (shown by the credit used)

Size Limit CLI

Detail Configuration parameter for UI, (Deprecated for YAML for sensor)

Name Type Requirement Supported Default value Config Description
name string Optional v1.0.0 worldtidesinfocustom YAML / UI name for sensor entity (Nb: under UI, this parameter is required ; under YAML, only one declaration can be made with default value)
api_key string Required v1.0.0 n.a YAML / UI API Key given by world tide info.
latitude float Optional v1.0.0 latitude in your Home Assistant configuration YAML / UI Latitude (in decimal degrees) of the location for which to return the tidal data .
longitude float Optional v1.0.0 longitude in your Home Assistant configuration YAML / UI Longitude (in decimal degrees) of the location for which to return the tidal data .
unit enumerated Optional V2.6.0 home_assistant YAML / UI either unit are home_assistant , metric or imperial. home_assistant means that unit system will be taken from Home Assistant configuration
station_distance positive int Optional v2.0.0 50km/miles YAML / UI The maximum distance (in kilometers if metric, in miles if imperial) for which to return tidal data from a tidal station instead of from the global background data (i.e. prediction from satellite data)
day_tide_prediction positive int Optional v10.0.0 1 day YAML / UI The number of day in advance, you want to see in long_plot camera
vertical_ref string Optional v1.0.0 LAT YAML / UI string that represents the vertical reference you want to use for tide (NB: LAT = Lowest Astronomical Tide as reference). See datum ref
plot_color string Optional v2.4.0 2,102,255 YAML / UI string that represents the comma-separated RGB values for the tide graph foreground color
plot_background string Optional v2.4.0 255,255,255 YAML / UI string that represents the comma-separated RGB values for the tide graph background color
mat_plot_transparent_background boolean Optional v11.2.0 False UI boolean that allows to have transparent background for matplot curve
live_location enumerated Optional v6.0.0 Static UI static or from_sensor, static means that the monitored location is static, from_sensor the position is given by source
update_sensor_distance positive int Optional v6.1.0 50km/miles UI if the sensor moves by update_sensor_distance then the tide info are updated from server
source string Optional v6.0.0 n.a UI the entity that contains GPS position. E.g. source.boat_tracker , device_tracker.sm_g930f
latitude_attr_name string Optional v6.0.0 latitude UI the attribute of entity that contains latitude position
longitude_attr_name string Optional v6.0.0 longitude UI the attribute of entity that contains longitude position
scan_interval positive int Optional v1.0.0 900s YAML It's the time (in seconds) between 2 refresh of sensor with its attributes

Camera are automatically created by UI , Hereafter deprecated method for camera for YAML

Name Type Requirement Supported Default value Config Description
name string Required v4.0.0 worldtidesinfocustom YAML name for sensor entity (the name of SENSOR of YAML)

Detail Sensor attribute description

The platform create several sensors (name given in UI/configuration.yaml).

Name Supported format unit Description
NAME given in configuration.yaml (e.g. royan_tides) v1.0.0 strings HA local time gives the next tide low or high with HA local time
NAME_current_tide_height v4.0.0 float m/ft gives the current height
NAME_forecast_tide_height v13.1.0 float m/ft gives the forecast height (1 hour)
NAME_next_high_tide_height v4.0.0 float m/ft gives the next high tide height
NAME_next_low_tide_height v4.0.0 float m/ft gives the next low tide height
NAME_credit_used v4.1.0 int N/A gives instantaneous credit used (due to worldtides info request)
NAME_global_credit_used v4.1.0 int N/A gives instantaneous credit used for all monitored location.
NAME_remaining_time_for_next_tide v4.2.0 float h gives remaining time to next tide.
NAME_next_low_tide_time v4.2.0 H:M local gives local time of next low tide.
NAME_next_high_tide_time v4.2.0 H:M local gives local time of next high tide
NAME_current_tide_coeff_resp_MWS v4.2.0 float % gives coeff sensors.
NAME_current_tide_amplitude v4.2.0 float m/ft gives current amplitude.
NAME_tide_station_info v7.2.0 string N/A gives the current tide station used.

The platform create cameras (name given in UI/configuration.yaml).

Name Supported format unit Description
NAME_curve_picture v4.0.0 string state give the state of camera (idle) and the image : tide prediction figure respect to local time (0h-24h)
NAME_plot_picture v5.0.0 string state give the state of camera (idle) and the image : tide prediction figure respect to current time with current position (time frame from -6h to +18h)
NAME_long_plot_picture v10.0.0 string state give the state of camera (idle) and the image : tide prediction figure respect to current time with current position (time frame from -6h to +18h + (day_tide_prediction-1))

The platform create events for calendar (name given in UI/configuration.yaml).

Name Supported format unit Description
NAME v11.0.0 string m/ft give time and height for extrema (prediction duration is based on day_tide_prediction)

The sensor "NAME" has a set of attributes describes hereafter

Name Supported format unit Description
Unit displayed V2.6.0 string N/A either metric or imperial
Vertical reference v1.0.0 string NA string that represents the vertical reference you want to use for tide (NB: LAT = Lowest Astronomical Tide as reference). See datum ref
Tidal station used v2.0.0 string NA strings that gives the tidal station used for data
High tide time utc v1.0.0 in ISO 8601 standard date and time format, e.g.: 2017-06-12T19:47+0000 UTC Next High tide in UTC
High tide height v1.0.0 float m/ft Next High tide height
Low tide time utc v1.0.0 in ISO 8601 standard date and time format, e.g.: 2017-06-12T19:47+0000 UTC Next Low tide in UTC
Low tide height v1.0.0 float m/ft Next Low tide heiht
time_to_next_tide v3.2.0 delta time in H:M:S.xx delta time Time to Next Tide
tide_tendancy v3.2.0 string NA Up, Down,Slack (Up), Slack (Down). Slack is the period within +/- 1 hour around tide (high or low)
next_tide_amplitude v3.0.0 float m/ft The next amplitude for (Hight Tide - Low Tide) (it is absolute)
next_Coeff_resp_MWS v3.0.0 float % coeff that represents the next (absolute(Hight Tide - Low Tide) / (MHWS - MLWS) * 100) See datum ref . Nb this figure can be greater than 100%, if the tide amplitude is greater than MeanSpringWater : for instance during High Spring Water
Current height utc v1.0.0 in ISO 8601 standard date and time format, e.g.: 2017-06-12T19:47+0000) UTC height sample used to compute current height
Current height v1.0.0 float m/ft current height (HA local time)
tide_amplitude v2.7.0 float m/ft The current amplitude for (Hight Tide - Low Tide) (it is absolute)
Coeff_resp_MWS v2.7.0 float % coeff that represents the current (absolute(Hight Tide - Low Tide) / (MHWS - MLWS) * 100) See datum ref . Nb this figure can be greater than 100%, if the tide amplitude is greater than MeanSpringWater : for instance during High Spring Water
CreditCallUsed v1.0.0 int credit number of credit used between 1 scan interval
Data request time v1.0.0 string like "01:02:39 17/01/21" HA local time time of last request to world tide info server
Plot v1.0.0 string unix path name of the file that contains the tide curve picture. NB: the curve is given in local time of the tide location. It can be a shift of 1 hour if data is not provided by tide station but satellite data
Station around nb v2.0.0 int N/A number of tide station within radius specified in configuration.yaml
Station distance v2.0.0 float km/miles the radius used to retrieve tide station around location
Station around name v2.0.0 string location name tide station list separate by ";"
Station around time zone v2.0.0 string time zone Full timezone name (ex. America/Los_Angeles)
Tidal station used info lat v6.2.0 float deg the latitude of the used tide station (if exists)
Tidal station used info long v6.2.0 float deg the latitude of the used tide station (if exists)
Current distance to station v6.2.0 float km/miles the current distance to the used tide station (works with moving sensor)
live_location v6.0.0 enum NA monitored location : static or from_sensor
source_id v6.0.0 string NA the sensor that gives position. E.g. source.boat_tracker , device_tracker.sm_g930f
ref lat v6.0.0 float deg the latitude of monitored location
ref long v6.0.0 float deg the longitude of monitored location
current lat v6.0.0 float deg the current latitude of source id
current long v6.0.0 float deg the current longitude of source id
distance_from_ref v6.1.1 float km/miles distance between current lat/long and monitored location

Detail Option parameter for UI

The value has the default one or the last set (either during 1rst declaration through UI, either during option phase through UI).

Name Type unit request to server (if value changes) Supported Description
show_on_map boolean n.a. No v3.1.0 boolean that allows to display on map the monitored tide location
station_distance positive int km/miles Yes v7.0.0 The maximum distance (in kilometers if metric, in miles if imperial) for which to return tidal data from a tidal station instead of from the global background data (i.e. prediction from satellite data)
day_tide_prediction positive int day Yes v10.0.0 The number of day in advance, you want to see in long_plot camera
plot_color string n.a. Yes v7.0.0 string that represents the comma-separated RGB values for the tide graph foreground color
plot_background string n.a. Yes v7.3.0 string that represents the comma-separated RGB values for the tide graph background color
mat_plot_transparent_background boolean n.a No v11.2.0 boolean that allows to have transparent background for matplot curve
update_sensor_distance positive int km/miles No v7.3.0 if the sensor moves by update_sensor_distance then the tide info are updated from server

Wish/Todo list

  • make this integration as default in home assistant

Thanks to

Idea of picture element card given within community.home-assistant.io/t/world-tide-info-v2-api-graph

Thanks for all contributors !

Thanks home-assitant community !

Thanks Home-assistant project !

Credit / Use Of / Purpose

Since V1.0.0 :

Since V5.0.0 :

Since V8.0.0 :

  • pyworldtidesinfo is used. The package was formely included within worldtidesinfo custom.

worldtidesinfocustom's People

Contributors

chrisromp avatar jugla avatar ktibow avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Forkers

ktibow simplemice

worldtidesinfocustom's Issues

No data displayed in integration

Describe the bug
2024-06-08 07:07:03.980 WARNING (MainThread) [homeassistant.util.loop] Detected blocking call to open inside the event loop by custom integration 'worldtidesinfocustom' at custom_components/worldtidesinfocustom/storage_mngt.py, line 81: file_handler = open(self._storage_full_path, "rb") (offender: /config/custom_components/worldtidesinfocustom/storage_mngt.py, line 81: file_handler = open(self._storage_full_path, "rb")), please create a bug report at https://github.com/jugla/worldtidesinfocustom/issues

To Reproduce
Steps to reproduce the behavior:

  1. Install custom integration
  2. look at

Expected behavior
Data displayed as expected

Screenshots
image

Desktop (please complete the following information):

  • OS: Windows
  • Browser all
  • Version all

Smartphone (please complete the following information):

  • Device: iPhone 13
  • OS: all
  • Browser all
  • Version all

Additional context
Installed integration added configuration with working API (Had another simple integration working at the same time with same credentials). No updates to data. Let me know if you need other info.

Do you want me to improve GitHub Actions?

If you want, I can add some advanced CI to your repo.
Let me know if you want a PR.

  • Do you want to enable auto-formatting whenever pushed?
  • Do you want packaged or independent (I recommend packaged because I can send updates)?

Sensor not appearing

I just cannot get the main Sensor to appear - I am using the exact code recommended
~~

  • platform: worldtidesinfocustom
    name: royan_tides
    api_key: 1c86297b-xxxx-xxxx-xxxx-xxxxxxxxxxx
    latitude: 45.61949378902948
    longitude: -1.0318721687376207
  • platform: template
    sensors:
    tide_royan_next_high:
    value_template: '{{ as_timestamp(states.sensor.royan_tides.attributes.high_tide_time_utc) | timestamp_custom("%a %d/%m/%Y %H:%M") }}'
    friendly_name: "Royan Next High Tide"
    tide_royan_next_low:
    value_template: '{{ as_timestamp(states.sensor.royan_tides.attributes.low_tide_time_utc) | timestamp_custom("%a %d/%m/%Y %H:%M") }}'
    friendly_name: "Royan Next Low Tide"
    tide_royan_next_high_height:
    value_template: "{{ state_attr('sensor.royan_tides','high_tide_height') }}"
    friendly_name: "Royan Next High Tide Height"
    unit_of_measurement: m
    tide_royan_next_low_height:
    value_template: "{{ state_attr('sensor.royan_tides','low_tide_height') }}"
    friendly_name: "Royan Next Low Tide Height"
    unit_of_measurement: m
    tide_royan_credit:
    value_template: "{{ state_attr('sensor.royan_tides','CreditCallUsed') }}"
    friendly_name: "Royan Tide Credit"
    unit_of_measurement: credit
    tide_royan_current_height:
    value_template: "{{ state_attr('sensor.royan_tides','current_height') }}"
    friendly_name: "Royan Tide Current Height"
    unit_of_measurement: m
    tide_royan_station:
    value_template: "{{ state_attr('sensor.royan_tides','tidal_station_used') }}"
    friendly_name: "Royan Tide Station used"
    ~~

I see the calls being made to the api
image

And this is all I see in the States
image

With HA 2023.4 Failed to validate CalendarEvent: Expected all values to have a timezone

Describe the bug
Version installed currently is V12.3.1
Pre 2023.4 the calendar entries were working as described with upto 2 High tides and 2 low tides being added to the calendar,
all other functions of the worldtidesinfocustom are working as stated and as configured from the UI only. (no yaml configurations made).

Settings -> Systems -> Logs has an error of:

Logger: homeassistant.helpers.entity
Source: components/calendar/init.py:353
First occurred: April 16, 2023 at 2:41:16 PM (356 occurrences)
Last logged: 12:41:26 PM

Update for calendar.stoney_point_tides fails
Update for calendar.stony_point_pier fails
Traceback (most recent call last):
  File "/usr/local/lib/python3.10/site-packages/voluptuous/schema_builder.py", line 272, in __call__
    return self._compiled([], data)
  File "/usr/local/lib/python3.10/site-packages/voluptuous/validators.py", line 229, in _run
    return self._exec(self._compiled, value, path)
  File "/usr/local/lib/python3.10/site-packages/voluptuous/validators.py", line 355, in _exec
    raise e if self.msg is None else AllInvalid(self.msg, path=path)
  File "/usr/local/lib/python3.10/site-packages/voluptuous/validators.py", line 353, in _exec
    v = func(path, v)
  File "/usr/local/lib/python3.10/site-packages/voluptuous/schema_builder.py", line 818, in validate_callable
    return schema(data)
  File "/usr/src/homeassistant/homeassistant/components/calendar/__init__.py", line 89, in validate
    raise vol.Invalid("Expected all values to have a timezone")
voluptuous.error.Invalid: Expected all values to have a timezone

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/calendar/__init__.py", line 351, in __post_init__
    CALENDAR_EVENT_SCHEMA(dataclasses.asdict(self, dict_factory=skip_none))
  File "/usr/local/lib/python3.10/site-packages/voluptuous/schema_builder.py", line 276, in __call__
    raise er.MultipleInvalid([e])
voluptuous.error.MultipleInvalid: Expected all values to have a timezone

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 550, in async_update_ha_state
    await self.async_device_update()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 755, in async_device_update
    raise exc
  File "/config/custom_components/worldtidesinfocustom/calendar.py", line 272, in async_update
    event = CalendarEvent(
  File "<string>", line 11, in __init__
  File "/usr/src/homeassistant/homeassistant/components/calendar/__init__.py", line 353, in __post_init__
    raise HomeAssistantError(
homeassistant.exceptions.HomeAssistantError: Failed to validate CalendarEvent: Expected all values to have a timezone

To Reproduce

  1. Add a HA Calendar and confirm you can add event to this calendar.
  2. Install from HACS worldtidesinfocustom.
  3. reboot HA
  4. Obtain a pre-paid API key.
  5. Goto Settings -> Devices & Services. Add worldtidesinfocustom
  6. Configure using the UI
  7. Determine that data is being returned from the Tides service and the API is working.
  8. Attempt to see events in the HA Calendar for the Tide entity you have configured.
  9. Error is displayed in the calendar. "Could not retrieve events for calendars: Stoney Point Tides".

Expected behavior
As it was described on Github page.

Screenshots
Error message on HA Calendar screen:
Screenshot 2023-04-16 at 15 10 29

Image of Entity screen and sensors.
Screenshot 2023-04-16 at 15 20 46

Desktop (please complete the following information):

  • OS: [e.g. iOS]. macOS 13.2.1 (22D68)
  • Browser: Safari
  • Version [e.g. 22]. Version 16.3 (18614.4.6.1.6)

Smartphone (please complete the following information):

  • Device: [e.g. iPhone6]
  • OS: [e.g. iOS8.1]
  • Browser [e.g. stock browser, safari]
  • Version [e.g. 22]

Additional context
Add any other context about the problem here.

I am in the Southern Hemisphere, and worldtidesinfocustom was installed when we were in (AEDT) UTC+11 timezone, were are now in (AEST) UTC+10.

Reloaded the V12.3.1 with HA 2023.4.4 and rebooted.
Did not remove image only reloaded it so none of the .storage configs would have been altered.
Added a second instance of worldtidesinfocustom with a different tidal point but still same error with calendar.

Running on:
Home Assistant 2023.4.4
Supervisor 2023.04.0
Operating System 9.5
Frontend 20230411.1 - latest
Running on a Raspberry Pi 3

Anythings I can add, I am happy to provide.
See also Github: Antoni-Czaplicki/vulcan-for-hassio#42 as it would seem to similar problem for HA calendar.

Request: Allow customizing tide plot colors

The API allows passing of parameters for the plot (ref) to customize its colors and other parameters. To make this display nicely on my lovelace dashboard, I'd like to use a darker background color.

I'm not a Python dev (I am a dev), but I'll fork your repo and take a shot at passing the values in as configuration parameters and issue a PR if I can get it working.

I suggest using plot_color and plot_background as configuration parameter names.

How to change parameters in UI installation mode?

I installed integration from HACS and then added integration via UI. How do I change parameters now that it's installed? For that matter, how do you set additional parameters during installation (e.g. I need to change "vertical_ref", but that's not one of the entry fields while adding the integration)?

When I click on "Configure" for the integration, it only has one setting which is "Show monitored tides on the map".

Requirements for worldtidesinfocustom not found: ['matplotlib>=3.4.2']

Setup failed for custom integration worldtidesinfocustom: Requirements for worldtidesinfocustom not found: ['matplotlib>=3.4.2'].

Upgraded HA from 2023.06.02 to 2023.08.02 and this issue appeared. HA runs in Synology Container [docker]. The above log is flagged against worldtidesinfocustom

Upon startup the homassistant.util.package log records

Logger: homeassistant.util.package
Source: util/package.py:107
First occurred: 7:25:32 AM (3 occurrences)
Last logged: 7:26:12 AM

Unable to install package matplotlib>=3.4.2: error: subprocess-exited-with-error ร— python setup.py bdist_wheel did not run successfully. โ”‚ exit code: 1 โ•ฐโ”€> [631 lines of output] Edit mplsetup.cfg to change the build options; suppress output with --quiet. BUILDING MATPLOTLIB python: yes [3.11.4 (main, Jul 23 2023, 10:30:49) [GCC 12.2.1 20220924]] platform: yes [linux] tests: no [skipping due to configuration] macosx: no [Mac OS-X only] /usr/local/lib/python3.11/site-packages/setuptools/__init__.py:84: _DeprecatedInstaller: setuptools.installer and fetch_build_eggs are deprecated. !! ******************************************************************************** Requirements should be satisfied by a PEP 517 installer. If you are using pip, you can try `pip install --use-pep517`. ******************************************************************************** !! dist.fetch_build_eggs(dist.setup_requires) /tmp/pip-install-lpco91vu/matplotlib_2fb53f47cac042df9234acb0bea9ca32/.eggs/setuptools_scm-7.1.0-py3.11.egg/setuptools_scm/git.py:295: UserWarning: git archive did not support describe output warnings.warn("git archive did not support describe output") /tmp/pip-install-lpco91vu/matplotlib_2fb53f47cac042df9234acb0bea9ca32/.eggs/setuptools_scm-7.1.0-py3.11.egg/setuptools_scm/git.py:312: UserWarning: unexported git archival found warnings.warn("unexported git archival found") /usr/local/lib/python3.11/site-packages/setuptools/dist.py:945: SetuptoolsDeprecationWarning: The namespace_packages parameter is deprecated. !! ******************************************************************************** Please replace its usage with implicit namespaces (PEP 420). See https://setuptools.pypa.io/en/latest/references/keywords.html#keyword-namespace-packages for details. ******************************************************************************** !! ep.load()(self, ep.name, value) running bdist_wheel running build running build_py creating build creating build/lib.linux-x86_64-cpython-311 copying lib/pylab.py -> build/lib.linux-x86_64-cpython-311 creating build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/__init__.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/_afm.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/_animation_data.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/_blocking_input.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/_cm.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/_cm_listed.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/_color_data.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/_constrained_layout.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/_docstring.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/_enums.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/_fontconfig_pattern.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/_internal_utils.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/_layoutgrid.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/_mathtext.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/_mathtext_data.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/_pylab_helpers.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/_text_helpers.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/_tight_bbox.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/_tight_layout.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/_type1font.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/_version.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/afm.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/animation.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/artist.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/axis.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/backend_bases.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/backend_managers.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/backend_tools.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/bezier.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/blocking_input.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/category.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/cm.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/collections.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/colorbar.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/colors.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/container.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/contour.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/dates.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/docstring.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/dviread.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/figure.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/font_manager.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/fontconfig_pattern.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/gridspec.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/hatch.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/image.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/layout_engine.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/legend.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/legend_handler.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/lines.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/markers.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/mathtext.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/mlab.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/offsetbox.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/patches.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/path.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/patheffects.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/pylab.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/pyplot.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/quiver.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/rcsetup.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/sankey.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/scale.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/spines.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/stackplot.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/streamplot.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/table.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/texmanager.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/text.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/textpath.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/ticker.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/tight_bbox.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/tight_layout.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/transforms.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/type1font.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/units.py -> build/lib.linux-x86_64-cpython-311/matplotlib copying lib/matplotlib/widgets.py -> build/lib.linux-x86_64-cpython-311/matplotlib creating build/lib.linux-x86_64-cpython-311/mpl_toolkits copying lib/mpl_toolkits/__init__.py -> build/lib.linux-x86_64-cpython-311/mpl_toolkits creating build/lib.linux-x86_64-cpython-311/matplotlib/_api copying lib/matplotlib/_api/__init__.py -> build/lib.linux-x86_64-cpython-311/matplotlib/_api copying lib/matplotlib/_api/deprecation.py -> build/lib.linux-x86_64-cpython-311/matplotlib/_api creating build/lib.linux-x86_64-cpython-311/matplotlib/axes copying lib/matplotlib/axes/__init__.py -> build/lib.linux-x86_64-cpython-311/matplotlib/axes copying lib/matplotlib/axes/_axes.py -> build/lib.linux-x86_64-cpython-311/matplotlib/axes copying lib/matplotlib/axes/_base.py -> build/lib.linux-x86_64-cpython-311/matplotlib/axes copying lib/matplotlib/axes/_secondary_axes.py -> build/lib.linux-x86_64-cpython-311/matplotlib/axes copying lib/matplotlib/axes/_subplots.py -> build/lib.linux-x86_64-cpython-311/matplotlib/axes creating build/lib.linux-x86_64-cpython-311/matplotlib/backends copying lib/matplotlib/backends/__init__.py -> build/lib.linux-x86_64-cpython-311/matplotlib/backends copying lib/matplotlib/backends/_backend_gtk.py -> build/lib.linux-x86_64-cpython-311/matplotlib/backends copying lib/matplotlib/backends/_backend_pdf_ps.py -> build/lib.linux-x86_64-cpython-311/matplotlib/backends copying lib/matplotlib/backends/_backend_tk.py -> build/lib.linux-x86_64-cpython-311/matplotlib/backends copying lib/matplotlib/backends/backend_agg.py -> build/lib.linux-x86_64-cpython-311/matplotlib/backends copying lib/matplotlib/backends/backend_cairo.py -> build/lib.linux-x86_64-cpython-311/matplotlib/backends copying lib/matplotlib/backends/backend_gtk3.py -> build/lib.linux-x86_64-cpython-311/matplotlib/backends copying lib/matplotlib/backends/backend_gtk3agg.py -> build/lib.linux-x86_64-cpython-311/matplotlib/backends copying lib/matplotlib/backends/backend_gtk3cairo.py -> build/lib.linux-x86_64-cpython-311/matplotlib/backends copying lib/matplotlib/backends/backend_gtk4.py -> build/lib.linux-x86_64-cpython-311/matplotlib/backends copying lib/matplotlib/backends/backend_gtk4agg.py -> build/lib.linux-x86_64-cpython-311/matplotlib/backends copying lib/matplotlib/backends/backend_gtk4cairo.py -> build/lib.linux-x86_64-cpython-311/matplotlib/backends copying lib/matplotlib/backends/backend_macosx.py -> build/lib.linux-x86_64-cpython-311/matplotlib/backends copying lib/matplotlib/backends/backend_mixed.py -> build/lib.linux-x86_64-cpython-311/matplotlib/backends copying lib/matplotlib/backends/backend_nbagg.py -> build/lib.linux-x86_64-cpython-311/matplotlib/backends copying lib/matplotlib/backends/backend_pdf.py -> build/lib.linux-x86_64-cpython-311/matplotlib/backends copying lib/matplotlib/backends/backend_pgf.py -> build/lib.linux-x86_64-cpython-311/matplotlib/backends copying lib/matplotlib/backends/backend_ps.py -> build/lib.linux-x86_64-cpython-311/matplotlib/backends copying lib/matplotlib/backends/backend_qt.py -> build/lib.linux-x86_64-cpython-311/matplotlib/backends copying lib/matplotlib/backends/backend_qt5.py -> build/lib.linux-x86_64-cpython-311/matplotlib/backends copying lib/matplotlib/backends/backend_qt5agg.py -> build/lib.linux-x86_64-cpython-311/matplotlib/backends copying lib/matplotlib/backends/backend_qt5cairo.py -> build/lib.linux-x86_64-cpython-311/matplotlib/backends copying lib/matplotlib/backends/backend_qtagg.py -> build/lib.linux-x86_64-cpython-311/matplotlib/backends copying lib/matplotlib/backends/backend_qtcairo.py -> build/lib.linux-x86_64-cpython-311/matplotlib/backends copying lib/matplotlib/backends/backend_svg.py -> build/lib.linux-x86_64-cpython-311/matplotlib/backends copying lib/matplotlib/backends/backend_template.py -> build/lib.linux-x86_64-cpython-311/matplotlib/backends copying lib/matplotlib/backends/backend_tkagg.py -> build/lib.linux-x86_64-cpython-311/matplotlib/backends copying lib/matplotlib/backends/backend_tkcairo.py -> build/lib.linux-x86_64-cpython-311/matplotlib/backends copying lib/matplotlib/backends/backend_webagg.py -> build/lib.linux-x86_64-cpython-311/matplotlib/backends copying lib/matplotlib/backends/backend_webagg_core.py -> build/lib.linux-x86_64-cpython-311/matplotlib/backends copying lib/matplotlib/backends/backend_wx.py -> build/lib.linux-x86_64-cpython-311/matplotlib/backends copying lib/matplotlib/backends/backend_wxagg.py -> build/lib.linux-x86_64-cpython-311/matplotlib/backends copying lib/matplotlib/backends/backend_wxcairo.py -> build/lib.linux-x86_64-cpython-311/matplotlib/backends copying lib/matplotlib/backends/qt_compat.py -> build/lib.linux-x86_64-cpython-311/matplotlib/backends creating build/lib.linux-x86_64-cpython-311/matplotlib/cbook copying lib/matplotlib/cbook/__init__.py -> build/lib.linux-x86_64-cpython-311/matplotlib/cbook creating build/lib.linux-x86_64-cpython-311/matplotlib/projections copying lib/matplotlib/projections/__init__.py -> build/lib.linux-x86_64-cpython-311/matplotlib/projections copying lib/matplotlib/projections/geo.py -> build/lib.linux-x86_64-cpython-311/matplotlib/projections copying lib/matplotlib/projections/polar.py -> build/lib.linux-x86_64-cpython-311/matplotlib/projections creating build/lib.linux-x86_64-cpython-311/matplotlib/sphinxext copying lib/matplotlib/sphinxext/__init__.py -> build/lib.linux-x86_64-cpython-311/matplotlib/sphinxext copying lib/matplotlib/sphinxext/mathmpl.py -> build/lib.linux-x86_64-cpython-311/matplotlib/sphinxext copying lib/matplotlib/sphinxext/plot_directive.py -> build/lib.linux-x86_64-cpython-311/matplotlib/sphinxext creating build/lib.linux-x86_64-cpython-311/matplotlib/style copying lib/matplotlib/style/__init__.py -> build/lib.linux-x86_64-cpython-311/matplotlib/style copying lib/matplotlib/style/core.py -> build/lib.linux-x86_64-cpython-311/matplotlib/style creating build/lib.linux-x86_64-cpython-311/matplotlib/testing copying lib/matplotlib/testing/__init__.py -> build/lib.linux-x86_64-cpython-311/matplotlib/testing copying lib/matplotlib/testing/_markers.py -> build/lib.linux-x86_64-cpython-311/matplotlib/testing copying lib/matplotlib/testing/compare.py -> build/lib.linux-x86_64-cpython-311/matplotlib/testing copying lib/matplotlib/testing/conftest.py -> build/lib.linux-x86_64-cpython-311/matplotlib/testing copying lib/matplotlib/testing/decorators.py -> build/lib.linux-x86_64-cpython-311/matplotlib/testing copying lib/matplotlib/testing/exceptions.py -> build/lib.linux-x86_64-cpython-311/matplotlib/testing copying lib/matplotlib/testing/widgets.py -> build/lib.linux-x86_64-cpython-311/matplotlib/testing creating build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/__init__.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/conftest.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_afm.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_agg.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_agg_filter.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_animation.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_api.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_arrow_patches.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_artist.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_axes.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_backend_bases.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_backend_cairo.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_backend_gtk3.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_backend_macosx.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_backend_nbagg.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_backend_pdf.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_backend_pgf.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_backend_ps.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_backend_qt.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_backend_svg.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_backend_template.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_backend_tk.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_backend_tools.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_backend_webagg.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_backends_interactive.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_basic.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_bbox_tight.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_category.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_cbook.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_collections.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_colorbar.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_colors.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_compare_images.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_constrainedlayout.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_container.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_contour.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_cycles.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_dates.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_determinism.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_doc.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_dviread.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_figure.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_font_manager.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_fontconfig_pattern.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_ft2font.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_getattr.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_gridspec.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_image.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_legend.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_lines.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_marker.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_mathtext.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_matplotlib.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_mlab.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_offsetbox.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_patches.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_path.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_patheffects.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_pickle.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_png.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_polar.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_preprocess_data.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_pyplot.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_quiver.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_rcparams.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_sankey.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_scale.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_simplification.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_skew.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_sphinxext.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_spines.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_streamplot.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_style.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_subplots.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_table.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_testing.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_texmanager.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_text.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_textpath.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_ticker.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_tightlayout.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_transforms.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_triangulation.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_ttconv.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_type1font.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_units.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_usetex.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests copying lib/matplotlib/tests/test_widgets.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tests creating build/lib.linux-x86_64-cpython-311/matplotlib/tri copying lib/matplotlib/tri/__init__.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tri copying lib/matplotlib/tri/triangulation.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tri copying lib/matplotlib/tri/tricontour.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tri copying lib/matplotlib/tri/trifinder.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tri copying lib/matplotlib/tri/triinterpolate.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tri copying lib/matplotlib/tri/tripcolor.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tri copying lib/matplotlib/tri/triplot.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tri copying lib/matplotlib/tri/trirefine.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tri copying lib/matplotlib/tri/tritools.py -> build/lib.linux-x86_64-cpython-311/matplotlib/tri creating build/lib.linux-x86_64-cpython-311/matplotlib/backends/qt_editor copying lib/matplotlib/backends/qt_editor/__init__.py -> build/lib.linux-x86_64-cpython-311/matplotlib/backends/qt_editor copying lib/matplotlib/backends/qt_editor/_formlayout.py -> build/lib.linux-x86_64-cpython-311/matplotlib/backends/qt_editor copying lib/matplotlib/backends/qt_editor/figureoptions.py -> build/lib.linux-x86_64-cpython-311/matplotlib/backends/qt_editor creating build/lib.linux-x86_64-cpython-311/matplotlib/testing/jpl_units copying lib/matplotlib/testing/jpl_units/Duration.py -> build/lib.linux-x86_64-cpython-311/matplotlib/testing/jpl_units copying lib/matplotlib/testing/jpl_units/Epoch.py -> build/lib.linux-x86_64-cpython-311/matplotlib/testing/jpl_units copying lib/matplotlib/testing/jpl_units/EpochConverter.py -> build/lib.linux-x86_64-cpython-311/matplotlib/testing/jpl_units copying lib/matplotlib/testing/jpl_units/StrConverter.py -> build/lib.linux-x86_64-cpython-311/matplotlib/testing/jpl_units copying lib/matplotlib/testing/jpl_units/UnitDbl.py -> build/lib.linux-x86_64-cpython-311/matplotlib/testing/jpl_units copying lib/matplotlib/testing/jpl_units/UnitDblConverter.py -> build/lib.linux-x86_64-cpython-311/matplotlib/testing/jpl_units copying lib/matplotlib/testing/jpl_units/UnitDblFormatter.py -> build/lib.linux-x86_64-cpython-311/matplotlib/testing/jpl_units copying lib/matplotlib/testing/jpl_units/__init__.py -> build/lib.linux-x86_64-cpython-311/matplotlib/testing/jpl_units creating build/lib.linux-x86_64-cpython-311/mpl_toolkits/axes_grid1 copying lib/mpl_toolkits/axes_grid1/__init__.py -> build/lib.linux-x86_64-cpython-311/mpl_toolkits/axes_grid1 copying lib/mpl_toolkits/axes_grid1/anchored_artists.py -> build/lib.linux-x86_64-cpython-311/mpl_toolkits/axes_grid1 copying lib/mpl_toolkits/axes_grid1/axes_divider.py -> build/lib.linux-x86_64-cpython-311/mpl_toolkits/axes_grid1 copying lib/mpl_toolkits/axes_grid1/axes_grid.py -> build/lib.linux-x86_64-cpython-311/mpl_toolkits/axes_grid1 copying lib/mpl_toolkits/axes_grid1/axes_rgb.py -> build/lib.linux-x86_64-cpython-311/mpl_toolkits/axes_grid1 copying lib/mpl_toolkits/axes_grid1/axes_size.py -> build/lib.linux-x86_64-cpython-311/mpl_toolkits/axes_grid1 copying lib/mpl_toolkits/axes_grid1/inset_locator.py -> build/lib.linux-x86_64-cpython-311/mpl_toolkits/axes_grid1 copying lib/mpl_toolkits/axes_grid1/mpl_axes.py -> build/lib.linux-x86_64-cpython-311/mpl_toolkits/axes_grid1 copying lib/mpl_toolkits/axes_grid1/parasite_axes.py -> build/lib.linux-x86_64-cpython-311/mpl_toolkits/axes_grid1 creating build/lib.linux-x86_64-cpython-311/mpl_toolkits/axisartist copying lib/mpl_toolkits/axisartist/__init__.py -> build/lib.linux-x86_64-cpython-311/mpl_toolkits/axisartist copying lib/mpl_toolkits/axisartist/angle_helper.py -> build/lib.linux-x86_64-cpython-311/mpl_toolkits/axisartist copying lib/mpl_toolkits/axisartist/axes_divider.py -> build/lib.linux-x86_64-cpython-311/mpl_toolkits/axisartist copying lib/mpl_toolkits/axisartist/axes_grid.py -> build/lib.linux-x86_64-cpython-311/mpl_toolkits/axisartist copying lib/mpl_toolkits/axisartist/axes_rgb.py -> build/lib.linux-x86_64-cpython-311/mpl_toolkits/axisartist copying lib/mpl_toolkits/axisartist/axis_artist.py -> build/lib.linux-x86_64-cpython-311/mpl_toolkits/axisartist copying lib/mpl_toolkits/axisartist/axisline_style.py -> build/lib.linux-x86_64-cpython-311/mpl_toolkits/axisartist copying lib/mpl_toolkits/axisartist/axislines.py -> build/lib.linux-x86_64-cpython-311/mpl_toolkits/axisartist copying lib/mpl_toolkits/axisartist/clip_path.py -> build/lib.linux-x86_64-cpython-311/mpl_toolkits/axisartist copying lib/mpl_toolkits/axisartist/floating_axes.py -> build/lib.linux-x86_64-cpython-311/mpl_toolkits/axisartist copying lib/mpl_toolkits/axisartist/grid_finder.py -> build/lib.linux-x86_64-cpython-311/mpl_toolkits/axisartist copying lib/mpl_toolkits/axisartist/grid_helper_curvelinear.py -> build/lib.linux-x86_64-cpython-311/mpl_toolkits/axisartist copying lib/mpl_toolkits/axisartist/parasite_axes.py -> build/lib.linux-x86_64-cpython-311/mpl_toolkits/axisartist creating build/lib.linux-x86_64-cpython-311/mpl_toolkits/mplot3d copying lib/mpl_toolkits/mplot3d/__init__.py -> build/lib.linux-x86_64-cpython-311/mpl_toolkits/mplot3d copying lib/mpl_toolkits/mplot3d/art3d.py -> build/lib.linux-x86_64-cpython-311/mpl_toolkits/mplot3d copying lib/mpl_toolkits/mplot3d/axes3d.py -> build/lib.linux-x86_64-cpython-311/mpl_toolkits/mplot3d copying lib/mpl_toolkits/mplot3d/axis3d.py -> build/lib.linux-x86_64-cpython-311/mpl_toolkits/mplot3d copying lib/mpl_toolkits/mplot3d/proj3d.py -> build/lib.linux-x86_64-cpython-311/mpl_toolkits/mplot3d creating build/lib.linux-x86_64-cpython-311/mpl_toolkits/tests copying lib/mpl_toolkits/tests/__init__.py -> build/lib.linux-x86_64-cpython-311/mpl_toolkits/tests copying lib/mpl_toolkits/tests/conftest.py -> build/lib.linux-x86_64-cpython-311/mpl_toolkits/tests copying lib/mpl_toolkits/tests/test_axes_grid.py -> build/lib.linux-x86_64-cpython-311/mpl_toolkits/tests copying lib/mpl_toolkits/tests/test_axes_grid1.py -> build/lib.linux-x86_64-cpython-311/mpl_toolkits/tests copying lib/mpl_toolkits/tests/test_axisartist_angle_helper.py -> build/lib.linux-x86_64-cpython-311/mpl_toolkits/tests copying lib/mpl_toolkits/tests/test_axisartist_axis_artist.py -> build/lib.linux-x86_64-cpython-311/mpl_toolkits/tests copying lib/mpl_toolkits/tests/test_axisartist_axislines.py -> build/lib.linux-x86_64-cpython-311/mpl_toolkits/tests copying lib/mpl_toolkits/tests/test_axisartist_clip_path.py -> build/lib.linux-x86_64-cpython-311/mpl_toolkits/tests copying lib/mpl_toolkits/tests/test_axisartist_floating_axes.py -> build/lib.linux-x86_64-cpython-311/mpl_toolkits/tests copying lib/mpl_toolkits/tests/test_axisartist_grid_finder.py -> build/lib.linux-x86_64-cpython-311/mpl_toolkits/tests copying lib/mpl_toolkits/tests/test_axisartist_grid_helper_curvelinear.py -> build/lib.linux-x86_64-cpython-311/mpl_toolkits/tests copying lib/mpl_toolkits/tests/test_mplot3d.py -> build/lib.linux-x86_64-cpython-311/mpl_toolkits/tests creating build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data creating build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts creating build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/ttf copying lib/matplotlib/mpl-data/fonts/ttf/DejaVuSansMono-Bold.ttf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/ttf creating build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/pdfcorefonts copying lib/matplotlib/mpl-data/fonts/pdfcorefonts/ZapfDingbats.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/pdfcorefonts creating build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/stylelib copying lib/matplotlib/mpl-data/stylelib/Solarize_Light2.mplstyle -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/stylelib creating build/lib.linux-x86_64-cpython-311/matplotlib/backends/web_backend copying lib/matplotlib/backends/web_backend/.eslintrc.js -> build/lib.linux-x86_64-cpython-311/matplotlib/backends/web_backend creating build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/sample_data copying lib/matplotlib/mpl-data/sample_data/msft.csv -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/sample_data creating build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/fonts/afm/pplbi8a.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm creating build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/images/filesave.png -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/fonts/afm/pbkd8a.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/images/forward_large.png -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/images/back_large.png -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/fonts/afm/pncr8a.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/images/subplots_large.png -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images creating build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/sample_data/axes_grid copying lib/matplotlib/mpl-data/sample_data/axes_grid/bivariate_normal.npy -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/sample_data/axes_grid copying lib/matplotlib/mpl-data/fonts/afm/pncbi8a.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/images/move-symbolic.svg -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/fonts/pdfcorefonts/Helvetica-Bold.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/pdfcorefonts copying lib/matplotlib/backends/web_backend/.prettierignore -> build/lib.linux-x86_64-cpython-311/matplotlib/backends/web_backend copying lib/matplotlib/backends/web_backend/ipython_inline_figure.html -> build/lib.linux-x86_64-cpython-311/matplotlib/backends/web_backend copying lib/matplotlib/mpl-data/sample_data/percent_bachelors_degrees_women_usa.csv -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/sample_data copying lib/matplotlib/mpl-data/stylelib/seaborn-v0_8-deep.mplstyle -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/stylelib copying lib/matplotlib/mpl-data/fonts/afm/pzcmi8a.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/fonts/afm/cmr10.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/fonts/pdfcorefonts/Courier.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/pdfcorefonts copying lib/matplotlib/mpl-data/images/matplotlib_large.png -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/images/subplots.svg -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/stylelib/bmh.mplstyle -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/stylelib copying lib/matplotlib/mpl-data/fonts/pdfcorefonts/Symbol.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/pdfcorefonts copying lib/matplotlib/mpl-data/images/help.png -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/images/zoom_to_rect_large.png -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/fonts/afm/phvl8a.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/sample_data/logo2.png -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/sample_data copying lib/matplotlib/mpl-data/fonts/afm/cmsy10.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/fonts/ttf/STIXSizOneSymBol.ttf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/ttf creating build/lib.linux-x86_64-cpython-311/matplotlib/backends/web_backend/js copying lib/matplotlib/backends/web_backend/js/mpl.js -> build/lib.linux-x86_64-cpython-311/matplotlib/backends/web_backend/js copying lib/matplotlib/mpl-data/stylelib/seaborn-v0_8-notebook.mplstyle -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/stylelib copying lib/matplotlib/mpl-data/fonts/afm/cmex10.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/fonts/ttf/DejaVuSans-Bold.ttf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/ttf copying lib/matplotlib/mpl-data/images/move.pdf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/fonts/ttf/STIXNonUni.ttf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/ttf copying lib/matplotlib/mpl-data/fonts/afm/phvlo8a.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/images/back-symbolic.svg -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/sample_data/jacksboro_fault_dem.npz -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/sample_data copying lib/matplotlib/mpl-data/images/subplots.png -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/backends/web_backend/all_figures.html -> build/lib.linux-x86_64-cpython-311/matplotlib/backends/web_backend copying lib/matplotlib/mpl-data/images/move.svg -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/backends/web_backend/package.json -> build/lib.linux-x86_64-cpython-311/matplotlib/backends/web_backend copying lib/matplotlib/mpl-data/images/zoom_to_rect-symbolic.svg -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/fonts/ttf/LICENSE_DEJAVU -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/ttf copying lib/matplotlib/mpl-data/sample_data/s1045.ima.gz -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/sample_data copying lib/matplotlib/mpl-data/fonts/afm/cmtt10.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/fonts/afm/phvb8an.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/fonts/afm/pncb8a.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/fonts/afm/putb8a.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/fonts/ttf/cmr10.ttf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/ttf copying lib/matplotlib/mpl-data/images/help_large.png -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/fonts/pdfcorefonts/Courier-Bold.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/pdfcorefonts copying lib/matplotlib/mpl-data/images/home.pdf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/stylelib/seaborn-v0_8-darkgrid.mplstyle -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/stylelib copying lib/matplotlib/mpl-data/stylelib/seaborn-v0_8-poster.mplstyle -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/stylelib copying lib/matplotlib/mpl-data/fonts/afm/putbi8a.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/fonts/ttf/STIXSizOneSymReg.ttf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/ttf copying lib/matplotlib/mpl-data/fonts/ttf/STIXSizTwoSymReg.ttf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/ttf copying lib/matplotlib/mpl-data/stylelib/fivethirtyeight.mplstyle -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/stylelib copying lib/matplotlib/mpl-data/fonts/pdfcorefonts/Helvetica.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/pdfcorefonts copying lib/matplotlib/mpl-data/sample_data/goog.npz -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/sample_data creating build/lib.linux-x86_64-cpython-311/matplotlib/backends/web_backend/css copying lib/matplotlib/backends/web_backend/css/fbm.css -> build/lib.linux-x86_64-cpython-311/matplotlib/backends/web_backend/css copying lib/matplotlib/mpl-data/fonts/afm/cmmi10.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/images/matplotlib.png -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/stylelib/seaborn-v0_8-paper.mplstyle -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/stylelib copying lib/matplotlib/mpl-data/stylelib/fast.mplstyle -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/stylelib copying lib/matplotlib/mpl-data/fonts/afm/psyr.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/images/subplots-symbolic.svg -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/images/forward.svg -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/stylelib/classic.mplstyle -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/stylelib copying lib/matplotlib/mpl-data/fonts/pdfcorefonts/Times-Italic.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/pdfcorefonts copying lib/matplotlib/mpl-data/fonts/afm/pcrr8a.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/fonts/afm/pbkli8a.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/images/zoom_to_rect.png -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/stylelib/seaborn-v0_8-muted.mplstyle -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/stylelib copying lib/matplotlib/mpl-data/images/qt4_editor_options.svg -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/stylelib/seaborn-v0_8-pastel.mplstyle -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/stylelib copying lib/matplotlib/mpl-data/fonts/afm/pagk8a.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/images/filesave_large.png -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/fonts/pdfcorefonts/Helvetica-BoldOblique.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/pdfcorefonts copying lib/matplotlib/mpl-data/sample_data/grace_hopper.jpg -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/sample_data copying lib/matplotlib/backends/web_backend/nbagg_uat.ipynb -> build/lib.linux-x86_64-cpython-311/matplotlib/backends/web_backend copying lib/matplotlib/mpl-data/fonts/afm/pagdo8a.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/images/home-symbolic.svg -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/fonts/afm/phvbo8an.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/sample_data/data_x_x2_x3.csv -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/sample_data copying lib/matplotlib/mpl-data/fonts/pdfcorefonts/Times-Bold.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/pdfcorefonts copying lib/matplotlib/backends/web_backend/css/mpl.css -> build/lib.linux-x86_64-cpython-311/matplotlib/backends/web_backend/css copying lib/matplotlib/mpl-data/fonts/afm/ptmri8a.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/fonts/afm/pagko8a.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/fonts/afm/phvro8an.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/fonts/afm/phvbo8a.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/fonts/afm/phvr8a.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/images/hand.png -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/images/home.png -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/images/move.png -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/fonts/ttf/DejaVuSans-Oblique.ttf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/ttf copying lib/matplotlib/mpl-data/sample_data/eeg.dat -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/sample_data copying lib/matplotlib/mpl-data/fonts/ttf/STIXNonUniBolIta.ttf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/ttf copying lib/matplotlib/mpl-data/sample_data/README.txt -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/sample_data copying lib/matplotlib/mpl-data/images/subplots.pdf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/images/forward-symbolic.svg -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/stylelib/_classic_test_patch.mplstyle -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/stylelib copying lib/matplotlib/backends/web_backend/css/boilerplate.css -> build/lib.linux-x86_64-cpython-311/matplotlib/backends/web_backend/css copying lib/matplotlib/mpl-data/fonts/afm/pcrro8a.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/fonts/afm/pplri8a.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/fonts/ttf/STIXGeneralBolIta.ttf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/ttf copying lib/matplotlib/mpl-data/images/zoom_to_rect.svg -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/fonts/ttf/cmtt10.ttf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/ttf copying lib/matplotlib/mpl-data/sample_data/topobathy.npz -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/sample_data copying lib/matplotlib/mpl-data/fonts/ttf/cmb10.ttf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/ttf copying lib/matplotlib/mpl-data/images/back.png -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/fonts/ttf/DejaVuSansMono.ttf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/ttf copying lib/matplotlib/mpl-data/fonts/ttf/cmsy10.ttf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/ttf copying lib/matplotlib/mpl-data/stylelib/seaborn-v0_8.mplstyle -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/stylelib copying lib/matplotlib/mpl-data/fonts/ttf/cmss10.ttf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/ttf copying lib/matplotlib/mpl-data/fonts/afm/ptmr8a.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/images/qt4_editor_options_large.png -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/fonts/ttf/DejaVuSans-BoldOblique.ttf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/ttf copying lib/matplotlib/mpl-data/sample_data/Minduka_Present_Blue_Pack.png -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/sample_data copying lib/matplotlib/mpl-data/stylelib/seaborn-v0_8-dark.mplstyle -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/stylelib copying lib/matplotlib/mpl-data/stylelib/_mpl-gallery-nogrid.mplstyle -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/stylelib copying lib/matplotlib/mpl-data/fonts/ttf/STIXGeneralItalic.ttf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/ttf copying lib/matplotlib/mpl-data/fonts/afm/pagd8a.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/images/help.svg -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/images/home_large.png -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/fonts/ttf/STIXNonUniIta.ttf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/ttf copying lib/matplotlib/mpl-data/kpsewhich.lua -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data copying lib/matplotlib/mpl-data/fonts/ttf/DejaVuSansMono-BoldOblique.ttf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/ttf copying lib/matplotlib/mpl-data/fonts/pdfcorefonts/Courier-Oblique.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/pdfcorefonts copying lib/matplotlib/mpl-data/fonts/ttf/DejaVuSansMono-Oblique.ttf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/ttf copying lib/matplotlib/mpl-data/fonts/ttf/DejaVuSans.ttf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/ttf copying lib/matplotlib/mpl-data/images/help-symbolic.svg -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/stylelib/seaborn-v0_8-white.mplstyle -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/stylelib copying lib/matplotlib/mpl-data/fonts/afm/phvro8a.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/stylelib/tableau-colorblind10.mplstyle -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/stylelib copying lib/matplotlib/mpl-data/images/back.svg -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/fonts/afm/pcrb8a.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/stylelib/dark_background.mplstyle -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/stylelib copying lib/matplotlib/mpl-data/fonts/pdfcorefonts/Times-BoldItalic.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/pdfcorefonts copying lib/matplotlib/mpl-data/fonts/ttf/cmmi10.ttf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/ttf copying lib/matplotlib/mpl-data/stylelib/ggplot.mplstyle -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/stylelib copying lib/matplotlib/backends/web_backend/.prettierrc -> build/lib.linux-x86_64-cpython-311/matplotlib/backends/web_backend copying lib/matplotlib/backends/web_backend/single_figure.html -> build/lib.linux-x86_64-cpython-311/matplotlib/backends/web_backend copying lib/matplotlib/mpl-data/images/filesave.svg -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/fonts/ttf/DejaVuSerif.ttf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/ttf copying lib/matplotlib/mpl-data/fonts/ttf/DejaVuSerifDisplay.ttf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/ttf copying lib/matplotlib/mpl-data/fonts/ttf/DejaVuSansDisplay.ttf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/ttf copying lib/matplotlib/mpl-data/fonts/afm/pplb8a.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/images/qt4_editor_options.pdf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/fonts/ttf/STIXSizFourSymReg.ttf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/ttf copying lib/matplotlib/mpl-data/images/help.pdf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/fonts/ttf/LICENSE_STIX -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/ttf copying lib/matplotlib/mpl-data/stylelib/_mpl-gallery.mplstyle -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/stylelib copying lib/matplotlib/mpl-data/fonts/afm/pbkl8a.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/fonts/pdfcorefonts/Helvetica-Oblique.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/pdfcorefonts copying lib/matplotlib/mpl-data/fonts/ttf/DejaVuSerif-BoldItalic.ttf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/ttf copying lib/matplotlib/backends/web_backend/js/mpl_tornado.js -> build/lib.linux-x86_64-cpython-311/matplotlib/backends/web_backend/js copying lib/matplotlib/mpl-data/fonts/ttf/STIXSizFiveSymReg.ttf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/ttf copying lib/matplotlib/mpl-data/fonts/ttf/DejaVuSerif-Bold.ttf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/ttf copying lib/matplotlib/mpl-data/fonts/afm/pzdr.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/images/forward.png -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/stylelib/seaborn-v0_8-ticks.mplstyle -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/stylelib copying lib/matplotlib/mpl-data/fonts/ttf/STIXSizThreeSymReg.ttf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/ttf copying lib/matplotlib/mpl-data/fonts/afm/pbkdi8a.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/images/matplotlib.pdf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/fonts/afm/phvb8a.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/backends/web_backend/css/page.css -> build/lib.linux-x86_64-cpython-311/matplotlib/backends/web_backend/css copying lib/matplotlib/mpl-data/fonts/ttf/STIXNonUniBol.ttf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/ttf copying lib/matplotlib/mpl-data/images/qt4_editor_options.png -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/stylelib/grayscale.mplstyle -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/stylelib copying lib/matplotlib/mpl-data/fonts/afm/pcrbo8a.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/fonts/afm/ptmb8a.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/sample_data/embedding_in_wx3.xrc -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/sample_data copying lib/matplotlib/mpl-data/fonts/pdfcorefonts/Times-Roman.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/pdfcorefonts copying lib/matplotlib/mpl-data/images/back.pdf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/fonts/afm/putr8a.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/fonts/ttf/cmex10.ttf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/ttf copying lib/matplotlib/mpl-data/fonts/ttf/STIXGeneralBol.ttf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/ttf copying lib/matplotlib/mpl-data/fonts/afm/phvr8an.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/stylelib/seaborn-v0_8-whitegrid.mplstyle -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/stylelib copying lib/matplotlib/mpl-data/stylelib/seaborn-v0_8-talk.mplstyle -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/stylelib copying lib/matplotlib/mpl-data/sample_data/Stocks.csv -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/sample_data copying lib/matplotlib/mpl-data/fonts/afm/putri8a.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/backends/web_backend/js/nbagg_mpl.js -> build/lib.linux-x86_64-cpython-311/matplotlib/backends/web_backend/js copying lib/matplotlib/mpl-data/stylelib/seaborn-v0_8-bright.mplstyle -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/stylelib copying lib/matplotlib/mpl-data/images/filesave.pdf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/images/forward.pdf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/fonts/pdfcorefonts/Courier-BoldOblique.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/pdfcorefonts copying lib/matplotlib/mpl-data/fonts/afm/pplr8a.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/fonts/ttf/STIXSizFourSymBol.ttf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/ttf copying lib/matplotlib/mpl-data/fonts/ttf/STIXSizThreeSymBol.ttf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/ttf copying lib/matplotlib/mpl-data/images/hand.pdf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/fonts/afm/ptmbi8a.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/images/matplotlib.svg -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images creating build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/plot_directive copying lib/matplotlib/mpl-data/plot_directive/plot_directive.css -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/plot_directive copying lib/matplotlib/mpl-data/sample_data/membrane.dat -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/sample_data copying lib/matplotlib/mpl-data/images/hand.svg -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/fonts/ttf/DejaVuSerif-Italic.ttf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/ttf copying lib/matplotlib/mpl-data/images/home.svg -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/fonts/ttf/STIXSizTwoSymBol.ttf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/ttf copying lib/matplotlib/mpl-data/fonts/afm/pncri8a.afm -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/afm copying lib/matplotlib/mpl-data/fonts/pdfcorefonts/readme.txt -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/pdfcorefonts copying lib/matplotlib/mpl-data/fonts/ttf/STIXGeneral.ttf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/fonts/ttf copying lib/matplotlib/mpl-data/stylelib/seaborn-v0_8-colorblind.mplstyle -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/stylelib copying lib/matplotlib/mpl-data/images/zoom_to_rect.pdf -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/images/filesave-symbolic.svg -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images copying lib/matplotlib/mpl-data/matplotlibrc -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data copying lib/matplotlib/mpl-data/stylelib/seaborn-v0_8-dark-palette.mplstyle -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/stylelib copying lib/matplotlib/mpl-data/images/move_large.png -> build/lib.linux-x86_64-cpython-311/matplotlib/mpl-data/images running build_ext creating tmp gcc -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fno-semantic-interposition -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free -DTHREAD_STACK_SIZE=0x100000 -fPIC -I/usr/local/include/python3.11 -c /tmp/tmpy_1icb3j.cpp -o tmp/tmpy_1icb3j.o -fvisibility=hidden gcc -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fno-semantic-interposition -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free -DTHREAD_STACK_SIZE=0x100000 -fPIC -I/usr/local/include/python3.11 -c /tmp/tmptzo23lib.cpp -o tmp/tmptzo23lib.o -fvisibility-inlines-hidden Extracting /project/freetype/freetype2/2.6.1/freetype-2.6.1.tar.gz Building freetype in build/freetype-2.6.1 egrep: warning: egrep is obsolescent; using grep -E egrep: warning: egrep is obsolescent; using grep -E GNU make (>= 3.80) or makepp (>= 1.19) is required to build FreeType2. Please try MAKE=<GNU make command name> ./configure or MAKE="makepp --norc-substitution" ./configure Traceback (most recent call last): File "<string>", line 2, in <module> File "<pip-setuptools-caller>", line 34, in <module> File "/tmp/pip-install-lpco91vu/matplotlib_2fb53f47cac042df9234acb0bea9ca32/setup.py", line 260, in <module> setup( # Finally, pass this all along to setuptools to do the heavy lifting. File "/usr/local/lib/python3.11/site-packages/setuptools/__init__.py", line 107, in setup return distutils.core.setup(**attrs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/setuptools/_distutils/core.py", line 185, in setup return run_commands(dist) ^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/setuptools/_distutils/core.py", line 201, in run_commands dist.run_commands() File "/usr/local/lib/python3.11/site-packages/setuptools/_distutils/dist.py", line 969, in run_commands self.run_command(cmd) File "/usr/local/lib/python3.11/site-packages/setuptools/dist.py", line 1234, in run_command super().run_command(command) File "/usr/local/lib/python3.11/site-packages/setuptools/_distutils/dist.py", line 988, in run_command cmd_obj.run() File "/usr/local/lib/python3.11/site-packages/wheel/bdist_wheel.py", line 346, in run self.run_command("build") File "/usr/local/lib/python3.11/site-packages/setuptools/_distutils/cmd.py", line 318, in run_command self.distribution.run_command(command) File "/usr/local/lib/python3.11/site-packages/setuptools/dist.py", line 1234, in run_command super().run_command(command) File "/usr/local/lib/python3.11/site-packages/setuptools/_distutils/dist.py", line 988, in run_command cmd_obj.run() File "/usr/local/lib/python3.11/site-packages/setuptools/_distutils/command/build.py", line 131, in run self.run_command(cmd_name) File "/usr/local/lib/python3.11/site-packages/setuptools/_distutils/cmd.py", line 318, in run_command self.distribution.run_command(command) File "/usr/local/lib/python3.11/site-packages/setuptools/dist.py", line 1234, in run_command super().run_command(command) File "/usr/local/lib/python3.11/site-packages/setuptools/_distutils/dist.py", line 988, in run_command cmd_obj.run() File "/usr/local/lib/python3.11/site-packages/setuptools/command/build_ext.py", line 84, in run _build_ext.run(self) File "/usr/local/lib/python3.11/site-packages/Cython/Distutils/old_build_ext.py", line 186, in run _build_ext.build_ext.run(self) File "/usr/local/lib/python3.11/site-packages/setuptools/_distutils/command/build_ext.py", line 345, in run self.build_extensions() File "/tmp/pip-install-lpco91vu/matplotlib_2fb53f47cac042df9234acb0bea9ca32/setup.py", line 174, in build_extensions package.do_custom_build(env) File "/tmp/pip-install-lpco91vu/matplotlib_2fb53f47cac042df9234acb0bea9ca32/setupext.py", line 641, in do_custom_build subprocess.check_call(configure, env=env, cwd=src_path) File "/usr/local/lib/python3.11/subprocess.py", line 413, in check_call raise CalledProcessError(retcode, cmd) subprocess.CalledProcessError: Command '['./configure', '--with-zlib=no', '--with-bzip2=no', '--with-png=no', '--with-harfbuzz=no', '--enable-static', '--disable-shared', '--host=x86_64-pc-linux-musl']' returned non-zero exit status 1. [end of output] note: This error originates from a subprocess, and is likely not a problem with pip. ERROR: Failed building wheel for matplotlib ERROR: Could not build wheels for matplotlib, which is required to install pyproject.toml-based projects [notice] A new release of pip is available: 23.1.2 -> 23.2.1 [notice] To update, run: pip install --upgrade pip

Is it relying on an old package for the integration? I'm unsure if 2023.07.xx would have displayed the same issue.

Code changes

Hi, great project which I have been looking for a tidal solution for ages. Thank you for your efforts. One thing to get the sensors to work I had to make a small change.
The single quotes surrounding '{{ as_timestamp(states.... etc were changed to double quotes as per the rest of the sensors, the double quotes surrounding %a %d/%m.... etc we changed to single quotes.

sensors: tide_royan_next_high: value_template: "{{ as_timestamp(states.sensor.royan_tides.attributes.high_tide_time_utc) | timestamp_custom('%a %d/%m/%Y %H:%M') }}" friendly_name: "Royan Next High Tide"

Same on the tide_next_low sensor.

As a side note:
Now the sensors are reporting data, I have another problem to resolve, I am working on why the tidal height is out by a considerable amount from the local prediction. I think its the datum used.

Transparent background for tide chart images?

I love this application and use it to view tide charts for six different favorite locations; but would love to see the tide chart images have transparent (rather than white) backgrounds. I place these in a vertical stack-in-card with an entities card showing specific sensor values. The entities card takes the background shading of my Lovelace theme; but the tide chart is a straight white background.
Image1

Default distance a bit short

Great work, everything setup nicely except my local station was 13km away and so had to specify. I upped it to 50 and it seems to use the closest and also provide a list of nearby stations. This is really nice extra info, is there any reason to keep it so short?

Thanks for your work,
John

Platform error sensor.worldtidesinfocustom - numpy.core.multiarray failed to import

Describe the bug
A clear and concise description of what the bug is.
The system cannot restart because the configuration is not valid: Platform error sensor.worldtidesinfocustom - numpy.core.multiarray failed to import

To Reproduce
Steps to reproduce the behavior:

  1. Go to 'Settings>System'
  2. Click on 'Restart'

Expected behavior
No errors, allowing me to restart

Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/components/websocket_api/commands.py", line 189, in handle_call_service
await hass.services.async_call(
File "/usr/src/homeassistant/homeassistant/core.py", line 1627, in async_call
task.result()
File "/usr/src/homeassistant/homeassistant/core.py", line 1664, in _execute_service
await cast(Callable[[ServiceCall], Awaitable[None]], handler.job.target)(
File "/usr/src/homeassistant/homeassistant/components/hassio/init.py", line 679, in async_handle_core_service
raise HomeAssistantError(
homeassistant.exceptions.HomeAssistantError: The system cannot restart because the configuration is not valid: Platform error sensor.worldtidesinfocustom - numpy.core.multiarray failed to import

Stopped working in HACS

Describe the bug
Was working fine before the recent update.
Re-installed v6.0.0 and worked again.

To Reproduce
Steps to reproduce the behavior:

  1. Updated to latest version v6.1.0 in HACS
  2. Stopped working

Expected behavior
Add-on should provide data to sensors and camera object.

Desktop (please complete the following information):

  • OS: Home Assistant 2021.10.6
  • Browser: Chrome
  • GitHub release: v6.1.0

Additional context
Logger: homeassistant.components.sensor
Source: custom_components/worldtidesinfocustom/live_position_management.py:62
Integration: Sensor (documentation, issues)
First occurred: 7:53:37 PM (1 occurrences)
Last logged: 7:53:37 PM

Error while setting up worldtidesinfocustom platform for sensor
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 249, in _async_setup_platform
await asyncio.shield(task)
File "/usr/local/lib/python3.9/concurrent/futures/thread.py", line 52, in run
result = self.fn(*self.args, **self.kwargs)
File "/config/custom_components/worldtidesinfocustom/sensor.py", line 355, in setup_platform
tides_sensors = setup_sensor(
File "/config/custom_components/worldtidesinfocustom/sensor.py", line 165, in setup_sensor
live_position_management = Live_Position_Management(
File "/config/custom_components/worldtidesinfocustom/live_position_management.py", line 62, in init
live_position_sensor_update_distance * KM_PER_MI
TypeError: unsupported operand type(s) for *: 'NoneType' and 'float'

Logger: homeassistant.helpers.template
Source: helpers/template.py:1210
First occurred: 7:53:47 PM (8 occurrences)
Last logged: 7:53:47 PM

Template warning: 'as_timestamp' got invalid input '' when rendering template '{{ as_timestamp(states.sensor.holmes_tides.attributes.high_tide_time_utc) | timestamp_custom("%a %d/%m/%Y %H:%M") }}' but no default was specified. Currently 'as_timestamp' will return 'None', however this template will fail to render in Home Assistant core 2021.12
Template warning: 'timestamp_custom' got invalid input 'None' when rendering template '{{ as_timestamp(states.sensor.holmes_tides.attributes.high_tide_time_utc) | timestamp_custom("%a %d/%m/%Y %H:%M") }}' but no default was specified. Currently 'timestamp_custom' will return 'None', however this template will fail to render in Home Assistant core 2021.12
Template warning: 'as_timestamp' got invalid input '' when rendering template '{{ as_timestamp(states.sensor.holmes_tides.attributes.low_tide_time_utc) | timestamp_custom("%a %d/%m/%Y %H:%M") }}' but no default was specified. Currently 'as_timestamp' will return 'None', however this template will fail to render in Home Assistant core 2021.12
Template warning: 'timestamp_custom' got invalid input 'None' when rendering template '{{ as_timestamp(states.sensor.holmes_tides.attributes.low_tide_time_utc) | timestamp_custom("%a %d/%m/%Y %H:%M") }}' but no default was specified. Currently 'timestamp_custom' will return 'None', however this template will fail to render in Home Assistant core 2021.12

Logger: homeassistant.helpers.template
Source: helpers/template.py:1612
First occurred: 7:53:47 PM (12 occurrences)
Last logged: 7:53:47 PM

Template variable warning: 'mappingproxy object' has no attribute 'high_tide_time_utc' when rendering '{{ as_timestamp(states.sensor.holmes_tides.attributes.high_tide_time_utc) | timestamp_custom("%a %d/%m/%Y %H:%M") }}'
Template variable warning: 'mappingproxy object' has no attribute 'low_tide_time_utc' when rendering '{{ as_timestamp(states.sensor.holmes_tides.attributes.low_tide_time_utc) | timestamp_custom("%a %d/%m/%Y %H:%M") }}'
Template variable warning: 'mappingproxy object' has no attribute 'high_tide_time_utc' when rendering or compiling ''
Template variable warning: 'mappingproxy object' has no attribute 'low_tide_time_utc' when rendering or compiling ''

v13.1.0 breaks matplotlib "fix" for x86 and x64 users

The hacky "fix" for missing matplotlib (for x86 and x64 systems) no longer works with version 13.1.0.

The temporary "fix" I am talking about can be seen here:

#26 (comment)

or a persistent "fix" can be achieved by manually editing the manifest.json from v13.0.0 to add the matplotlib requirement as per here:

#26 (comment)

Neither of these fixes work with v13.1.0, has matplotlib been removed from the integration completely?

Is there anyway of re-adding the matplotlib functionality for those of use not affected with the matplotlib issues on raspi hardware?

As always, thanks so much for your work on this.

Credits used incorrect?

Describe the bug
Documentation says credits used per day is 3 but when I look at the last 10 calls it shows a call is made every 60 minutes. Which equates to 24 call per day..

To Reproduce
Steps to reproduce the behavior:

  1. Go to https://www.worldtides.info/overview
  2. check 'last 10 apicalls'

see screenshot

Expected behavior
3 credits used per day, not 24

Screenshots
Screenshot 2023-02-23 at 13 25 04

Issues while setup the integration

This is what I am getting in the logs when I try to install de integration through HACS. I already bought prepaid credits on Worldtides website. Any idea what is going wrong?

Error while setting up worldtidesinfocustom platform for sensor
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 198, in _async_setup_platform
    await asyncio.shield(task)
  File "/usr/local/lib/python3.8/concurrent/futures/thread.py", line 57, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/config/custom_components/worldtidesinfocustom/sensor.py", line 82, in setup_platform
    tides.retrieve_tide_station()
  File "/config/custom_components/worldtidesinfocustom/sensor.py", line 299, in retrieve_tide_station
    self.credit_used = self.credit_used + self.init_data["callCount"]
KeyError: 'callCount'

And here is what I have in my configuration.yaml

sensor:
  - platform: worldtidesinfocustom
    name: tides
    api_key: 77c3e8fc-XXXX-40c7-b8b6-XXXXXXXX
    latitude: 45.61949378902948
    longitude: -1.0318721687376207

Generate a forecast/detailedForecast as attributes on the sensor.tides (or a new sensor.tides_forecast)

The word tides info custom component could make provide predicted/forecast tide heights at 30/60 min intervals (made available as an attribute forecast).

The matplotlib images are handy and functional but it might be more powerful to provide a forecast (as an attribute) like weather does (and other components, like PV/Solar forecasts also use).

Forecasts would allow users to both more readily create their own plots (using for example ApexCharts) and also to extract the predicted tide height at a time rather than just to be able to receive the next high and low. That would allow them to make determinations of when tide is above a certain level or below a certain level and for how long. Having forecasts would also allow users to cross-filter with weather data to easily determine the right tide and "good" weather as another forecast for other automations (like good times to go for a kayak - because the tide is right and the weather is warm and sunny).

Describe the solution you'd like

Extend the sensor.tides (or create a new sensor.tides_forecast) to include the attributes for a forecast on 30/60 mins

attribution: Data provided by WorldTides
Unit displayed: metric
vertical_reference: LAT
tidal_station_used: Port Hacking
high_tide_time_utc: 2024-03-14T13:42+0000
high_tide_time_local: 00:42
high_tide_height: 1.628
low_tide_time_utc: 2024-03-14T20:15+0000
low_tide_time_local: 07:15
low_tide_height: 0.303
time_to_next_tide: (hours) 2:41:22
tide_tendancy: Tides Up
next_tide_amplitude: 1.325
next_Coeff_resp_MWS: 102
current_height_utc: 2024-03-14T11:00+0000
current_height: 1.128
tide_amplitude: 1.292
Coeff_resp_MWS: 99.5
CreditCallUsed: 0
Data_request_time: 00:07:12 14/03/24
plot: /config/www/tides.png
station_distance: 50
station_around_nb: 5
station_around_name: ; Port Hacking; Botany Bay; Sydney (Fort Denison); Camp Cove; Ku-ring-gai Y.c.
station_around_time_zone: Australia/Sydney
current_distance_to_station: 10.44
live_location: static
source_id: null
distance_from_ref: 0
icon: mdi:chevron-triple-up
friendly_name: tides
forecast:
  - tendancy: Tides Up
    datetime: '2024-03-14T12:00:00+00:00'
    height: 1.25
  - tendancy: Tides Up
    datetime: '2024-03-14T12:30:00+00:00'
    height: 1.30
  ......
  -   - tendancy: Tides Down
    datetime: '2024-03-14T22:30:00+00:00'
    height: 0.50


The new forecast attributes added as above with at least the datetime and the predicted height for each 30 min period (or hourly). Other details could also be added like tide tendency. The forecast values could be going back 6 hours and forward 42 hours like the current implementation/defaults. it might also be nice to predict a full week ahead (using days setting in the world tides info API).

I think UTC time would be best. I think the current implementation already gets data at 30 mins intervals. However, 60 mins might more naturally match with a weather forecast and other plottable forecasts.

Describe alternatives you've considered
I was going to create a sensor using the high/low tide numbers and the rule of twelfths to overcome the recent matplotlib issues but the details are already avaialble in the upstream API so it would be a nice extension of this great component to support forecasts.

Cannot Install

Hi, this will no longer load as an integration as neither standard or expert config can be selected - on submit the "Unknown Error Occurred" message is given.

Deprecated calls (Will not work anymore in HA Core 2025.1)

Hi,

today I noticed that HA is throwing warnings that some calls from this integration are deprecated and need to be replaced by the new ones.

This is the warning log from HA Core:

Logger: homeassistant.const
Source: helpers/deprecation.py:205
First occurred: 21:22:28 (13 occurrences)
Last logged: 21:23:57

LENGTH_FEET was used from worldtidesinfocustom, this is a deprecated constant which will be removed in HA Core 2025.1. Use UnitOfLength.FEET instead, please create a bug report at https://github.com/jugla/worldtidesinfocustom/issues
LENGTH_KILOMETERS was used from worldtidesinfocustom, this is a deprecated constant which will be removed in HA Core 2025.1. Use UnitOfLength.KILOMETERS instead, please create a bug report at https://github.com/jugla/worldtidesinfocustom/issues
LENGTH_METERS was used from worldtidesinfocustom, this is a deprecated constant which will be removed in HA Core 2025.1. Use UnitOfLength.METERS instead, please create a bug report at https://github.com/jugla/worldtidesinfocustom/issues
LENGTH_MILES was used from worldtidesinfocustom, this is a deprecated constant which will be removed in HA Core 2025.1. Use UnitOfLength.MILES instead, please create a bug report at https://github.com/jugla/worldtidesinfocustom/issues
DEVICE_CLASS_TIMESTAMP was used from stadtreinigung_hamburg, this is a deprecated constant which will be removed in HA Core 2025.1. Use SensorDeviceClass.TIMESTAMP instead, please report it to the author of the 'stadtreinigung_hamburg' custom integration

Can't install dependencies when running hass on a docker container.

I figure this is an edge case but I might as well report it. When running Home Assistant within a Docker container, worldtidesinfocustom tries to install its dependencies in /.local. That's not how things work in a Docker container. Basically you only have access to the "config" directory.

This was installed through HACS. The error occurs during the installation of the "integration" (during the collection of dependencies - matplotlib>=3.4.2 and pyworldtidesinfo==3.0.1).

Screenshot 2023-03-09 at 2 43 29 AM
Screenshot 2023-03-09 at 2 43 48 AM

Deprecation Warning for Distance Utility

Describe the bug
HA is reporting that the distance utility is deprecated since 2022.10 and will stop working in 2023.4. It should be updated to use unit_conversion.DistanceConverter instead.

To Reproduce
Steps to reproduce the behavior:
Use component with HA version > 2022.10 and view the home-assistant.log file.

Expected behavior
No deprecation warning

Additional context
Log output:

2022-12-27 09:16:04.806 WARNING (MainThread) [homeassistant.helpers.frame] Detected integration that uses distance utility. This is deprecated since 2022.10 and will stop working in Home Assistant 2023.4, it should be updated to use unit_conversion.DistanceConverter instead. Please report issue to the custom integration author for worldtidesinfocustom using this method at custom_components/worldtidesinfocustom/live_position_management.py, line 18: KM_PER_MI = dist_convert(1, LENGTH_MILES, LENGTH_KILOMETERS)
2022-12-27 09:16:04.807 WARNING (MainThread) [homeassistant.helpers.frame] Detected integration that uses distance utility. This is deprecated since 2022.10 and will stop working in Home Assistant 2023.4, it should be updated to use unit_conversion.DistanceConverter instead. Please report issue to the custom integration author for worldtidesinfocustom using this method at custom_components/worldtidesinfocustom/live_position_management.py, line 19: MI_PER_KM = dist_convert(1, LENGTH_KILOMETERS, LENGTH_MILES)
2022-12-27 09:16:04.808 WARNING (MainThread) [homeassistant.helpers.frame] Detected integration that uses distance utility. This is deprecated since 2022.10 and will stop working in Home Assistant 2023.4, it should be updated to use unit_conversion.DistanceConverter instead. Please report issue to the custom integration author for worldtidesinfocustom using this method at custom_components/worldtidesinfocustom/live_position_management.py, line 20: FT_PER_M = dist_convert(1, LENGTH_METERS, LENGTH_FEET)
2022-12-27 09:16:04.811 WARNING (MainThread) [homeassistant.helpers.frame] Detected integration that uses distance utility. This is deprecated since 2022.10 and will stop working in Home Assistant 2023.4, it should be updated to use unit_conversion.DistanceConverter instead. Please report issue to the custom integration author for worldtidesinfocustom using this method at custom_components/worldtidesinfocustom/worldtides_data_coordinator.py, line 20: KM_PER_MI = dist_convert(1, LENGTH_MILES, LENGTH_KILOMETERS)
2022-12-27 09:16:04.812 WARNING (MainThread) [homeassistant.helpers.frame] Detected integration that uses distance utility. This is deprecated since 2022.10 and will stop working in Home Assistant 2023.4, it should be updated to use unit_conversion.DistanceConverter instead. Please report issue to the custom integration author for worldtidesinfocustom using this method at custom_components/worldtidesinfocustom/worldtides_data_coordinator.py, line 21: MI_PER_KM = dist_convert(1, LENGTH_KILOMETERS, LENGTH_MILES)
2022-12-27 09:16:04.814 WARNING (MainThread) [homeassistant.helpers.frame] Detected integration that uses distance utility. This is deprecated since 2022.10 and will stop working in Home Assistant 2023.4, it should be updated to use unit_conversion.DistanceConverter instead. Please report issue to the custom integration author for worldtidesinfocustom using this method at custom_components/worldtidesinfocustom/worldtides_data_coordinator.py, line 22: FT_PER_M = dist_convert(1, LENGTH_METERS, LENGTH_FEET)

Images aren't 'showing'

Latest version of HA on HA Blue!
Latest version of WorldTidesCustom installed from HACS.
The integration is working well, but the 3 images just show a placeholder for a preview, and shows idle at the bottom of the image window?

Device Registry entry_type Deprecation Warning HA 2021.12.x

Describe the bug
Deprecation warning in HA log:

[homeassistant.helpers.frame] Detected code that uses str for device registry entry_type. This is deprecated and will stop working in Home Assistant 2022.3, it should be updated to use DeviceEntryType instead. Please report this issue.

To Reproduce
Steps to reproduce the behavior:
Run HA version 2021.12.x with the component loaded.

Expected behavior
Don't do that. ;)

Screenshots
n/a

Desktop (please complete the following information):

  • HA: 2021.12.4

Additional context
I'm seeing two instances of entry_type in the code:

  • sensor.py line 541
  • camera.py line 195

Per the HA developer docs, this is now an enum, DeviceEntryType. I don't see the enum members defined in the docs.

Ref: https://developers.home-assistant.io/docs/device_registry_index/#device-properties

Invalid configuration with HA 2024.2

Firstly, thanks for the integration.

Describe the bug
On the first reboot after installing 2024.2, a persistent notification appears stating "Invalid config
The following integrations and platforms could not be set up: worldtidesinfocustom
Please check your config and logs.

I've set the logger to for worldtidesinfocustom to "debug", but nothing appears in the log.

To Reproduce
Steps to reproduce the behavior:

  1. Install HA 2024.2

Expected behavior
No change to configuration from previous recent HA versions

image

Desktop (please complete the following information):
N/A - Persistent notification of configuration error

Smartphone (please complete the following information):
N/A - Persistent notification of configuration error

Additional context

EDIT - I now see the error in the log, which is the same as reported by others:

Setup failed for custom integration 'worldtidesinfocustom': Requirements for worldtidesinfocustom not found: ['matplotlib>=3.4.2'].

Hide Tides Sensor from Map

Is your feature request related to a problem? Please describe.
The tides sensor is showing on the Home Assistant map. It's not necessary and adds clutter.

Describe the solution you'd like
It would be great to have a way to disable the sensor entity from showing on the map. A good example of a component that has this as a toggle is the AirVisual component.

Describe alternatives you've considered
I looked for ways to have HA hide entities on the map or for a configuration option for this component, but I don't see one. If I've missed it please let me know. :)

Additional context
n/a

Install from HACS not working "Unknown error occurred"

Hi,

I have installed the "worldtidesinfocustom" integrations from HACS.
The proceed to the Config, Integrations, click "Add Integration", find "World Tide Info Custom".
It then opens a dialog box. When I select either option (standard / expert), I receive in red " Unknown error occurred" and cannot proceed to setup.

image

My setup is running:
core-2021.9.7
supervisor-2021.09.0
and latest HACS version: 1.15.2

When I look at the log viewer it is reporting the following:

File "/config/custom_components/worldtidesinfocustom/config_flow.py", line 102, in config_expert_schema
if async_get_used_api_key(self.hass) == None:
File "/config/custom_components/worldtidesinfocustom/init.py", line 78, in async_get_used_api_key
for entry_id, coordinator in hass.data[DOMAIN][DATA_COORDINATOR].items():
KeyError: 'worldtidesinfocustom'
File "/config/custom_components/worldtidesinfocustom/config_flow.py", line 73, in config_standard_schema
if async_get_used_api_key(self.hass) == None:
File "/config/custom_components/worldtidesinfocustom/init.py", line 78, in async_get_used_api_key
for entry_id, coordinator in hass.data[DOMAIN][DATA_COORDINATOR].items():
KeyError: 'worldtidesinfocustom'
File "/config/custom_components/worldtidesinfocustom/config_flow.py", line 73, in config_standard_schema
if async_get_used_api_key(self.hass) == None:
File "/config/custom_components/worldtidesinfocustom/init.py", line 78, in async_get_used_api_key
for entry_id, coordinator in hass.data[DOMAIN][DATA_COORDINATOR].items():
KeyError: 'worldtidesinfocustom'
File "/config/custom_components/worldtidesinfocustom/config_flow.py", line 73, in config_standard_schema
if async_get_used_api_key(self.hass) == None:
File "/config/custom_components/worldtidesinfocustom/init.py", line 78, in async_get_used_api_key
for entry_id, coordinator in hass.data[DOMAIN][DATA_COORDINATOR].items():
KeyError: 'worldtidesinfocustom'

My interpretation of this is that is is talking about a Key error/ api key, however because of the error that stops me proceeding with the integration setup, i cannot add my API key to solve it.

Appreciate any assistance here.

Thank you

Sensors all time Unknown

Describe the bug
something went wrong?

To Reproduce
Steps to reproduce the behavior:

  1. install and use...

Expected behavior
add api, add lat/long and no result

Screenshots
home-assistant_worldtidesinfocustom_2024-04-30T06-37-26.572Z.log
Screenshot from 2024-04-30 13-44-40
Screenshot from 2024-04-30 13-44-06
Screenshot from 2024-04-30 13-43-34

Desktop (please complete the following information):

  • OS: Home Assistant Os
  • Browser chrome
  • Version chrome - 124.0.6367.60 / haos - 2024.4.4 (12.2)

Smartphone (please complete the following information):

  • Device: android xiaomi

Additional context
also try reinstall, change api and lat/long

Plot and Long Plot do not load

I'm running in Docker and installed this through HACS

The integration works fine except for the plot and long plot. All entities show correct values except for those. The curve picture also works fine.

I see these line in my HA log:

[custom_components.worldtidesinfo.custom.camera] Could not read camera [redacted] image from file: /config/www/[redacted]_plot_long.png

[custom_components.worldtidesinfocustom.camera] Could not read camera [redacted] image from file: /config/www/[redacted]_plot.png

I looked in the folder and those files do not exist.

On startup it looks like it fails to create the images.

[custom_components.worldtidesinfocustom.camera] Camera: Sync Fetch new picture image from /config/www/[redacted]_plot.png
[custom_components.worldtidesinfocustom.camera] Could not read camera [redacted] image from file: /config/www/[redacted]_plot.png
[custom_components.worldtidesinfocustom.camera] Camera update :  /config/www/[redacted]_plot.png
[custom_components.worldtidesinfocustom.camera] Camera Async Update [redacted]
[custom_components.worldtidesinfocustom.camera] Camera: Sync Fetch new picture image from /config/www/[redacted]_plot_long.png
[custom_components.worldtidesinfocustom.camera] Could not read camera [redacted] image from file: /config/www/[redacted]_plot_long.png
[custom_components.worldtidesinfocustom.camera] Camera update :  /config/www/[redacted]_plot_long.png

I also see these two warnings in the logs. I do not know if they're related or not.

WARNING (MainThread) [homeassistant.helpers.frame] Detected that custom integration 'worldtidesinfocustom' calls async_forward_entry_setup for integration, worldtidesinfocustom with title: World Tides Info Custom Cloud API ([redacted_lat_long]) and entry_id: 01J2RZR9NRD4MY0FDYR465D5GY, which is deprecated and will stop working in Home Assistant 2025.6, await async_forward_entry_setups instead at custom_components/worldtidesinfocustom/__init__.py, line 180: hass.async_create_task(, please create a bug report at https://github.com/jugla/worldtidesinfocustom/issues


WARNING (MainThread) [homeassistant.util.loop] Detected blocking call to open with args ('/config/.storage/worldtidesinfocustom.[redacted].ser', 'rb') inside the event loop by custom integration 'worldtidesinfocustom' at custom_components/worldtidesinfocustom/storage_mngt.py, line 81: file_handler = open(self._storage_full_path, "rb") (offender: /config/custom_components/worldtidesinfocustom/storage_mngt.py, line 81: file_handler = open(self._storage_full_path, "rb")), please create a bug report at https://github.com/jugla/worldtidesinfocustom/issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.