From ff7b5f65eac98a462e707af7f2b06113f18a50b9 Mon Sep 17 00:00:00 2001 From: Sarah Hall <51332703+sjh1024@users.noreply.github.com> Date: Tue, 16 Aug 2022 09:39:06 -0400 Subject: [PATCH 01/44] create spatial class, automatic polygon closure functionality (#322) * create Spatial module and class for handling spatial inputs, including validation * remove `geospatial.py` module * add functionality to automatically close polygons where first and last coordinates don't match * more thorough testing for spatial inputs * removed old validate_inputs spatial tests (now covered in test_spatial) * remove rather than reformat commented deprecation warning --- .pre-commit-config.yaml | 2 +- .../documentation/classes_dev_uml.svg | 390 ++++++------- .../documentation/classes_user_uml.svg | 269 ++++----- .../user_guide/documentation/components.rst | 4 +- .../documentation/packages_user_uml.svg | 46 +- doc/source/user_guide/documentation/query.rst | 1 + icepyx/core/geospatial.py | 87 --- icepyx/core/query.py | 102 ++-- icepyx/core/spatial.py | 512 ++++++++++++++++++ icepyx/core/validate_inputs.py | 128 ----- icepyx/core/visualization.py | 6 +- icepyx/tests/test_behind_NSIDC_API_login.py | 4 +- icepyx/tests/test_geospatial.py | 30 - icepyx/tests/test_spatial.py | 366 +++++++++++++ icepyx/tests/test_validate_inputs.py | 120 ---- 15 files changed, 1331 insertions(+), 736 deletions(-) delete mode 100644 icepyx/core/geospatial.py create mode 100644 icepyx/core/spatial.py delete mode 100644 icepyx/tests/test_geospatial.py create mode 100644 icepyx/tests/test_spatial.py diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 777350a71..74a6e3028 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,5 +1,5 @@ repos: - repo: https://github.com/psf/black - rev: stable + rev: 22.6.0 hooks: - id: black \ No newline at end of file diff --git a/doc/source/user_guide/documentation/classes_dev_uml.svg b/doc/source/user_guide/documentation/classes_dev_uml.svg index 62d1a3c01..24fe4141c 100644 --- a/doc/source/user_guide/documentation/classes_dev_uml.svg +++ b/doc/source/user_guide/documentation/classes_dev_uml.svg @@ -4,11 +4,11 @@ - - + + classes_dev_uml - + icepyx.core.Earthdata.Earthdata @@ -18,7 +18,7 @@ capability_url email netrc : NoneType -pswd : str, NoneType +pswd : NoneType, str session : Session uid @@ -29,17 +29,15 @@ icepyx.core.query.GenQuery - -GenQuery - -_end : datetime -_geom_filepath : NoneType -_spat_extent -_start : datetime -extent_type : str - -__init__(spatial_extent, date_range, start_time, end_time) -__str__() + +GenQuery + +_end : datetime +_sp_extent +_start : datetime + +__init__(spatial_extent, date_range, start_time, end_time) +__str__() @@ -58,104 +56,105 @@ icepyx.core.query.Query - -Query - -CMRparams -_CMRparams -_about_product -_cust_options : dict -_cycles : list -_email -_file_vars -_granules -_order_vars -_prod : NoneType, str -_readable_granule_name : list -_reqparams -_s3login_credentials -_session : Session -_source : str -_subsetparams : NoneType -_tracks : list -_version -cycles -dataset -dates -end_time -file_vars -granules -order_vars -product -product_version -reqparams -spatial_extent -start_time -tracks - -__init__(product, spatial_extent, date_range, start_time, end_time, version, cycles, tracks, files) -__str__() -avail_granules(ids, cycles, tracks, s3urls) -download_granules(path, verbose, subset, restart) -earthdata_login(uid, email, s3token) -latest_version() -order_granules(verbose, subset, email) -product_all_info() -product_summary_info() -show_custom_options(dictview) -subsetparams() -visualize_elevation() -visualize_spatial_extent() + +Query + +CMRparams +_CMRparams +_about_product +_cust_options : dict +_cycles : list +_email +_file_vars +_granules +_order_vars +_prod : NoneType, str +_readable_granule_name : list +_reqparams +_s3login_credentials +_session : Session +_source : str +_subsetparams : NoneType +_tracks : list +_version +cycles +dataset +dates +end_time +file_vars +granules +order_vars +product +product_version +reqparams +spatial +spatial_extent +start_time +tracks + +__init__(product, spatial_extent, date_range, start_time, end_time, version, cycles, tracks, files) +__str__() +avail_granules(ids, cycles, tracks, s3urls) +download_granules(path, verbose, subset, restart) +earthdata_login(uid, email, s3token) +latest_version() +order_granules(verbose, subset, email) +product_all_info() +product_summary_info() +show_custom_options(dictview) +subsetparams() +visualize_elevation() +visualize_spatial_extent() icepyx.core.granules.Granules->icepyx.core.query.Query - - -_granules + + +_granules icepyx.core.granules.Granules->icepyx.core.query.Query - - -_granules + + +_granules icepyx.core.icesat2data.Icesat2Data - -Icesat2Data - - -__init__() + +Icesat2Data + + +__init__() icepyx.core.exceptions.NsidcQueryError - -NsidcQueryError - -errmsg -msgtxt : str - -__init__(errmsg, msgtxt) -__str__() + +NsidcQueryError + +errmsg +msgtxt : str + +__init__(errmsg, msgtxt) +__str__() icepyx.core.exceptions.QueryError - -QueryError - - - + +QueryError + + + icepyx.core.exceptions.NsidcQueryError->icepyx.core.exceptions.QueryError - - + + @@ -165,7 +164,7 @@ _fmted_keys : dict, NoneType _poss_keys : dict -_reqtype : NoneType, str +_reqtype : str, NoneType fmted_keys partype poss_keys @@ -180,137 +179,160 @@ icepyx.core.APIformatting.Parameters->icepyx.core.query.Query - - -_CMRparams + + +_CMRparams icepyx.core.APIformatting.Parameters->icepyx.core.query.Query - - -_reqparams + + +_reqparams icepyx.core.APIformatting.Parameters->icepyx.core.query.Query - - -_subsetparams + + +_subsetparams icepyx.core.APIformatting.Parameters->icepyx.core.query.Query - - -_subsetparams + + +_subsetparams icepyx.core.query.Query->icepyx.core.query.GenQuery - - + + icepyx.core.read.Read - -Read - -_catalog_path : NoneType -_filelist : NoneType, list -_is2catalog : Catalog -_out_obj : Dataset -_pattern : str -_prod : NoneType, str -_read_vars -_source_type : str -data_source : NoneType -is2catalog -vars - -__init__(data_source, product, filename_pattern, catalog, out_obj_type) -_add_vars_to_ds(is2ds, ds, grp_path, wanted_groups_tiered, wanted_dict) -_build_dataset_template(file) -_build_single_file_dataset(file, groups_list) -_check_source_for_pattern(source, filename_pattern) -_combine_nested_vars(is2ds, ds, grp_path, wanted_dict) -_read_single_grp(file, grp_path) -load() + +Read + +_catalog_path : NoneType +_filelist : list, NoneType +_is2catalog : Catalog +_out_obj : Dataset +_pattern : str +_prod : NoneType, str +_read_vars +_source_type : str +data_source : NoneType +is2catalog +vars + +__init__(data_source, product, filename_pattern, catalog, out_obj_type) +_add_vars_to_ds(is2ds, ds, grp_path, wanted_groups_tiered, wanted_dict) +_build_dataset_template(file) +_build_single_file_dataset(file, groups_list) +_check_source_for_pattern(source, filename_pattern) +_combine_nested_vars(is2ds, ds, grp_path, wanted_dict) +_read_single_grp(file, grp_path) +load() - + -icepyx.core.variables.Variables - -Variables - -_avail : NoneType, list -_session : NoneType -_vartype -_version : NoneType -path : NoneType -product : NoneType -wanted : NoneType, dict - -__init__(vartype, avail, wanted, session, product, version, path) -_check_valid_lists(vgrp, allpaths, var_list, beam_list, keyword_list) -_get_combined_list(beam_list, keyword_list) -_get_sum_varlist(var_list, all_vars, defaults) -_iter_paths(sum_varlist, req_vars, vgrp, beam_list, keyword_list) -_iter_vars(sum_varlist, req_vars, vgrp) -append(defaults, var_list, beam_list, keyword_list) -avail(options, internal) -parse_var_list(varlist, tiered, tiered_vars) -remove(all, var_list, beam_list, keyword_list) +icepyx.core.spatial.Spatial + +Spatial + +_ext_type : str +_geom_file : NoneType +_spatial_ext +extent_file +extent_type +spatial_extent + +__init__(spatial_extent) +__str__() - + -icepyx.core.variables.Variables->icepyx.core.query.Query - - -_order_vars +icepyx.core.spatial.Spatial->icepyx.core.query.GenQuery + + +_sp_extent + + + +icepyx.core.variables.Variables + +Variables + +_avail : NoneType, list +_session : NoneType +_vartype +_version : NoneType +path : NoneType +product : NoneType +wanted : NoneType, dict + +__init__(vartype, avail, wanted, session, product, version, path) +_check_valid_lists(vgrp, allpaths, var_list, beam_list, keyword_list) +_get_combined_list(beam_list, keyword_list) +_get_sum_varlist(var_list, all_vars, defaults) +_iter_paths(sum_varlist, req_vars, vgrp, beam_list, keyword_list) +_iter_vars(sum_varlist, req_vars, vgrp) +append(defaults, var_list, beam_list, keyword_list) +avail(options, internal) +parse_var_list(varlist, tiered, tiered_vars) +remove(all, var_list, beam_list, keyword_list) icepyx.core.variables.Variables->icepyx.core.query.Query - - -_order_vars + + +_order_vars icepyx.core.variables.Variables->icepyx.core.query.Query - - -_file_vars + + +_order_vars - + +icepyx.core.variables.Variables->icepyx.core.query.Query + + +_file_vars + + + icepyx.core.variables.Variables->icepyx.core.read.Read - - -_read_vars + + +_read_vars - + icepyx.core.visualization.Visualize - -Visualize - -bbox : list -cycles : NoneType -date_range : NoneType -product : NoneType, str -tracks : NoneType - -__init__(query_obj, product, spatial_extent, date_range, cycles, tracks) -generate_OA_parameters(): list -grid_bbox(binsize): list -make_request(base_url, payload) -parallel_request_OA(): da.array -query_icesat2_filelist(): tuple -request_OA_data(paras): da.array -viz_elevation(): (hv.DynamicMap, hv.Layout) + +Visualize + +bbox : list +cycles : NoneType +date_range : NoneType +product : NoneType, str +tracks : NoneType + +__init__(query_obj, product, spatial_extent, date_range, cycles, tracks) +generate_OA_parameters(): list +grid_bbox(binsize): list +make_request(base_url, payload) +parallel_request_OA(): da.array +query_icesat2_filelist(): tuple +request_OA_data(paras): da.array +viz_elevation(): (hv.DynamicMap, hv.Layout) diff --git a/doc/source/user_guide/documentation/classes_user_uml.svg b/doc/source/user_guide/documentation/classes_user_uml.svg index 22206d703..961299b15 100644 --- a/doc/source/user_guide/documentation/classes_user_uml.svg +++ b/doc/source/user_guide/documentation/classes_user_uml.svg @@ -4,11 +4,11 @@ - - + + classes_user_uml - + icepyx.core.Earthdata.Earthdata @@ -27,12 +27,11 @@ icepyx.core.query.GenQuery - -GenQuery - -extent_type : str - - + +GenQuery + + + @@ -50,84 +49,85 @@ icepyx.core.query.Query - -Query - -CMRparams -cycles -dataset -dates -end_time -file_vars -granules -order_vars -product -product_version -reqparams -spatial_extent -start_time -tracks - -avail_granules(ids, cycles, tracks, s3urls) -download_granules(path, verbose, subset, restart) -earthdata_login(uid, email, s3token) -latest_version() -order_granules(verbose, subset, email) -product_all_info() -product_summary_info() -show_custom_options(dictview) -subsetparams() -visualize_elevation() -visualize_spatial_extent() + +Query + +CMRparams +cycles +dataset +dates +end_time +file_vars +granules +order_vars +product +product_version +reqparams +spatial +spatial_extent +start_time +tracks + +avail_granules(ids, cycles, tracks, s3urls) +download_granules(path, verbose, subset, restart) +earthdata_login(uid, email, s3token) +latest_version() +order_granules(verbose, subset, email) +product_all_info() +product_summary_info() +show_custom_options(dictview) +subsetparams() +visualize_elevation() +visualize_spatial_extent() icepyx.core.granules.Granules->icepyx.core.query.Query - - + + _granules icepyx.core.granules.Granules->icepyx.core.query.Query - - -_granules + + +_granules icepyx.core.icesat2data.Icesat2Data - -Icesat2Data - - - + +Icesat2Data + + + icepyx.core.exceptions.NsidcQueryError - -NsidcQueryError - -errmsg -msgtxt : str - - + +NsidcQueryError + +errmsg +msgtxt : str + + icepyx.core.exceptions.QueryError - -QueryError - - - + +QueryError + + + icepyx.core.exceptions.NsidcQueryError->icepyx.core.exceptions.QueryError - - + + @@ -146,111 +146,130 @@ icepyx.core.APIformatting.Parameters->icepyx.core.query.Query - - + + _CMRparams icepyx.core.APIformatting.Parameters->icepyx.core.query.Query - - + + _reqparams icepyx.core.APIformatting.Parameters->icepyx.core.query.Query - - + + _subsetparams icepyx.core.APIformatting.Parameters->icepyx.core.query.Query - - -_subsetparams + + +_subsetparams icepyx.core.query.Query->icepyx.core.query.GenQuery - - + + icepyx.core.read.Read - -Read - -data_source : NoneType -is2catalog -vars - -load() + +Read + +data_source : NoneType +is2catalog +vars + +load() - + +icepyx.core.spatial.Spatial + +Spatial + +extent_file +extent_type +spatial_extent + + + + + +icepyx.core.spatial.Spatial->icepyx.core.query.GenQuery + + +_sp_extent + + + icepyx.core.variables.Variables - -Variables - -path : NoneType -product : NoneType -wanted : dict, NoneType - -append(defaults, var_list, beam_list, keyword_list) -avail(options, internal) -parse_var_list(varlist, tiered, tiered_vars) -remove(all, var_list, beam_list, keyword_list) + +Variables + +path : NoneType +product : NoneType +wanted : dict, NoneType + +append(defaults, var_list, beam_list, keyword_list) +avail(options, internal) +parse_var_list(varlist, tiered, tiered_vars) +remove(all, var_list, beam_list, keyword_list) - + icepyx.core.variables.Variables->icepyx.core.query.Query - - + + _order_vars - + icepyx.core.variables.Variables->icepyx.core.query.Query - - -_order_vars + + +_order_vars - + icepyx.core.variables.Variables->icepyx.core.query.Query - - -_file_vars + + +_file_vars - + icepyx.core.variables.Variables->icepyx.core.read.Read - - + + _read_vars - + icepyx.core.visualization.Visualize - -Visualize - -bbox : list -cycles : NoneType -date_range : NoneType -product : str, NoneType -tracks : NoneType - -generate_OA_parameters(): list -grid_bbox(binsize): list -make_request(base_url, payload) -parallel_request_OA(): da.array -query_icesat2_filelist(): tuple -request_OA_data(paras): da.array -viz_elevation(): (hv.DynamicMap, hv.Layout) + +Visualize + +bbox : list +cycles : NoneType +date_range : NoneType +product : NoneType, str +tracks : NoneType + +generate_OA_parameters(): list +grid_bbox(binsize): list +make_request(base_url, payload) +parallel_request_OA(): da.array +query_icesat2_filelist(): tuple +request_OA_data(paras): da.array +viz_elevation(): (hv.DynamicMap, hv.Layout) diff --git a/doc/source/user_guide/documentation/components.rst b/doc/source/user_guide/documentation/components.rst index 5a72d6c8c..cfe07b39a 100644 --- a/doc/source/user_guide/documentation/components.rst +++ b/doc/source/user_guide/documentation/components.rst @@ -19,10 +19,10 @@ Earthdata :undoc-members: :show-inheritance: -geospatial +spatial ---------- -.. automodule:: icepyx.core.geospatial +.. automodule:: icepyx.core.spatial :members: :undoc-members: :show-inheritance: diff --git a/doc/source/user_guide/documentation/packages_user_uml.svg b/doc/source/user_guide/documentation/packages_user_uml.svg index d2a2370b1..e622bfb2f 100644 --- a/doc/source/user_guide/documentation/packages_user_uml.svg +++ b/doc/source/user_guide/documentation/packages_user_uml.svg @@ -4,11 +4,11 @@ - + packages_user_uml - + icepyx.core @@ -33,38 +33,32 @@ icepyx.core.exceptions - - -icepyx.core.geospatial - -icepyx.core.geospatial - - + icepyx.core.granules icepyx.core.granules - + icepyx.core.icesat2data - -icepyx.core.icesat2data + +icepyx.core.icesat2data - + icepyx.core.is2cat - -icepyx.core.is2cat + +icepyx.core.is2cat - + icepyx.core.is2ref - -icepyx.core.is2ref + +icepyx.core.is2ref - + icepyx.core.query icepyx.core.query @@ -106,7 +100,7 @@ - + icepyx.core.read icepyx.core.read @@ -117,11 +111,17 @@ + + +icepyx.core.spatial + +icepyx.core.spatial + icepyx.core.validate_inputs - -icepyx.core.validate_inputs + +icepyx.core.validate_inputs diff --git a/doc/source/user_guide/documentation/query.rst b/doc/source/user_guide/documentation/query.rst index fc499b08d..f27e3e6fd 100644 --- a/doc/source/user_guide/documentation/query.rst +++ b/doc/source/user_guide/documentation/query.rst @@ -29,6 +29,7 @@ Attributes Query.granules Query.order_vars Query.reqparams + Query.spatial Query.spatial_extent Query.subsetparams Query.start_time diff --git a/icepyx/core/geospatial.py b/icepyx/core/geospatial.py deleted file mode 100644 index 3afba875a..000000000 --- a/icepyx/core/geospatial.py +++ /dev/null @@ -1,87 +0,0 @@ -import geopandas as gpd -from shapely.geometry import Polygon - -# DevGoal: need to update the spatial_extent docstring to describe coordinate order for input -def geodataframe(extent_type, spatial_extent, file=False): - """ - Return a geodataframe of the spatial extent - - Parameters - ---------- - extent_type : string - One of 'bounding_box' or 'polygon', indicating what type of input the spatial extent is - - spatial_extent : string - A string of the spatial extent. If file is False, the string should be a - list of coordinates in decimal degrees of [lower-left-longitude, - lower-left-latitute, upper-right-longitude, upper-right-latitude] or - [longitude1, latitude1, longitude2, latitude2, ... longitude_n,latitude_n, longitude1,latitude1]. - If file is True, the string is the full file path and filename to the - file containing the desired spatial extent. - - file : boolean, default False - Indication for whether the spatial_extent string is a filename or coordinate list - - See Also - -------- - icepyx.Query - - Examples - -------- - >>> reg_a = ipx.Query('ATL06',[-55, 68, -48, 71],['2019-02-20','2019-02-28']) - >>> gdf = geodataframe(reg_a.extent_type, reg_a._spat_extent) - >>> gdf.geometry - 0 POLYGON ((-55.00000 68.00000, -55.00000 71.000... - Name: geometry, dtype: geometry - """ - - if extent_type == "bounding_box": - boxx = [ - spatial_extent[0], - spatial_extent[0], - spatial_extent[2], - spatial_extent[2], - spatial_extent[0], - ] - boxy = [ - spatial_extent[1], - spatial_extent[3], - spatial_extent[3], - spatial_extent[1], - spatial_extent[1], - ] - # DevGoal: check to see that the box is actually correctly constructed; have not checked actual location of test coordinates - gdf = gpd.GeoDataFrame(geometry=[Polygon(list(zip(boxx, boxy)))]) - - # DevGoal: Currently this if/else within this elif are not tested... - # DevGoal: the crs setting and management needs to be improved - elif extent_type == "polygon" and file == False: - # DevGoal: look into when/if this if is even called. I think all the incoming spatial_extents without a file will be floats... - # DEL: I don't think this if is ever used, so long as the spatial extent always comes in as a list of floats - # if isinstance(spatial_extent,str): - # print('this string instance is needed') - # spat_extent = spatial_extent.split(',') - # spatial_extent_geom = Polygon(zip(spat_extent[0::2], spat_extent[1::2])) - if isinstance(spatial_extent, Polygon): - spatial_extent_geom = spatial_extent - else: - spatial_extent_geom = Polygon( - zip(spatial_extent[0::2], spatial_extent[1::2]) - ) # spatial_extent - - gdf = gpd.GeoDataFrame( - index=[0], crs="epsg:4326", geometry=[spatial_extent_geom] - ) - - # DevGoal: Currently this elif isn't tested... - elif extent_type == "polygon" and file == True: - gdf = gpd.read_file(spatial_extent) - - else: - raise TypeError( - "Your spatial extent type is not an accepted input and a geodataframe cannot be constructed" - ) - # DevNote: can't get test for this else to pass if print the extent_type in the string... - # raise TypeError("Your spatial extent type (" + extent_type + ") is not an accepted input and a geodataframe cannot be constructed") - - return gdf diff --git a/icepyx/core/query.py b/icepyx/core/query.py index 7a1f74a13..d7c9abede 100644 --- a/icepyx/core/query.py +++ b/icepyx/core/query.py @@ -19,8 +19,8 @@ # QUESTION: why doesn't from granules import Granules as Granules work, since granules=icepyx.core.granules? # from icepyx.core.granules import Granules from icepyx.core.variables import Variables as Variables -import icepyx.core.geospatial as geospatial import icepyx.core.validate_inputs as val +import icepyx.core.spatial as spat from icepyx.core.visualization import Visualize @@ -44,7 +44,6 @@ class GenQuery: or [longitude1, latitude1, longitude2, latitude2, ... longitude_n,latitude_n, longitude1,latitude1]. Your list must contain at least four points, where the first and last are identical. - DevGoal: adapt code so the polygon is automatically closed if need be Geospatial polygon files are entered as strings with the full file path and must contain only one polygon with the area of interest. Currently supported formats are: kml, shp, and gpkg @@ -53,14 +52,14 @@ class GenQuery: The required date format is 'YYYY-MM-DD' strings, where YYYY = 4 digit year, MM = 2 digit month, DD = 2 digit day. Currently, a list of specific dates (rather than a range) is not accepted. - DevGoal: accept date-time objects, dicts (with 'start_date' and 'end_date' keys, and DOY inputs). - DevGoal: allow searches with a list of dates, rather than a range. + TODO: accept date-time objects, dicts (with 'start_date' and 'end_date' keys, and DOY inputs). + TODO: allow searches with a list of dates, rather than a range. start_time : HH:mm:ss, default 00:00:00 Start time in UTC/Zulu (24 hour clock). If None, use default. - DevGoal: check for time in date-range date-time object, if that's used for input. + TODO: check for time in date-range date-time object, if that's used for input. end_time : HH:mm:ss, default 23:59:59 End time in UTC/Zulu (24 hour clock). If None, use default. - DevGoal: check for time in date-range date-time object, if that's used for input. + TODO: check for time in date-range date-time object, if that's used for input. Examples -------- @@ -104,17 +103,20 @@ def __init__( self, spatial_extent=None, date_range=None, start_time=None, end_time=None ): # validate & init spatial extent - self.extent_type, self._spat_extent, self._geom_filepath = val.spatial( - spatial_extent - ) + + self._sp_extent = spat.Spatial(spatial_extent) # valiidate and init temporal constraints + # TODO: Update this to use Temporal class when completed if date_range: self._start, self._end = val.temporal(date_range, start_time, end_time) def __str__(self): str = "Extent type: {0} \nCoordinates: {1}\nDate range: ({2}, {3})".format( - self.extent_type, self._spat_extent, self._start, self._end + self._sp_extent.extent_type, + self._sp_extent.spatial_extent, + self._start, + self._end, ) return str @@ -123,7 +125,7 @@ def __str__(self): # Note: add files to docstring once implemented # DevNote: currently this class is not tested class Query(GenQuery): - r""" + """ Query and get ICESat-2 data ICESat-2 Data object to query, obtain, and perform basic operations on @@ -207,8 +209,6 @@ def __init__( tracks=None, files=None, # NOTE: if you end up implemeting this feature here, use a better variable name than "files" ): - # warnings.filterwarnings("always") - # warnings.warn("Please note: as of 2020-05-05, a major reorganization of the core icepyx.query code may result in errors produced by now depricated functions. Please see our documentation pages or example notebooks for updates.") # Check necessary combination of input has been specified if ( @@ -303,6 +303,42 @@ def product_version(self): """ return self._version + @property + def spatial(self): + """ + Return the Spatial object containing spatial extent information for the query object. + + See Also + -------- + icepyx.core.Spatial + + Examples + -------- + >>> reg_a = Query('ATL06',[-55, 68, -48, 71],['2019-02-20','2019-02-28']) + >>> print(reg_a.spatial) + Extent type: bounding_box + Coordinates: [-55.0, 68.0, -48.0, 71.0] + + >>> reg_a_poly = [(-55, 68), (-55, 71), (-48, 71), (-48, 68), (-55, 68)] + >>> reg_a_dates = ['2019-02-20','2019-02-28'] + >>> reg_a = ipx.Query('ATL06', reg_a_poly, reg_a_dates) + >>> print(reg_a.spatial) + Extent type: polygon + Coordinates: POLYGON ((-55 68, -55 71, -48 71, -48 68, -55 68)) + + + >>> aoi = str(Path('./doc/source/example_notebooks/supporting_files/simple_test_poly.gpkg').resolve()) + >>> reg_a_dates = ['2019-02-22','2019-02-28'] + >>> reg_a = ipx.Query('ATL06', aoi, reg_a_dates) + >>> print(reg_a.spatial) # doctest: +SKIP + Extent type: polygon + Source file: ./doc/source/example_notebooks/supporting_files/simple_test_poly.gpkg + Coordinates: POLYGON ((-55 68, -55 71, -48 71, -48 68, -55 68)) + + + """ + return self._sp_extent + @property def spatial_extent(self): """ @@ -329,12 +365,12 @@ def spatial_extent(self): """ - if self.extent_type == "bounding_box": - return ("bounding box", self._spat_extent) - elif self.extent_type == "polygon": + if self._sp_extent.extent_type == "bounding_box": + return ("bounding box", self._sp_extent.spatial_extent) + elif self._sp_extent.extent_type == "polygon": # return ['polygon', self._spat_extent] - # Note: self._spat_extent is a shapely geometry object - return ("polygon", self._spat_extent.exterior.coords.xy) + # Note: self._sp_extent._spat_extent is a shapely geometry object + return ("polygon", self._sp_extent.spatial_extent.exterior.coords.xy) else: return ("unknown spatial type", None) @@ -475,8 +511,8 @@ def CMRparams(self): self._CMRparams.build_params( product=self.product, version=self._version, - extent_type=self.extent_type, - spatial_extent=self._spat_extent, + extent_type=self._sp_extent.extent_type, + spatial_extent=self._sp_extent.spatial_extent, **kwargs, ) @@ -546,17 +582,17 @@ def subsetparams(self, **kwargs): else: if self._subsetparams == None: self._subsetparams = apifmt.Parameters("subset") - if self._geom_filepath is not None: + if self._sp_extent.extent_file is not None: self._subsetparams.build_params( - geom_filepath=self._geom_filepath, - extent_type=self.extent_type, - spatial_extent=self._spat_extent, + geom_filepath=self._sp_extent.extent_file, + extent_type=self._sp_extent.extent_type, + spatial_extent=self._sp_extent.spatial_extent, **kwargs, ) else: self._subsetparams.build_params( - extent_type=self.extent_type, - spatial_extent=self._spat_extent, + extent_type=self._sp_extent.extent_type, + spatial_extent=self._sp_extent.spatial_extent, **kwargs, ) @@ -917,7 +953,8 @@ def avail_granules(self, ids=False, cycles=False, tracks=False, s3urls=False): return granules.info(self.granules.avail) # DevGoal: display output to indicate number of granules successfully ordered (and number of errors) - # DevGoal: deal with subset=True for variables now, and make sure that if a variable subset Coverage kwarg is input it's successfully passed through all other functions even if this is the only one run. + # DevGoal: deal with subset=True for variables now, and make sure that if a variable subset + # Coverage kwarg is input it's successfully passed through all other functions even if this is the only one run. def order_granules(self, verbose=False, subset=True, email=False, **kwargs): """ Place an order for the available granules for the query object. @@ -984,7 +1021,8 @@ def order_granules(self, verbose=False, subset=True, email=False, **kwargs): ): del self._subsetparams - # REFACTOR: add checks here to see if the granules object has been created, and also if it already has a list of avail granules (if not, need to create one and add session) + # REFACTOR: add checks here to see if the granules object has been created, + # and also if it already has a list of avail granules (if not, need to create one and add session) if not hasattr(self, "_granules"): self.granules @@ -1005,7 +1043,7 @@ def order_granules(self, verbose=False, subset=True, email=False, **kwargs): verbose, subset, session=self._session, - geom_filepath=self._geom_filepath, + geom_filepath=self._spatial._geom_file, ) else: @@ -1016,7 +1054,7 @@ def order_granules(self, verbose=False, subset=True, email=False, **kwargs): verbose, subset, session=self._session, - geom_filepath=self._geom_filepath, + geom_filepath=self._spatial._geom_file, ) # DevGoal: put back in the kwargs here so that people can just call download granules with subset=False! @@ -1100,7 +1138,9 @@ def visualize_spatial_extent( >>> reg_a.visualize_spatial_extent # doctest: +SKIP [visual map output] """ - gdf = geospatial.geodataframe(self.extent_type, self._spat_extent) + gdf = spat.geodataframe( + self._sp_extent.extent_type, self._sp_extent.spatial_extent + ) try: from shapely.geometry import Polygon diff --git a/icepyx/core/spatial.py b/icepyx/core/spatial.py new file mode 100644 index 000000000..eebc09a83 --- /dev/null +++ b/icepyx/core/spatial.py @@ -0,0 +1,512 @@ +import geopandas as gpd +import numpy as np +import os +from pathlib import Path +from shapely.geometry import Polygon +import warnings + +import icepyx.core.APIformatting as apifmt + +# DevGoal: need to update the spatial_extent docstring to describe coordinate order for input + + +def geodataframe(extent_type, spatial_extent, file=False): + """ + Return a geodataframe of the spatial extent + + Parameters + ---------- + extent_type : string + One of 'bounding_box' or 'polygon', indicating what type of input the spatial extent is + + spatial_extent : string or list + A list containing the spatial extent OR a string containing a filename. + If file is False, spatial_extent should be a + list of coordinates in decimal degrees of [lower-left-longitude, + lower-left-latitute, upper-right-longitude, upper-right-latitude] or + [longitude1, latitude1, longitude2, latitude2, ... longitude_n,latitude_n, longitude1,latitude1]. + + If file is True, spatial_extent is a string containing the full file path and filename to the + file containing the desired spatial extent. + + file : boolean, default False + Indication for whether the spatial_extent string is a filename or coordinate list + + See Also + -------- + icepyx.Query + + Examples + -------- + >>> reg_a = ipx.Query('ATL06',[-55, 68, -48, 71],['2019-02-20','2019-02-28']) + >>> gdf = geodataframe(reg_a.spatial.extent_type, reg_a.spatial.spatial_extent) + >>> gdf.geometry + 0 POLYGON ((-55.00000 68.00000, -55.00000 71.000... + Name: geometry, dtype: geometry + """ + + if extent_type == "bounding_box": + boxx = [ + spatial_extent[0], + spatial_extent[0], + spatial_extent[2], + spatial_extent[2], + spatial_extent[0], + ] + boxy = [ + spatial_extent[1], + spatial_extent[3], + spatial_extent[3], + spatial_extent[1], + spatial_extent[1], + ] + # DevGoal: check to see that the box is actually correctly constructed; + # have not checked actual location of test coordinates + # TODO: test case that ensures gdf is constructed as expected (correct coords, order, etc.) + gdf = gpd.GeoDataFrame(geometry=[Polygon(list(zip(boxx, boxy)))]) + + # DevGoal: Currently this if/else within this elif are not tested... + # DevGoal: the crs setting and management needs to be improved + + elif extent_type == "polygon" and file == False: + + # if spatial_extent is already a Polygon + if isinstance(spatial_extent, Polygon): + spatial_extent_geom = spatial_extent + + # else, spatial_extent must be a list of floats (or list of tuples of floats) + else: + spatial_extent_geom = Polygon( + # syntax of dbl colon is- "start:stop:steps" + # 0::2 = start at 0, grab every other coord after + # 1::2 = start at 1, grab every other coord after + zip(spatial_extent[0::2], spatial_extent[1::2]) + ) # spatial_extent + # TODO: check if the crs param should always just be epsg:4326 for everything OR if it should be a parameter + gdf = gpd.GeoDataFrame( + index=[0], crs="epsg:4326", geometry=[spatial_extent_geom] + ) + + # If extent_type is a polygon AND from a file, create a geopandas geodataframe from it + # DevGoal: Currently this elif isn't tested... + elif extent_type == "polygon" and file == True: + gdf = gpd.read_file(spatial_extent) + + else: + raise TypeError( + "Your spatial extent type is not an accepted input and a geodataframe cannot be constructed" + ) + # TODO: Get this working again + # DevNote: can't get test for this else to pass if print the extent_type in the string... + # raise TypeError("Your spatial extent type (" + extent_type + ") is not an accepted input and a geodataframe cannot be constructed") + + return gdf + + +def validate_bounding_box(spatial_extent): + """ + Validates the spatial_extent parameter as a bounding box. + + If the spatial_extent is a valid bounding box, returns a tuple containing the Spatial object parameters + for the bounding box; otherwise, throw an error containing the reason the bounding box is invalid. + + Parameters + ---------- + spatial_extent: list or np.ndarray + A list or np.ndarray of strings, numerics, or tuples + representing bounding box coordinates in decimal degrees. + + Must be provided in the order: + [lower-left-longitude, lower-left-latitude, + upper-right-longitude, upper-right-latitude]) + """ + + # Latitude must be between -90 and 90 (inclusive); check for this here + assert ( + -90 <= spatial_extent[1] <= 90 + ), "Invalid latitude value (must be between -90 and 90, inclusive)" + assert ( + -90 <= spatial_extent[3] <= 90 + ), "Invalid latitude value (must be between -90 and 90, inclusive)" + + # tighten these ranges depending on actual allowed inputs + # TODO: inquire about this; see if we know the "actual allowed inputs" and if this can be fixed + assert ( + -180 <= spatial_extent[0] <= 180 + ), "Invalid longitude value (must be between -180 and 180, inclusive)" + assert ( + -180 <= spatial_extent[2] <= 180 + ), "Invalid longitude value (must be between -180 and 180, inclusive)" + + # If the longitude's signs differ... + if np.sign(spatial_extent[0]) != np.sign(spatial_extent[2]): + # If the lower left longitude is less than the upper right longitude, throw an error + assert spatial_extent[0] >= spatial_extent[2], "Invalid bounding box longitudes" + + # Else, if longitude signs are the same... + else: + # If the lower left longitude is greater than the upper right longitude, throw an error + assert spatial_extent[0] <= spatial_extent[2], "Invalid bounding box longitudes" + + # If the lower left latitude is greater than the upper right latitude, throw an error + assert spatial_extent[1] <= spatial_extent[3], "Invalid bounding box latitudes" + spatial_extent = [float(x) for x in spatial_extent] + + return "bounding_box", spatial_extent, None + + +def validate_polygon_pairs(spatial_extent): + """ + Validates the spatial_extent parameter as a polygon from coordinate pairs. + + If the spatial_extent is a valid polygon, returns a tuple containing the Spatial object parameters + for the polygon; + + otherwise, throw an error containing the reason the polygon is invalid. + + Parameters + ---------- + spatial_extent: list or np.ndarray + + A list or np.ndarray of tuples representing polygon coordinate pairs in decimal degrees in the order: + [(longitude1, latitude1), (longitude2, latitude2), ... + ... (longitude_n,latitude_n), (longitude1,latitude1)] + + If the first and last coordinate pairs are NOT equal, + the polygon will be closed automatically (last point will be connected to the first point). + """ + # Check to make sure all elements of spatial_extent are coordinate pairs; if not, raise an error + if any(len(i) != 2 for i in spatial_extent): + raise ValueError( + "Each element in spatial_extent should be a list or tuple of length 2" + ) + + # If there are less than 4 vertices, raise an error + assert len(spatial_extent) >= 4, "Your spatial extent polygon has too few vertices" + + if (spatial_extent[0][0] != spatial_extent[-1][0]) or ( + spatial_extent[0][1] != spatial_extent[-1][1] + ): + + # Throw a warning + warnings.warn( + "WARNING: Polygon's first and last point's coordinates differ," + " closing the polygon automatically." + ) + # Add starting long/lat to end + if isinstance(spatial_extent, list): + # use list.append() method + spatial_extent.append(spatial_extent[0]) + + elif isinstance(spatial_extent, np.ndarray): + # use np.insert() method + spatial_extent = np.insert( + spatial_extent, len(spatial_extent), spatial_extent[0] + ) + + polygon = (",".join([str(c) for xy in spatial_extent for c in xy])).split(",") + + # make all elements of polygon floats + polygon = [float(i) for i in polygon] + + # create a geodataframe object from polygon + gdf = geodataframe("polygon", polygon, file=False) + spatial_extent = gdf.iloc[0].geometry + + # TODO: Check if this DevGoal is still ongoing + + # #DevGoal: properly format this input type (and any polygon type) + # so that it is clockwise (and only contains 1 pole)!! + # warnings.warn("this type of input is not yet well handled and you may not be able to find data") + + return "polygon", spatial_extent, None + + +def validate_polygon_list(spatial_extent): + """ + Validates the spatial_extent parameter as a polygon from a list of coordinates. + + If the spatial_extent is a valid polygon, returns a tuple containing the Spatial object parameters + for the polygon; + + otherwise, throw an error containing the reason the polygon is invalid. + + Parameters + ---------- + spatial_extent: list or np.ndarray + A list or np.ndarray of strings, numerics, or tuples representing polygon coordinates, + provided as coordinate pairs in decimal degrees in the order: + [longitude1, latitude1, longitude2, latitude2, ... + ... longitude_n,latitude_n, longitude1,latitude1] + + If the first and last coordinate pairs are NOT equal, + the polygon will be closed automatically (last point will be connected to the first point). + """ + + # user-entered polygon as a single list of lon and lat coordinates + assert len(spatial_extent) >= 8, "Your spatial extent polygon has too few vertices" + assert ( + len(spatial_extent) % 2 == 0 + ), "Your spatial extent polygon list should have an even number of entries" + + if (spatial_extent[0] != spatial_extent[-2]) or ( + spatial_extent[1] != spatial_extent[-1] + ): + warnings.warn( + "WARNING: Polygon's first and last point's coordinates differ," + " closing the polygon automatically." + ) + + # Add starting long/lat to end + if isinstance(spatial_extent, list): + # use list.append() method + spatial_extent.append(spatial_extent[0]) + spatial_extent.append(spatial_extent[1]) + + elif isinstance(spatial_extent, np.ndarray): + # use np.insert() method + spatial_extent = np.insert( + spatial_extent, len(spatial_extent), spatial_extent[0] + ) + spatial_extent = np.insert( + spatial_extent, len(spatial_extent), spatial_extent[1] + ) + + extent_type = "polygon" + polygon = [float(i) for i in spatial_extent] + + gdf = geodataframe(extent_type, polygon, file=False) + spatial_extent = gdf.iloc[0].geometry + + return "polygon", spatial_extent, None + + +def validate_polygon_file(spatial_extent): + """ + Validates the spatial_extent parameter as a polygon from a file. + + If the spatial_extent parameter contains a valid polygon, + returns a tuple containing the Spatial object parameters for the polygon; + + otherwise, throw an error containing the reason the polygon/polygon file is invalid. + + Parameters + ---------- + spatial_extent: string + A string representing a geospatial polygon file (kml, shp, gpkg) + * must provide full file path + * recommended for file to only contain 1 polygon. + * if multiple polygons, only the first polygon is selected at this time. + + """ + + # Check if the filename path exists; if not, throw an error + # print("print statements work \n") + # print("SPATIAL EXTENT: " + spatial_extent + "\n") + assert os.path.exists( + spatial_extent + ), "Check that the path and filename of your geometry file are correct" + + # DevGoal: more robust polygon inputting (see Bruce's code): + # correct for clockwise/counterclockwise coordinates, deal with simplification, etc. + + if spatial_extent.split(".")[-1] in ["kml", "shp", "gpkg"]: + extent_type = "polygon" + gdf = geodataframe(extent_type, spatial_extent, file=True) + + # DevGoal: does the below line mandate that only the first polygon will be read? + # Perhaps we should require files containing only one polygon? + + # RAPHAEL - It only selects the first polygon if there are multiple. + # Unless we can supply the CMR params with muliple polygon inputs + # we should probably req a single polygon. + + # TODO: Require a single polygon OR throw a warning that only the first polygon will be selected? + + gdf_result = gdf.iloc[0].geometry + + # _spat_extent = apifmt._fmt_polygon(spatial_extent) + return "polygon", gdf_result, spatial_extent + + else: + raise TypeError("Input spatial extent file must be a kml, shp, or gpkg") + + +class Spatial: + def __init__(self, spatial_extent): + """ + Validates input from "spatial_extent" argument, then creates a Spatial object with validated inputs + as properties of the object. + + Spatial objects are to be used by icepyx.Query to store validated geospatial information required by the Query. + + Parameters + ---------- + spatial_extent : expects one of the following: + * list of coordinates + (stored in a list of strings, list of numerics, list of tuples, OR np.ndarray) as one of: + * bounding box + * provided in the order: [lower-left-longitude, lower-left-latitude, + upper-right-longitude, upper-right-latitude].) + * polygon + * provided as coordinate pairs in decimal degrees as one of: + * [(longitude1, latitude1), (longitude2, latitude2), ... + ... (longitude_n,latitude_n), (longitude1,latitude1)] + * [longitude1, latitude1, longitude2, latitude2, + ... longitude_n,latitude_n, longitude1,latitude1]. + * NOTE: If the first and last coordinate pairs are NOT equal, + the polygon will be closed automatically (last point will be connected to the first point). + * string representing a geospatial polygon file (kml, shp, gpkg) + * full file path + * recommended for file to only contain 1 polygon; if multiple, only selects first polygon rn + + Properties + ---------- + * _spat_ext: The validated/formatted input from spatial_extent, + represents coordinates of a polygon or bounding box. + * _ext_type: The extent type of spatial_extent, one of: polygon, bounding_box + * _geom_file: If spatial_extent was NOT a filename, this is None. + Else, it is the name of the file that _spat_ext is retrieved/validated from. + + See Also + -------- + icepyx.Query + + + Examples + -------- + Initializing Spatial with a bounding box. + + >>> reg_a_bbox = [-55, 68, -48, 71] + >>> reg_a = Spatial(reg_a_bbox) + >>> print(reg_a) + Extent type: bounding_box + Coordinates: [-55.0, 68.0, -48.0, 71.0] + + Initializing Query with a list of polygon vertex coordinate pairs. + + >>> reg_a_poly = [(-55, 68), (-55, 71), (-48, 71), (-48, 68), (-55, 68)] + >>> reg_a = Spatial(reg_a_poly) + >>> print(reg_a) + Extent type: polygon + Coordinates: POLYGON ((-55 68, -55 71, -48 71, -48 68, -55 68)) + + Initializing Query with a geospatial polygon file. + + >>> aoi = str(Path('./doc/source/example_notebooks/supporting_files/simple_test_poly.gpkg').resolve()) + >>> reg_a = Spatial(aoi) + >>> print(reg_a) # doctest: +SKIP + Extent Type: polygon + Source file: ./doc/source/example_notebooks/supporting_files/simple_test_poly.gpkg + Coordinates: POLYGON ((-55 68, -55 71, -48 71, -48 68, -55 68)) + + """ + + scalar_types = (int, float, np.int64) + + # Check if spatial_extent is a list of coordinates (bounding box or polygon) + if isinstance(spatial_extent, (list, np.ndarray)): + + # bounding box + if len(spatial_extent) == 4 and all( + isinstance(i, scalar_types) for i in spatial_extent + ): + ( + self._ext_type, + self._spatial_ext, + self._geom_file, + ) = validate_bounding_box(spatial_extent) + + # polygon (as list of lon, lat coordinate pairs, in tuples) + elif all( + type(i) in [list, tuple, np.ndarray] for i in spatial_extent + ) and all( + all(isinstance(i[j], scalar_types) for j in range(len(i))) + for i in spatial_extent + ): + ( + self._ext_type, + self._spatial_ext, + self._geom_file, + ) = validate_polygon_pairs(spatial_extent) + + # polygon (as list of lon, lat coordinate pairs, single "flat" list) + elif all(isinstance(i, scalar_types) for i in spatial_extent): + ( + self._ext_type, + self._spatial_ext, + self._geom_file, + ) = validate_polygon_list(spatial_extent) + else: + # TODO: Change this warning to be like "usage", tell user possible accepted input types + raise ValueError( + "Your spatial extent does not meet minimum input criteria or the input format is not correct" + ) + + # Check if spatial_extent is a string (i.e. a (potential) filename) + elif isinstance(spatial_extent, str): + self._ext_type, self._spatial_ext, self._geom_file = validate_polygon_file( + spatial_extent + ) + + def __str__(self): + if self.extent_file is not None: + return "Extent type: {0}\nSource file: {1}\nCoordinates: {2}".format( + self._ext_type, self._geom_file, self._spatial_ext + ) + else: + return "Extent type: {0}\nCoordinates: {1}".format( + self._ext_type, self._spatial_ext + ) + + @property + def spatial_extent(self): + """ + Return the coordinates of the spatial extent of the Spatial object. + + Examples + -------- + >>> reg_a = Spatial([-55, 68, -48, 71]) + >>> reg_a.spatial_extent + [-55.0, 68.0, -48.0, 71.0] + + >>> reg_a = Spatial([(-55, 68), (-55, 71), (-48, 71), (-48, 68), (-55, 68)]) + >>> reg_a.spatial_extent.exterior.coords.xy + (array('d', [-55.0, -55.0, -48.0, -48.0, -55.0]), array('d', [68.0, 71.0, 71.0, 68.0, 68.0])) + """ + return self._spatial_ext + + @property + def extent_type(self): + """ + Return the extent type of the Spatial object as a string. + + Examples + -------- + >>> reg_a = Spatial([-55, 68, -48, 71]) + >>> reg_a.extent_type + 'bounding_box' + + >>> reg_a = Spatial([(-55, 68), (-55, 71), (-48, 71), (-48, 68), (-55, 68)]) + >>> reg_a.extent_type + 'polygon' + """ + return self._ext_type + + @property + def extent_file(self): + """ + Return the path to the geospatial polygon file containing the Spatial object's spatial extent. + If the spatial extent did not come from a file (i.e. user entered list of coordinates), this will return None. + + Examples + -------- + >>> reg_a = Spatial([-55, 68, -48, 71]) + >>> reg_a.extent_file + + + >>> reg_a = Spatial(str(Path('./doc/source/example_notebooks/supporting_files/simple_test_poly.gpkg').resolve())) + >>> reg_a.extent_file # doctest: +SKIP + ./doc/source/example_notebooks/supporting_files/simple_test_poly.gpkg + """ + return self._geom_file diff --git a/icepyx/core/validate_inputs.py b/icepyx/core/validate_inputs.py index 3e5aad827..f74ffc209 100644 --- a/icepyx/core/validate_inputs.py +++ b/icepyx/core/validate_inputs.py @@ -1,11 +1,9 @@ import datetime as dt import os import warnings -import geopandas as gpd import numpy as np import icepyx.core.APIformatting as apifmt -import icepyx.core.geospatial as geospatial def prod_version(latest_vers, version): @@ -108,132 +106,6 @@ def tracks(track): return track_list -# DevGoal: clean up; turn into classes (see validate_inputs_classes.py) -def spatial(spatial_extent): - """ - Validate the input spatial extent and return the needed parameters to the query object. - """ - - scalar_types = (int, float, np.int64) - - if isinstance(spatial_extent, (list, np.ndarray)): - - # bounding box - if len(spatial_extent) == 4 and all( - isinstance(i, scalar_types) for i in spatial_extent - ): - assert -90 <= spatial_extent[1] <= 90, "Invalid latitude value" - assert -90 <= spatial_extent[3] <= 90, "Invalid latitude value" - assert ( - -180 <= spatial_extent[0] <= 180 - ), "Invalid longitude value" # tighten these ranges depending on actual allowed inputs - assert -180 <= spatial_extent[2] <= 180, "Invalid longitude value" - if np.sign(spatial_extent[0]) != np.sign(spatial_extent[2]): - assert ( - spatial_extent[0] >= spatial_extent[2] - ), "Invalid bounding box longitudes" - else: - assert ( - spatial_extent[0] <= spatial_extent[2] - ), "Invalid bounding box longitudes" - assert ( - spatial_extent[1] <= spatial_extent[3] - ), "Invalid bounding box latitudes" - _spat_extent = [float(x) for x in spatial_extent] - extent_type = "bounding_box" - - # user-entered polygon as list of lon, lat coordinate pairs - elif all(type(i) in [list, tuple, np.ndarray] for i in spatial_extent) and all( - all(isinstance(i[j], scalar_types) for j in range(len(i))) - for i in spatial_extent - ): - if any(len(i) != 2 for i in spatial_extent): - raise ValueError( - "Each element in spatial_extent should be a list or tuple of length 2" - ) - assert ( - len(spatial_extent) >= 4 - ), "Your spatial extent polygon has too few vertices" - assert ( - spatial_extent[0][0] == spatial_extent[-1][0] - ), "Starting longitude doesn't match ending longitude" - assert ( - spatial_extent[0][1] == spatial_extent[-1][1] - ), "Starting latitude doesn't match ending latitude" - polygon = (",".join([str(c) for xy in spatial_extent for c in xy])).split( - "," - ) - - extent_type = "polygon" - polygon = [float(i) for i in polygon] - - gdf = geospatial.geodataframe(extent_type, polygon, file=False) - _spat_extent = gdf.iloc[0].geometry - - # _spat_extent = polygon - # extent_type = 'polygon' - # #DevGoal: properly format this input type (and any polygon type) so that it is clockwise (and only contains 1 pole)!! - # warnings.warn("this type of input is not yet well handled and you may not be able to find data") - - # user-entered polygon as a single list of lon and lat coordinates - elif all(isinstance(i, scalar_types) for i in spatial_extent): - assert ( - len(spatial_extent) >= 8 - ), "Your spatial extent polygon has too few vertices" - assert ( - len(spatial_extent) % 2 == 0 - ), "Your spatial extent polygon list should have an even number of entries" - assert ( - spatial_extent[0] == spatial_extent[-2] - ), "Starting longitude doesn't match ending longitude" - assert ( - spatial_extent[1] == spatial_extent[-1] - ), "Starting latitude doesn't match ending latitude" - extent_type = "polygon" - polygon = [float(i) for i in spatial_extent] - - gdf = geospatial.geodataframe(extent_type, polygon, file=False) - _spat_extent = gdf.iloc[0].geometry - - # _spat_extent = polygon - - else: - raise ValueError( - "Your spatial extent does not meet minimum input criteria or the input format is not correct" - ) - - # DevGoal: write a test for this? - # make sure there is nothing set to _geom_filepath since its existence determines later steps - try: - del _geom_filepath - except: - UnboundLocalError - - # DevGoal: revisit this section + geospatial.geodataframe. There might be some good ways to combine the functionality in these checks with that - elif isinstance(spatial_extent, str): - assert os.path.exists( - spatial_extent - ), "Check that the path and filename of your geometry file are correct" - # DevGoal: more robust polygon inputting (see Bruce's code): correct for clockwise/counterclockwise coordinates, deal with simplification, etc. - if spatial_extent.split(".")[-1] in ["kml", "shp", "gpkg"]: - extent_type = "polygon" - gdf = geospatial.geodataframe(extent_type, spatial_extent, file=True) - # print(gdf.iloc[0].geometry) - # DevGoal: does the below line mandate that only the first polygon will be read? Perhaps we should require files containing only one polygon? - # RAPHAEL - It only selects the first polygon if there are multiple. Unless we can supply the CMR params with muliple polygon inputs we should probably req a single polygon. - _spat_extent = gdf.iloc[0].geometry - # _spat_extent = apifmt._fmt_polygon(spatial_extent) - _geom_filepath = spatial_extent - - else: - raise TypeError("Input spatial extent file must be a kml, shp, or gpkg") - - # DevGoal: currently no specific test for this if statement... - if "_geom_filepath" not in locals(): - _geom_filepath = None - return extent_type, _spat_extent, _geom_filepath - - def temporal(date_range, start_time, end_time): """ Validate the input temporal parameters and return the needed parameters to the query object. diff --git a/icepyx/core/visualization.py b/icepyx/core/visualization.py index c16e5f7ca..a3876a832 100644 --- a/icepyx/core/visualization.py +++ b/icepyx/core/visualization.py @@ -155,11 +155,11 @@ def __init__( self.product = is2ref._validate_OA_product(query_obj.product) - if query_obj.extent_type == "bounding_box": - self.bbox = query_obj._spat_extent + if query_obj.spatial.extent_type == "bounding_box": + self.bbox = query_obj.spatial.spatial_extent else: - mrc_bound = query_obj._spat_extent.minimum_rotated_rectangle + mrc_bound = query_obj.spatial.spatial_extent.minimum_rotated_rectangle # generate bounding box lonmin = min(mrc_bound.exterior.coords.xy[0]) lonmax = max(mrc_bound.exterior.coords.xy[0]) diff --git a/icepyx/tests/test_behind_NSIDC_API_login.py b/icepyx/tests/test_behind_NSIDC_API_login.py index a277fcd35..12f7be547 100644 --- a/icepyx/tests/test_behind_NSIDC_API_login.py +++ b/icepyx/tests/test_behind_NSIDC_API_login.py @@ -21,7 +21,7 @@ def reg(): @pytest.fixture(scope="module") def session(reg): - capability_url = f"https://n5eil02u.ecs.nsidc.org/egi/capabilities/{reg.product}.{reg._version}.xml" + capability_url = "https://n5eil02u.ecs.nsidc.org/egi/capabilities/{reg.product}.{reg._version}.xml" ed_obj = Earthdata( "icepyx_devteam", "icepyx.dev@gmail.com", @@ -40,7 +40,7 @@ def session(reg): def test_get_custom_options_output(session): obs = is2ref._get_custom_options(session, "ATL06", "004") - with open("./icepyx/tests/ATL06v04_options.json") as exp_json: + with open("ATL06v04_options.json") as exp_json: exp = json.load(exp_json) assert all(keys in obs.keys() for keys in exp.keys()) assert all(obs[key] == exp[key] for key in exp.keys()) diff --git a/icepyx/tests/test_geospatial.py b/icepyx/tests/test_geospatial.py deleted file mode 100644 index 9d7f86b13..000000000 --- a/icepyx/tests/test_geospatial.py +++ /dev/null @@ -1,30 +0,0 @@ -import pytest -import warnings -import geopandas as gpd -from shapely.geometry import Polygon - - -import icepyx.core.geospatial as geospatial - -########## geodataframe ########## -def test_gdf_from_bbox(): - obs = geospatial.geodataframe("bounding_box", [-55, 68, -48, 71]) - geom = [Polygon(list(zip([-55, -55, -48, -48, -55], [68, 71, 71, 68, 68])))] - exp = gpd.GeoDataFrame(geometry=geom) - # DevNote: this feels like a questionable test to me, since it specifies the first entry (though there should only be one) - assert obs.geometry[0] == exp.geometry[0] - - -# TestQuestions: 1) Do these need to be tested? -# 2) Is the best way to test them with lengthy inputs and seeing if the gdfs are the same? -# def test_gdf_from_strpoly(): - -# def test_gdf_from_filepoly(): - - -def test_bad_extent_input(): - ermsg = "Your spatial extent type is not an accepted input and a geodataframe cannot be constructed" - # DevNote: can't get the test to pass if the extent_type is included. Not sure why the strings "don't match" - # ermsg = "Your spatial extent type (polybox) is not an accepted input and a geodataframe cannot be constructed" - with pytest.raises(TypeError, match=ermsg): - geospatial.geodataframe("polybox", [1, 2, 3, 4]) diff --git a/icepyx/tests/test_spatial.py b/icepyx/tests/test_spatial.py new file mode 100644 index 000000000..43dd8f727 --- /dev/null +++ b/icepyx/tests/test_spatial.py @@ -0,0 +1,366 @@ +import datetime as dt +import geopandas as gpd +import numpy as np +import os +from pathlib import Path +import pytest +from shapely.geometry import Polygon +import warnings + +import icepyx.core.spatial as spat + + +# ######### "Bounding Box" input tests ################################################################################ +# (Note that these ALSO test the @property functions for the class for bounding boxes) + + +def test_intlist_bbox(): + """ + Bounding box test w/ a List of valid Int inputs. + * tests that expected output is correct + * tests that extent_type is correct + + """ + # initialize Spatial object; + # it should call validate_spatial function correctly + + intlist_bbox = spat.Spatial([-64, 66, -55, 72]) + assert intlist_bbox.extent_type == "bounding_box" + assert intlist_bbox.extent_file is None + assert intlist_bbox.spatial_extent == [-64, 66, -55, 72] + + +def test_floatlist_bbox(): + floatlist_bbox = spat.Spatial([-64.2, 66.2, -55.5, 72.5]) + assert floatlist_bbox.extent_type == "bounding_box" + assert floatlist_bbox.extent_file is None + assert floatlist_bbox.spatial_extent == [-64.2, 66.2, -55.5, 72.5] + + +def test_numpyfloatarray_bbox(): + npfloat_bbox = spat.Spatial(np.array([-64.2, 66.2, -55.5, 72.5])) + assert npfloat_bbox.extent_type == "bounding_box" + assert npfloat_bbox.extent_file is None + assert npfloat_bbox.spatial_extent == [-64.2, 66.2, -55.5, 72.5] + + +def test_numpyfloatlist_bbox(): + npfloatlist_bbox = spat.Spatial(list(np.array([-64.2, 66.2, -55.5, 72.5]))) + assert npfloatlist_bbox.extent_type == "bounding_box" + assert npfloatlist_bbox.extent_file is None + assert npfloatlist_bbox.spatial_extent == [-64.2, 66.2, -55.5, 72.5] + + +# ########## Bounding Box Assertion Error tests ############################################# +# (input for all of these tests is bad; ensuring the spatial class catches this) + + +def test_too_few_bbox_points(): + with pytest.raises(AssertionError): + too_few_bbox_points = spat.Spatial([-64.2, 66.2, -55.5]) + + +def test_too_many_bbox_points(): + with pytest.raises(AssertionError): + too_many_bbox_points = spat.Spatial([-64.2, 66.2, -55.5, 72.5, 0]) + + +def test_invalid_low_latitude_1_bbox(): + with pytest.raises(AssertionError): + low_lat_1_bbox = spat.Spatial([-64.2, -90.2, -55.5, 72.5]) + + +def test_invalid_high_latitude_1_bbox(): + with pytest.raises(AssertionError): + high_lat_1_bbox = spat.Spatial([-64.2, 90.2, -55.5, 72.5]) + + +def test_invalid_low_latitude_3_bbox(): + with pytest.raises(AssertionError): + low_lat_3_bbox = spat.Spatial([-64.2, 66.2, -55.5, -90.5]) + + +def test_invalid_high_latitude_3_bbox(): + with pytest.raises(AssertionError): + high_lat_3_bbox = spat.Spatial([-64.2, 66.2, -55.5, 90.5]) + + +def test_invalid_low_longitude_0_bbox(): + with pytest.raises(AssertionError): + low_lon_0_bbox = spat.Spatial([-180.2, 66.2, -55.5, 72.5]) + + +def test_invalid_high_longitude_0_bbox(): + with pytest.raises(AssertionError): + high_lon_0_bbox = spat.Spatial([180.2, 66.2, -55.5, 72.5]) + + +def test_invalid_low_longitude_2_bbox(): + with pytest.raises(AssertionError): + low_lon_2_bbox = spat.Spatial([-64.2, 66.2, -180.5, 72.5]) + + +def test_invalid_high_longitude_2_bbox(): + with pytest.raises(AssertionError): + high_lon_2_bbox = spat.Spatial([-64.2, 66.2, 180.5, 72.5]) + + +def test_diff_sign_lowleft_lt_upright_longitude_bbox(): + with pytest.raises(AssertionError): + long_ll_lt_ur_ds_bbox = spat.Spatial([-64.2, 66.2, 55.5, 72.5]) + + +def test_same_sign_lowleft_gt_upright_longitude_bbox(): + with pytest.raises(AssertionError): + long_ll_gt_ur_ss_bbox = spat.Spatial([-55.5, 66.2, -64.2, 72.5]) + + +def test_same_sign_lowleft_gt_upright_latitude_bbox(): + with pytest.raises(AssertionError): + lat_ll_gt_ur_ss_bbox = spat.Spatial([-64.2, 72.5, -55.5, 66.2]) + + +def test_bad_values_bbox(): + with pytest.raises(ValueError): + bad_input = spat.Spatial(["a", "b", "c", "d"]) + + +# ############### END BOUNDING BOX TESTS ################################################################ + +# ######### "Polygon" input tests (NOT FROM FILE) ###################################################### + + +def test_list_pairs_polygon(): + poly_list_pair = spat.Spatial( + [[-55, 68], [-55, 71], [-48, 71], [-48, 68], [-55, 68]] + ) + expected_poly_list_pair = Polygon( + [[-55, 68], [-55, 71], [-48, 71], [-48, 68], [-55, 68]] + ) + + assert poly_list_pair.extent_type == "polygon" + assert poly_list_pair.extent_file is None + assert poly_list_pair.spatial_extent == expected_poly_list_pair + + +def test_tuple_latlon_pairs(): + poly_tuple_pair = spat.Spatial( + [(-55, 68), (-55, 71), (-48, 71), (-48, 68), (-55, 68)] + ) + expected_poly_tuple_pair = Polygon( + [[-55, 68], [-55, 71], [-48, 71], [-48, 68], [-55, 68]] + ) + + assert poly_tuple_pair.extent_type == "polygon" + assert poly_tuple_pair.extent_file is None + assert poly_tuple_pair.spatial_extent == expected_poly_tuple_pair + + +def test_intlist_latlon_coords(): + poly_list = spat.Spatial([-55, 68, -55, 71, -48, 71, -48, 68, -55, 68]) + expected_poly_list = Polygon( + [[-55, 68], [-55, 71], [-48, 71], [-48, 68], [-55, 68]] + ) + print(poly_list.spatial_extent) + print(expected_poly_list) + assert poly_list.extent_type == "polygon" + assert poly_list.extent_file is None + assert poly_list.spatial_extent == expected_poly_list + + +def test_floatlist_latlon_coords(): + poly_float_list = spat.Spatial( + [-55.0, 68.7, -55.0, 71, -48, 71, -48, 68.7, -55.0, 68.7] + ) + expected_poly_float_list = Polygon( + [[-55.0, 68.7], [-55.0, 71], [-48, 71], [-48, 68.7], [-55.0, 68.7]] + ) + + assert poly_float_list.extent_type == "polygon" + assert poly_float_list.extent_file is None + assert poly_float_list.spatial_extent == expected_poly_float_list + + +# numpy array tests + + +def test_numpy_list_pairs_polygon(): + poly_list_pair = spat.Spatial( + np.array([[-55, 68], [-55, 71], [-48, 71], [-48, 68], [-55, 68]]) + ) + expected_poly_list_pair = Polygon( + [[-55, 68], [-55, 71], [-48, 71], [-48, 68], [-55, 68]] + ) + + assert poly_list_pair.extent_type == "polygon" + assert poly_list_pair.extent_file is None + assert poly_list_pair.spatial_extent == expected_poly_list_pair + + +def test_numpy_tuple_latlon_pairs(): + poly_tuple_pair = spat.Spatial( + np.array([(-55, 68), (-55, 71), (-48, 71), (-48, 68), (-55, 68)]) + ) + expected_poly_tuple_pair = Polygon( + [[-55, 68], [-55, 71], [-48, 71], [-48, 68], [-55, 68]] + ) + + assert poly_tuple_pair.extent_type == "polygon" + assert poly_tuple_pair.extent_file is None + assert poly_tuple_pair.spatial_extent == expected_poly_tuple_pair + + +def test_numpy_intlist_latlon_coords(): + poly_list = spat.Spatial(np.array([-55, 68, -55, 71, -48, 71, -48, 68, -55, 68])) + expected_poly_list = Polygon( + [[-55, 68], [-55, 71], [-48, 71], [-48, 68], [-55, 68]] + ) + + assert poly_list.extent_type == "polygon" + assert poly_list.extent_file is None + assert poly_list.spatial_extent == expected_poly_list + + +# ########## Polygon Assertion Error tests ############################################################ +# (input for all of these tests is bad; ensuring the spatial class catches this) + + +def test_odd_num_lat_long_list_poly_throws_error(): + with pytest.raises(AssertionError): + bad_input = spat.Spatial([-55, 68, -55, 71, -48, 71, -48, 68, -55]) + + +def test_wrong_num_lat_long_tuple_poly_throws_error(): + with pytest.raises(ValueError): + bad_input = spat.Spatial( + [(-55, 68, 69), (-55, 71), (-48, 71), (-48, 68), (-55, 68)] + ) + + +def test_bad_value_types_poly(): + with pytest.raises(ValueError): + bad_input = spat.Spatial(["a", "b", "c", "d", "e"]) + + +# ###################### Automatically Closed Polygon Tests ########################################################### + + +def test_poly_tuple_latlon_pairs_auto_close(): + poly_tuple_pair = spat.Spatial([(-55, 68), (-55, 71), (-48, 71), (-48, 68)]) + expected_poly_tuple_pair = Polygon( + [[-55, 68], [-55, 71], [-48, 71], [-48, 68], [-55, 68]] + ) + + assert poly_tuple_pair.extent_type == "polygon" + assert poly_tuple_pair.extent_file is None + assert poly_tuple_pair.spatial_extent == expected_poly_tuple_pair + + +def test_poly_list_auto_close(): + poly_list = spat.Spatial([-55, 68, -55, 71, -48, 71, -48, 68]) + expected_poly_list = Polygon( + [[-55, 68], [-55, 71], [-48, 71], [-48, 68], [-55, 68]] + ) + + assert poly_list.extent_type == "polygon" + assert poly_list.extent_file is None + assert poly_list.spatial_extent == expected_poly_list + + +# ###################### END POLYGON NO FILE TESTS #################################################################### +# ######### Geom File Input Tests ###################################################### + + +def test_poly_file_simple_one_poly(): + + poly_from_file = spat.Spatial( + str( + Path( + "./doc/source/example_notebooks/supporting_files/simple_test_poly.gpkg" + ).resolve() + ) + ) + # print(poly_from_file.extent_file) + # print(poly_from_file.spatial_extent) + expected_poly = Polygon([[-55, 68], [-55, 71], [-48, 71], [-48, 68], [-55, 68]]) + + assert poly_from_file.extent_type == "polygon" + assert poly_from_file.extent_file is not None + assert poly_from_file.extent_file == str( + Path( + "./doc/source/example_notebooks/supporting_files/simple_test_poly.gpkg" + ).resolve() + ) + assert poly_from_file.spatial_extent == expected_poly + + +""" +TODO: test files with multiple polygons throw a warning and only select the first polygon +""" + +# ########## Geom File Assertion Error tests ############################################################ + +# (input for all of these tests is bad; ensuring the spatial class catches this) + + +def test_bad_poly_inputfile_name_throws_error(): + with pytest.raises(AssertionError): + bad_input = spat.Spatial("bad_filename.gpkg") + + +def test_bad_poly_inputfile_type_throws_error(): + with pytest.raises(TypeError): + bad_input = spat.Spatial(str(Path("./icepyx/tests/test_read.py").resolve())) + + + +########## geodataframe ########## + +def test_gdf_from_one_bbox(): + + obs = spat.geodataframe("bounding_box", [-55, 68, -48, 71]) + geom = [Polygon(list(zip([-55, -55, -48, -48, -55], [68, 71, 71, 68, 68])))] + exp = gpd.GeoDataFrame(geometry=geom) + + # print(obs.geometry[0]) + # print(exp.geometry[0]) + + # print(exp) + # DevNote: this feels like a questionable test to me, since it specifies the first entry (though there should only be one) + + assert obs.geometry[0] == exp.geometry[0] + +def test_gdf_from_multi_bbox(): + obs = spat.geodataframe("bounding_box", [-55, 68, -48, 71]) + geom = [Polygon(list(zip([-55, -55, -48, -48, -55], [68, 71, 71, 68, 68])))] + exp = gpd.GeoDataFrame(geometry=geom) + + print(obs.geometry[0]) + print(exp.geometry[0]) + # DevNote: this feels like a questionable test to me, since it specifies the first entry (though there should only be one) + assert obs.geometry[0] == exp.geometry[0] + + + +# TestQuestions: 1) Do these need to be tested? +# 2) Is the best way to test them with lengthy inputs and seeing if the gdfs are the same? + +# def test_gdf_from_strpoly_one_simple(): + +# def test_gdf_from_strpoly_multi_simple(): + +# def test_gdf_from_strpoly_one_complex(): + +# def test_gdf_from_filepoly_one_simple(): + +# def test_gdf_from_filepoly_one_complex(): + +# def test_gdf_from_filepoly_multi_simple(): + + +def test_bad_extent_input(): + ermsg = "Your spatial extent type is not an accepted input and a geodataframe cannot be constructed" + # DevNote: can't get the test to pass if the extent_type is included. Not sure why the strings "don't match" + # ermsg = "Your spatial extent type (polybox) is not an accepted input and a geodataframe cannot be constructed" + with pytest.raises(TypeError, match=ermsg): + spat.geodataframe("polybox", [1, 2, 3, 4]) diff --git a/icepyx/tests/test_validate_inputs.py b/icepyx/tests/test_validate_inputs.py index 2790dd69c..f8615906e 100644 --- a/icepyx/tests/test_validate_inputs.py +++ b/icepyx/tests/test_validate_inputs.py @@ -36,126 +36,6 @@ def test_old_version(): with pytest.warns(UserWarning, match=wrng): val.prod_version("003", "001") - -########## spatial ########## -def test_intlist_bbox(): - obs = val.spatial([-64, 66, -55, 72]) - expected = ["bounding_box", [-64, 66, -55, 72], None] - for i in range(len(expected)): - assert obs[i] == expected[i] - - -def test_floatlist_bbox(): - obs = val.spatial([-64.2, 66.2, -55.5, 72.5]) - expected = ["bounding_box", [-64.2, 66.2, -55.5, 72.5], None] - for i in range(len(expected)): - assert obs[i] == expected[i] - - -def test_numpyfloatarray_bbox(): - obs = val.spatial(np.array([-64.2, 66.2, -55.5, 72.5])) - expected = ["bounding_box", [-64.2, 66.2, -55.5, 72.5], None] - for i in range(len(expected)): - assert obs[i] == expected[i] - - -def test_numpyfloatlist_bbox(): - obs = val.spatial(list(np.array([-64.2, 66.2, -55.5, 72.5]))) - expected = ["bounding_box", [-64.2, 66.2, -55.5, 72.5], None] - for i in range(len(expected)): - assert obs[i] == expected[i] - - -def test_list_latlon_pairs(): - out = val.spatial([[-55, 68], [-55, 71], [-48, 71], [-48, 68], [-55, 68]]) - obs = [ - out[0], - out[1].exterior.coords.xy[0].tolist(), - out[1].exterior.coords.xy[1].tolist(), - out[2], - ] - # expected = ['polygon', [-55.0, 68.0, -55.0, 71.0, -48.0, 71.0, -48.0, 68.0, -55.0, 68.0], None] - # expected = ['polygon', [[-55.0, 68.0], [-55.0, 71.0], [-48.0, 71.0], [-48.0, 68.0], [-55.0, 68.0]], None] - expected = [ - "polygon", - [-55.0, -55.0, -48.0, -48.0, -55.0], - [68.0, 71.0, 71.0, 68.0, 68.0], - None, - ] - for i in range(len(expected)): - assert obs[i] == expected[i] - - -def test_tuple_latlon_pairs(): - out = val.spatial([(-55, 68), (-55, 71), (-48, 71), (-48, 68), (-55, 68)]) - obs = [ - out[0], - out[1].exterior.coords.xy[0].tolist(), - out[1].exterior.coords.xy[1].tolist(), - out[2], - ] - expected = [ - "polygon", - [-55.0, -55.0, -48.0, -48.0, -55.0], - [68.0, 71.0, 71.0, 68.0, 68.0], - None, - ] - for i in range(len(expected)): - assert obs[i] == expected[i] - - -def test_intlist_latlon_coords(): - out = val.spatial([-55, 68, -55, 71, -48, 71, -48, 68, -55, 68]) - obs = [ - out[0], - out[1].exterior.coords.xy[0].tolist(), - out[1].exterior.coords.xy[1].tolist(), - out[2], - ] - expected = [ - "polygon", - [-55.0, -55.0, -48.0, -48.0, -55.0], - [68.0, 71.0, 71.0, 68.0, 68.0], - None, - ] - for i in range(len(expected)): - assert obs[i] == expected[i] - - -def test_floatlist_latlon_coords(): - out = val.spatial([-55.0, 68.7, -55.0, 71, -48, 71, -48, 68.7, -55.0, 68.7]) - obs = [ - out[0], - out[1].exterior.coords.xy[0].tolist(), - out[1].exterior.coords.xy[1].tolist(), - out[2], - ] - expected = [ - "polygon", - [-55.0, -55.0, -48.0, -48.0, -55.0], - [68.7, 71.0, 71.0, 68.7, 68.7], - None, - ] - for i in range(len(expected)): - assert obs[i] == expected[i] - - -def test_spat_input_type(): - ermsg = "Your spatial extent does not meet minimum input criteria" - with pytest.raises(ValueError, match=ermsg): - val.spatial([-64, 66, (-55, 72), 72]) - - -def test_poly_spat_file_input(): - ermsg = "Check that the path and filename of your geometry file are correct" - with pytest.raises(AssertionError, match=ermsg): - val.spatial("file_path/name/invalid_type.txt") - - -# should there be additional tests on the valid file type if-else? If so, is this were we'd use a mock to assume -# a valid (existing) file has been passed? Otherwise we'll never get passed the assert statement... - - ########## temporal ########## def test_date_range_order(): ermsg = "Your date range is invalid" From 051d8d006e8dc23c52c14a3684b6ee8aca0329eb Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Thu, 18 Aug 2022 10:57:16 -0400 Subject: [PATCH 02/44] docs: add trevorskaggs as a contributor for bug, code (#332) --- .all-contributorsrc | 10 ++++++++++ CONTRIBUTORS.rst | 33 +++++++++++++++++---------------- 2 files changed, 27 insertions(+), 16 deletions(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index afa75f11f..2fcdf3027 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -81,6 +81,16 @@ "maintenance", "test" ] + }, + { + "login": "trevorskaggs", + "name": "trevorskaggs", + "avatar_url": "https://avatars.githubusercontent.com/u/1276123?v=4", + "profile": "https://github.com/trevorskaggs", + "contributions": [ + "bug", + "code" + ] } ], "contributorsPerLine": 7, diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index 8120f088e..2679b61c9 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -32,21 +32,22 @@ Thanks goes to these wonderful people (`emoji key - - - - - - - - - - -

Jessica

🐛 💻 🖋 📖 🎨 💡 🤔 🚧 🧑‍🏫 📆 💬 👀

Kelsey Bisson

🐛 💻 📖 🤔 💡 🤔 🧑‍🏫 💬 👀

Sarah Hall

🐛 💻 📖 🚧 ⚠️

Zach Fair

🐛 💻 📖 🤔 💬 👀

nitin-ravinder

🐛 👀
- - - - - + + + + + + + + + + + +

Jessica

🐛 💻 🖋 📖 🎨 💡 🤔 🚧 🧑‍🏫 📆 💬 👀

Kelsey Bisson

🐛 💻 📖 🤔 💡 🤔 🧑‍🏫 💬 👀

Sarah Hall

🐛 💻 📖 🚧 ⚠️

Zach Fair

🐛 💻 📖 🤔 💬 👀

nitin-ravinder

🐛 👀

trevorskaggs

🐛 💻
+ + + + + This project follows the `all-contributors `_ specification. Contributions of any kind welcome! From 4c382b68eae6b50f7e8ad084cdbab168c128d9eb Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Thu, 18 Aug 2022 11:22:45 -0400 Subject: [PATCH 03/44] docs: add RomiP as a contributor for code, ideas, mentoring, review, tutorial (#333) --- .all-contributorsrc | 14 + CONTRIBUTORS.rst | 36 +- .../documentation/classes_dev_uml.svg | 6 +- .../documentation/classes_user_uml.svg | 318 +++++++++--------- 4 files changed, 194 insertions(+), 180 deletions(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 2fcdf3027..91b0f538f 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -83,6 +83,20 @@ ] }, { + + "login": "RomiP", + "name": "Romina Piunno", + "avatar_url": "https://avatars.githubusercontent.com/u/17185856?v=4", + "profile": "https://github.com/RomiP", + "contributions": [ + "code", + "ideas", + "mentoring", + "review", + "tutorial" + ] + }, + { "login": "trevorskaggs", "name": "trevorskaggs", "avatar_url": "https://avatars.githubusercontent.com/u/1276123?v=4", diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index 2679b61c9..80a1031a7 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -16,7 +16,6 @@ Thanks goes to these wonderful people (`emoji key `_ - Woods Hole Oceanographic Institution * `Joachim Meyer `_ - University of Utah * `Fernando Perez `_ - University of California, Berkeley -* `Romina Piunno `_ - University of Toronto * `Facundo Sapienza `_ - University of California, Berkeley * `David Shean `_ - University of Washington * `Ben Smith `_ - University of Washington @@ -32,22 +31,23 @@ Thanks goes to these wonderful people (`emoji key - - - - - - - - - - - -

Jessica

🐛 💻 🖋 📖 🎨 💡 🤔 🚧 🧑‍🏫 📆 💬 👀

Kelsey Bisson

🐛 💻 📖 🤔 💡 🤔 🧑‍🏫 💬 👀

Sarah Hall

🐛 💻 📖 🚧 ⚠️

Zach Fair

🐛 💻 📖 🤔 💬 👀

nitin-ravinder

🐛 👀

trevorskaggs

🐛 💻
- - - - - + + + + + + + + + + + + +

Jessica

🐛 💻 🖋 📖 🎨 💡 🤔 🚧 🧑‍🏫 📆 💬 👀

Kelsey Bisson

🐛 💻 📖 🤔 💡 🤔 🧑‍🏫 💬 👀

Romina Piunno

💻 🤔 🧑‍🏫 👀

Sarah Hall

🐛 💻 📖 🚧 ⚠️

Zach Fair

🐛 💻 📖 🤔 💬 👀

nitin-ravinder

🐛 👀

trevorskaggs

🐛 💻
+ + + + + This project follows the `all-contributors `_ specification. Contributions of any kind welcome! diff --git a/doc/source/user_guide/documentation/classes_dev_uml.svg b/doc/source/user_guide/documentation/classes_dev_uml.svg index 24fe4141c..de1db04b9 100644 --- a/doc/source/user_guide/documentation/classes_dev_uml.svg +++ b/doc/source/user_guide/documentation/classes_dev_uml.svg @@ -68,7 +68,7 @@ _file_vars _granules _order_vars -_prod : NoneType, str +_prod : str, NoneType _readable_granule_name : list _reqparams _s3login_credentials @@ -272,7 +272,7 @@ _version : NoneType path : NoneType product : NoneType -wanted : NoneType, dict +wanted : dict, NoneType __init__(vartype, avail, wanted, session, product, version, path) _check_valid_lists(vgrp, allpaths, var_list, beam_list, keyword_list) @@ -322,7 +322,7 @@ bbox : list cycles : NoneType date_range : NoneType -product : NoneType, str +product : str, NoneType tracks : NoneType __init__(query_obj, product, spatial_extent, date_range, cycles, tracks) diff --git a/doc/source/user_guide/documentation/classes_user_uml.svg b/doc/source/user_guide/documentation/classes_user_uml.svg index 961299b15..f13a38c9c 100644 --- a/doc/source/user_guide/documentation/classes_user_uml.svg +++ b/doc/source/user_guide/documentation/classes_user_uml.svg @@ -4,272 +4,272 @@ - + classes_user_uml - + icepyx.core.Earthdata.Earthdata - -Earthdata - + +Earthdata + capability_url email netrc : NoneType -pswd : str, NoneType +pswd : NoneType, str session : Session uid - + login(attempts) icepyx.core.query.GenQuery - -GenQuery - - - + +GenQuery + + + icepyx.core.granules.Granules - -Granules - -avail : list -orderIDs : list - -download(verbose, path, session, restart) -get_avail(CMRparams, reqparams) -place_order(CMRparams, reqparams, subsetparams, verbose, subset, session, geom_filepath) + +Granules + +avail : list +orderIDs : list + +download(verbose, path, session, restart) +get_avail(CMRparams, reqparams) +place_order(CMRparams, reqparams, subsetparams, verbose, subset, session, geom_filepath) icepyx.core.query.Query - -Query - -CMRparams -cycles -dataset -dates -end_time -file_vars -granules -order_vars -product -product_version -reqparams -spatial -spatial_extent -start_time -tracks - -avail_granules(ids, cycles, tracks, s3urls) -download_granules(path, verbose, subset, restart) -earthdata_login(uid, email, s3token) -latest_version() -order_granules(verbose, subset, email) -product_all_info() -product_summary_info() -show_custom_options(dictview) -subsetparams() -visualize_elevation() -visualize_spatial_extent() + +Query + +CMRparams +cycles +dataset +dates +end_time +file_vars +granules +order_vars +product +product_version +reqparams +spatial +spatial_extent +start_time +tracks + +avail_granules(ids, cycles, tracks, s3urls) +download_granules(path, verbose, subset, restart) +earthdata_login(uid, email, s3token) +latest_version() +order_granules(verbose, subset, email) +product_all_info() +product_summary_info() +show_custom_options(dictview) +subsetparams() +visualize_elevation() +visualize_spatial_extent() icepyx.core.granules.Granules->icepyx.core.query.Query - - -_granules + + +_granules icepyx.core.granules.Granules->icepyx.core.query.Query - - -_granules + + +_granules icepyx.core.icesat2data.Icesat2Data - -Icesat2Data - - - + +Icesat2Data + + + icepyx.core.exceptions.NsidcQueryError - -NsidcQueryError - -errmsg -msgtxt : str - - + +NsidcQueryError + +errmsg +msgtxt : str + + icepyx.core.exceptions.QueryError - -QueryError - - - + +QueryError + + + icepyx.core.exceptions.NsidcQueryError->icepyx.core.exceptions.QueryError - - + + icepyx.core.APIformatting.Parameters - -Parameters - -fmted_keys -partype -poss_keys - -build_params() -check_req_values() -check_values() + +Parameters + +fmted_keys +partype +poss_keys + +build_params() +check_req_values() +check_values() icepyx.core.APIformatting.Parameters->icepyx.core.query.Query - - -_CMRparams + + +_CMRparams icepyx.core.APIformatting.Parameters->icepyx.core.query.Query - - -_reqparams + + +_reqparams icepyx.core.APIformatting.Parameters->icepyx.core.query.Query - - -_subsetparams + + +_subsetparams icepyx.core.APIformatting.Parameters->icepyx.core.query.Query - - -_subsetparams + + +_subsetparams icepyx.core.query.Query->icepyx.core.query.GenQuery - - + + icepyx.core.read.Read - -Read - -data_source : NoneType -is2catalog -vars - -load() + +Read + +data_source : NoneType +is2catalog +vars + +load() icepyx.core.spatial.Spatial - -Spatial - -extent_file -extent_type -spatial_extent - - + +Spatial + +extent_file +extent_type +spatial_extent + + icepyx.core.spatial.Spatial->icepyx.core.query.GenQuery - - -_sp_extent + + +_sp_extent icepyx.core.variables.Variables - -Variables - -path : NoneType -product : NoneType -wanted : dict, NoneType - -append(defaults, var_list, beam_list, keyword_list) -avail(options, internal) -parse_var_list(varlist, tiered, tiered_vars) -remove(all, var_list, beam_list, keyword_list) + +Variables + +path : NoneType +product : NoneType +wanted : NoneType, dict + +append(defaults, var_list, beam_list, keyword_list) +avail(options, internal) +parse_var_list(varlist, tiered, tiered_vars) +remove(all, var_list, beam_list, keyword_list) icepyx.core.variables.Variables->icepyx.core.query.Query - - -_order_vars + + +_order_vars icepyx.core.variables.Variables->icepyx.core.query.Query - - -_order_vars + + +_order_vars icepyx.core.variables.Variables->icepyx.core.query.Query - - -_file_vars + + +_file_vars icepyx.core.variables.Variables->icepyx.core.read.Read - - -_read_vars + + +_read_vars icepyx.core.visualization.Visualize - -Visualize - -bbox : list -cycles : NoneType -date_range : NoneType -product : NoneType, str -tracks : NoneType - -generate_OA_parameters(): list -grid_bbox(binsize): list -make_request(base_url, payload) -parallel_request_OA(): da.array -query_icesat2_filelist(): tuple -request_OA_data(paras): da.array -viz_elevation(): (hv.DynamicMap, hv.Layout) + +Visualize + +bbox : list +cycles : NoneType +date_range : NoneType +product : str, NoneType +tracks : NoneType + +generate_OA_parameters(): list +grid_bbox(binsize): list +make_request(base_url, payload) +parallel_request_OA(): da.array +query_icesat2_filelist(): tuple +request_OA_data(paras): da.array +viz_elevation(): (hv.DynamicMap, hv.Layout) From 9c5dec903af50a11d1efe0a647028ad9fa39b79f Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 26 Aug 2022 12:45:55 -0400 Subject: [PATCH 04/44] docs: add nabib as a contributor for code, ideas (#335) --- .all-contributorsrc | 15 +++++-- CONTRIBUTORS.rst | 39 ++++++++++--------- .../documentation/classes_dev_uml.svg | 2 +- 3 files changed, 34 insertions(+), 22 deletions(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 91b0f538f..fbb9b9c01 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -83,7 +83,6 @@ ] }, { - "login": "RomiP", "name": "Romina Piunno", "avatar_url": "https://avatars.githubusercontent.com/u/17185856?v=4", @@ -94,9 +93,9 @@ "mentoring", "review", "tutorial" - ] + ] }, - { + { "login": "trevorskaggs", "name": "trevorskaggs", "avatar_url": "https://avatars.githubusercontent.com/u/1276123?v=4", @@ -105,6 +104,16 @@ "bug", "code" ] + }, + { + "login": "nabib", + "name": "Nicole Abib", + "avatar_url": "https://avatars.githubusercontent.com/u/16991294?v=4", + "profile": "https://github.com/nabib", + "contributions": [ + "code", + "ideas" + ] } ], "contributorsPerLine": 7, diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index 80a1031a7..934bbdda1 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -31,23 +31,26 @@ Thanks goes to these wonderful people (`emoji key - - - - - - - - - - - - -

Jessica

🐛 💻 🖋 📖 🎨 💡 🤔 🚧 🧑‍🏫 📆 💬 👀

Kelsey Bisson

🐛 💻 📖 🤔 💡 🤔 🧑‍🏫 💬 👀

Romina Piunno

💻 🤔 🧑‍🏫 👀

Sarah Hall

🐛 💻 📖 🚧 ⚠️

Zach Fair

🐛 💻 📖 🤔 💬 👀

nitin-ravinder

🐛 👀

trevorskaggs

🐛 💻
- - - - - + + + + + + + + + + + + + + + +

Jessica

🐛 💻 🖋 📖 🎨 💡 🤔 🚧 🧑‍🏫 📆 💬 👀

Kelsey Bisson

🐛 💻 📖 🤔 💡 🤔 🧑‍🏫 💬 👀

Nicole Abib

💻 🤔

Romina Piunno

💻 🤔 🧑‍🏫 👀

Sarah Hall

🐛 💻 📖 🚧 ⚠️

Zach Fair

🐛 💻 📖 🤔 💬 👀

nitin-ravinder

🐛 👀

trevorskaggs

🐛 💻
+ + + + + This project follows the `all-contributors `_ specification. Contributions of any kind welcome! diff --git a/doc/source/user_guide/documentation/classes_dev_uml.svg b/doc/source/user_guide/documentation/classes_dev_uml.svg index de1db04b9..8fdfa7e3e 100644 --- a/doc/source/user_guide/documentation/classes_dev_uml.svg +++ b/doc/source/user_guide/documentation/classes_dev_uml.svg @@ -162,7 +162,7 @@ Parameters -_fmted_keys : dict, NoneType +_fmted_keys : NoneType, dict _poss_keys : dict _reqtype : str, NoneType fmted_keys From a716374a49e3dfa7aa1268f9377d258c174ccd0f Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 26 Aug 2022 13:02:09 -0400 Subject: [PATCH 05/44] docs: add aaarendt as a contributor for bug, business, eventOrganizing (#336) --- .all-contributorsrc | 11 +++++++++++ CONTRIBUTORS.rst | 3 ++- .../user_guide/documentation/classes_user_uml.svg | 2 +- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index fbb9b9c01..c42df8734 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -114,6 +114,17 @@ "code", "ideas" ] + }, + { + "login": "aaarendt", + "name": "Anthony Arendt", + "avatar_url": "https://avatars.githubusercontent.com/u/4993098?v=4", + "profile": "http://psc.apl.uw.edu/people/investigators/anthony-arendt/", + "contributions": [ + "bug", + "business", + "eventOrganizing" + ] } ], "contributorsPerLine": 7, diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index 934bbdda1..37a570182 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -35,15 +35,16 @@ Thanks goes to these wonderful people (`emoji key + - +

Anthony Arendt

🐛 💼 📋

Jessica

🐛 💻 🖋 📖 🎨 💡 🤔 🚧 🧑‍🏫 📆 💬 👀

Kelsey Bisson

🐛 💻 📖 🤔 💡 🤔 🧑‍🏫 💬 👀

Nicole Abib

💻 🤔

Romina Piunno

💻 🤔 🧑‍🏫 👀

Sarah Hall

🐛 💻 📖 🚧 ⚠️

Zach Fair

🐛 💻 📖 🤔 💬 👀

nitin-ravinder

🐛 👀

nitin-ravinder

🐛 👀

trevorskaggs

🐛 💻
diff --git a/doc/source/user_guide/documentation/classes_user_uml.svg b/doc/source/user_guide/documentation/classes_user_uml.svg index f13a38c9c..1ef230f6c 100644 --- a/doc/source/user_guide/documentation/classes_user_uml.svg +++ b/doc/source/user_guide/documentation/classes_user_uml.svg @@ -216,7 +216,7 @@ path : NoneType product : NoneType -wanted : NoneType, dict +wanted : dict, NoneType append(defaults, var_list, beam_list, keyword_list) avail(options, internal) From 6460432e9e4281c4c3986348aff669cef584f2f3 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 26 Aug 2022 13:14:25 -0400 Subject: [PATCH 06/44] docs: add ShashankBice as a contributor for example (#337) --- .all-contributorsrc | 9 +++++++++ CONTRIBUTORS.rst | 3 ++- doc/source/user_guide/documentation/classes_dev_uml.svg | 4 ++-- doc/source/user_guide/documentation/classes_user_uml.svg | 2 +- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index c42df8734..c88018ef7 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -125,6 +125,15 @@ "business", "eventOrganizing" ] + }, + { + "login": "ShashankBice", + "name": "Shashank Bhushan", + "avatar_url": "https://avatars.githubusercontent.com/u/29011666?v=4", + "profile": "https://github.com/ShashankBice", + "contributions": [ + "example" + ] } ], "contributorsPerLine": 7, diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index 37a570182..4e5f7cf28 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -41,9 +41,10 @@ Thanks goes to these wonderful people (`emoji key
Nicole Abib

💻 🤔
Romina Piunno

💻 🤔 🧑‍🏫 👀
Sarah Hall

🐛 💻 📖 🚧 ⚠️ -
Zach Fair

🐛 💻 📖 🤔 💬 👀 +
Shashank Bhushan

💡 +
Zach Fair

🐛 💻 📖 🤔 💬 👀
nitin-ravinder

🐛 👀
trevorskaggs

🐛 💻 diff --git a/doc/source/user_guide/documentation/classes_dev_uml.svg b/doc/source/user_guide/documentation/classes_dev_uml.svg index 8fdfa7e3e..fbf16c594 100644 --- a/doc/source/user_guide/documentation/classes_dev_uml.svg +++ b/doc/source/user_guide/documentation/classes_dev_uml.svg @@ -221,7 +221,7 @@ _is2catalog : Catalog _out_obj : Dataset _pattern : str -_prod : NoneType, str +_prod : str, NoneType _read_vars _source_type : str data_source : NoneType @@ -266,7 +266,7 @@ Variables -_avail : NoneType, list +_avail : list, NoneType _session : NoneType _vartype _version : NoneType diff --git a/doc/source/user_guide/documentation/classes_user_uml.svg b/doc/source/user_guide/documentation/classes_user_uml.svg index 1ef230f6c..f13a38c9c 100644 --- a/doc/source/user_guide/documentation/classes_user_uml.svg +++ b/doc/source/user_guide/documentation/classes_user_uml.svg @@ -216,7 +216,7 @@ path : NoneType product : NoneType -wanted : dict, NoneType +wanted : NoneType, dict append(defaults, var_list, beam_list, keyword_list) avail(options, internal) From 072778d3efdcc46ca77ff39e3deea763f8e4a6ef Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 26 Aug 2022 13:26:13 -0400 Subject: [PATCH 07/44] docs: add alexdibella as a contributor for bug, ideas, code (#338) --- .all-contributorsrc | 11 +++++++++++ CONTRIBUTORS.rst | 1 + .../user_guide/documentation/classes_dev_uml.svg | 6 +++--- .../user_guide/documentation/classes_user_uml.svg | 2 +- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index c88018ef7..6fc90394f 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -134,6 +134,17 @@ "contributions": [ "example" ] + }, + { + "login": "alexdibella", + "name": "alexdibella", + "avatar_url": "https://avatars.githubusercontent.com/u/66279468?v=4", + "profile": "https://github.com/alexdibella", + "contributions": [ + "bug", + "ideas", + "code" + ] } ], "contributorsPerLine": 7, diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index 4e5f7cf28..e3a93740d 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -45,6 +45,7 @@ Thanks goes to these wonderful people (`emoji key
Zach Fair

🐛 💻 📖 🤔 💬 👀 +
alexdibella

🐛 🤔 💻
nitin-ravinder

🐛 👀
trevorskaggs

🐛 💻 diff --git a/doc/source/user_guide/documentation/classes_dev_uml.svg b/doc/source/user_guide/documentation/classes_dev_uml.svg index fbf16c594..8e9aeea0b 100644 --- a/doc/source/user_guide/documentation/classes_dev_uml.svg +++ b/doc/source/user_guide/documentation/classes_dev_uml.svg @@ -18,7 +18,7 @@ capability_url email netrc : NoneType -pswd : NoneType, str +pswd : str, NoneType session : Session uid @@ -221,7 +221,7 @@ _is2catalog : Catalog _out_obj : Dataset _pattern : str -_prod : str, NoneType +_prod : NoneType, str _read_vars _source_type : str data_source : NoneType @@ -272,7 +272,7 @@ _version : NoneType path : NoneType product : NoneType -wanted : dict, NoneType +wanted : NoneType, dict __init__(vartype, avail, wanted, session, product, version, path) _check_valid_lists(vgrp, allpaths, var_list, beam_list, keyword_list) diff --git a/doc/source/user_guide/documentation/classes_user_uml.svg b/doc/source/user_guide/documentation/classes_user_uml.svg index f13a38c9c..1ef230f6c 100644 --- a/doc/source/user_guide/documentation/classes_user_uml.svg +++ b/doc/source/user_guide/documentation/classes_user_uml.svg @@ -216,7 +216,7 @@ path : NoneType product : NoneType -wanted : NoneType, dict +wanted : dict, NoneType append(defaults, var_list, beam_list, keyword_list) avail(options, internal) From 7ebaa0b70e7f602ffece825a035d7a4cb4b7b3f2 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 26 Aug 2022 13:41:18 -0400 Subject: [PATCH 08/44] docs: add norlandrhagen as a contributor for doc, design, code, infra, review (#339) --- .all-contributorsrc | 13 + CONTRIBUTORS.rst | 3 +- .../documentation/classes_dev_uml.svg | 10 +- .../documentation/classes_user_uml.svg | 318 +++++++++--------- 4 files changed, 179 insertions(+), 165 deletions(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 6fc90394f..c3a4df239 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -145,6 +145,19 @@ "ideas", "code" ] + }, + { + "login": "norlandrhagen", + "name": "Raphael Hagen", + "avatar_url": "https://avatars.githubusercontent.com/u/22455466?v=4", + "profile": "https://github.com/norlandrhagen", + "contributions": [ + "doc", + "design", + "code", + "infra", + "review" + ] } ], "contributorsPerLine": 7, diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index e3a93740d..b9b4d23fb 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -39,11 +39,12 @@ Thanks goes to these wonderful people (`emoji key
Jessica

🐛 💻 🖋 📖 🎨 💡 🤔 🚧 🧑‍🏫 📆 💬 👀
Kelsey Bisson

🐛 💻 📖 🤔 💡 🤔 🧑‍🏫 💬 👀
Nicole Abib

💻 🤔 +
Raphael Hagen

📖 🎨 💻 🚇 👀
Romina Piunno

💻 🤔 🧑‍🏫 👀
Sarah Hall

🐛 💻 📖 🚧 ⚠️ -
Shashank Bhushan

💡 +
Shashank Bhushan

💡
Zach Fair

🐛 💻 📖 🤔 💬 👀
alexdibella

🐛 🤔 💻
nitin-ravinder

🐛 👀 diff --git a/doc/source/user_guide/documentation/classes_dev_uml.svg b/doc/source/user_guide/documentation/classes_dev_uml.svg index 8e9aeea0b..18e112c99 100644 --- a/doc/source/user_guide/documentation/classes_dev_uml.svg +++ b/doc/source/user_guide/documentation/classes_dev_uml.svg @@ -68,7 +68,7 @@ _file_vars _granules _order_vars -_prod : str, NoneType +_prod : NoneType, str _readable_granule_name : list _reqparams _s3login_credentials @@ -162,7 +162,7 @@ Parameters -_fmted_keys : NoneType, dict +_fmted_keys : dict, NoneType _poss_keys : dict _reqtype : str, NoneType fmted_keys @@ -221,7 +221,7 @@ _is2catalog : Catalog _out_obj : Dataset _pattern : str -_prod : NoneType, str +_prod : str, NoneType _read_vars _source_type : str data_source : NoneType @@ -266,7 +266,7 @@ Variables -_avail : list, NoneType +_avail : NoneType, list _session : NoneType _vartype _version : NoneType @@ -322,7 +322,7 @@ bbox : list cycles : NoneType date_range : NoneType -product : str, NoneType +product : NoneType, str tracks : NoneType __init__(query_obj, product, spatial_extent, date_range, cycles, tracks) diff --git a/doc/source/user_guide/documentation/classes_user_uml.svg b/doc/source/user_guide/documentation/classes_user_uml.svg index 1ef230f6c..94056e11d 100644 --- a/doc/source/user_guide/documentation/classes_user_uml.svg +++ b/doc/source/user_guide/documentation/classes_user_uml.svg @@ -4,272 +4,272 @@ - + classes_user_uml - + icepyx.core.Earthdata.Earthdata - -Earthdata - + +Earthdata + capability_url email netrc : NoneType -pswd : NoneType, str +pswd : str, NoneType session : Session uid - + login(attempts) icepyx.core.query.GenQuery - -GenQuery - - - + +GenQuery + + + icepyx.core.granules.Granules - -Granules - -avail : list -orderIDs : list - -download(verbose, path, session, restart) -get_avail(CMRparams, reqparams) -place_order(CMRparams, reqparams, subsetparams, verbose, subset, session, geom_filepath) + +Granules + +avail : list +orderIDs : list + +download(verbose, path, session, restart) +get_avail(CMRparams, reqparams) +place_order(CMRparams, reqparams, subsetparams, verbose, subset, session, geom_filepath) icepyx.core.query.Query - -Query - -CMRparams -cycles -dataset -dates -end_time -file_vars -granules -order_vars -product -product_version -reqparams -spatial -spatial_extent -start_time -tracks - -avail_granules(ids, cycles, tracks, s3urls) -download_granules(path, verbose, subset, restart) -earthdata_login(uid, email, s3token) -latest_version() -order_granules(verbose, subset, email) -product_all_info() -product_summary_info() -show_custom_options(dictview) -subsetparams() -visualize_elevation() -visualize_spatial_extent() + +Query + +CMRparams +cycles +dataset +dates +end_time +file_vars +granules +order_vars +product +product_version +reqparams +spatial +spatial_extent +start_time +tracks + +avail_granules(ids, cycles, tracks, s3urls) +download_granules(path, verbose, subset, restart) +earthdata_login(uid, email, s3token) +latest_version() +order_granules(verbose, subset, email) +product_all_info() +product_summary_info() +show_custom_options(dictview) +subsetparams() +visualize_elevation() +visualize_spatial_extent() icepyx.core.granules.Granules->icepyx.core.query.Query - - -_granules + + +_granules icepyx.core.granules.Granules->icepyx.core.query.Query - - -_granules + + +_granules icepyx.core.icesat2data.Icesat2Data - -Icesat2Data - - - + +Icesat2Data + + + icepyx.core.exceptions.NsidcQueryError - -NsidcQueryError - -errmsg -msgtxt : str - - + +NsidcQueryError + +errmsg +msgtxt : str + + icepyx.core.exceptions.QueryError - -QueryError - - - + +QueryError + + + icepyx.core.exceptions.NsidcQueryError->icepyx.core.exceptions.QueryError - - + + icepyx.core.APIformatting.Parameters - -Parameters - -fmted_keys -partype -poss_keys - -build_params() -check_req_values() -check_values() + +Parameters + +fmted_keys +partype +poss_keys + +build_params() +check_req_values() +check_values() icepyx.core.APIformatting.Parameters->icepyx.core.query.Query - - -_CMRparams + + +_CMRparams icepyx.core.APIformatting.Parameters->icepyx.core.query.Query - - -_reqparams + + +_reqparams icepyx.core.APIformatting.Parameters->icepyx.core.query.Query - - -_subsetparams + + +_subsetparams icepyx.core.APIformatting.Parameters->icepyx.core.query.Query - - -_subsetparams + + +_subsetparams icepyx.core.query.Query->icepyx.core.query.GenQuery - - + + icepyx.core.read.Read - -Read - -data_source : NoneType -is2catalog -vars - -load() + +Read + +data_source : NoneType +is2catalog +vars + +load() icepyx.core.spatial.Spatial - -Spatial - -extent_file -extent_type -spatial_extent - - + +Spatial + +extent_file +extent_type +spatial_extent + + icepyx.core.spatial.Spatial->icepyx.core.query.GenQuery - - -_sp_extent + + +_sp_extent icepyx.core.variables.Variables - -Variables - -path : NoneType -product : NoneType -wanted : dict, NoneType - -append(defaults, var_list, beam_list, keyword_list) -avail(options, internal) -parse_var_list(varlist, tiered, tiered_vars) -remove(all, var_list, beam_list, keyword_list) + +Variables + +path : NoneType +product : NoneType +wanted : NoneType, dict + +append(defaults, var_list, beam_list, keyword_list) +avail(options, internal) +parse_var_list(varlist, tiered, tiered_vars) +remove(all, var_list, beam_list, keyword_list) icepyx.core.variables.Variables->icepyx.core.query.Query - - -_order_vars + + +_order_vars icepyx.core.variables.Variables->icepyx.core.query.Query - - -_order_vars + + +_order_vars icepyx.core.variables.Variables->icepyx.core.query.Query - - -_file_vars + + +_file_vars icepyx.core.variables.Variables->icepyx.core.read.Read - - -_read_vars + + +_read_vars icepyx.core.visualization.Visualize - -Visualize - -bbox : list -cycles : NoneType -date_range : NoneType -product : str, NoneType -tracks : NoneType - -generate_OA_parameters(): list -grid_bbox(binsize): list -make_request(base_url, payload) -parallel_request_OA(): da.array -query_icesat2_filelist(): tuple -request_OA_data(paras): da.array -viz_elevation(): (hv.DynamicMap, hv.Layout) + +Visualize + +bbox : list +cycles : NoneType +date_range : NoneType +product : str, NoneType +tracks : NoneType + +generate_OA_parameters(): list +grid_bbox(binsize): list +make_request(base_url, payload) +parallel_request_OA(): da.array +query_icesat2_filelist(): tuple +request_OA_data(paras): da.array +viz_elevation(): (hv.DynamicMap, hv.Layout) From 73d6c612a068169a740e44b926e88d4f4184e50f Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 26 Aug 2022 13:43:21 -0400 Subject: [PATCH 09/44] docs: add scottyhq as a contributor for maintenance (#340) --- .all-contributorsrc | 9 +++++++++ CONTRIBUTORS.rst | 1 + 2 files changed, 10 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index c3a4df239..41e9b16ed 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -158,6 +158,15 @@ "infra", "review" ] + }, + { + "login": "scottyhq", + "name": "Scott Henderson", + "avatar_url": "https://avatars.githubusercontent.com/u/3924836?v=4", + "profile": "http://scottyhq.github.io", + "contributions": [ + "maintenance" + ] } ], "contributorsPerLine": 7, diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index b9b4d23fb..268f182e3 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -44,6 +44,7 @@ Thanks goes to these wonderful people (`emoji key
Sarah Hall
🐛 💻 📖 🚧 ⚠️ +
Scott Henderson

🚧
Shashank Bhushan

💡
Zach Fair

🐛 💻 📖 🤔 💬 👀
alexdibella

🐛 🤔 💻 From 8f0b8244de56e3da4c46102d8348cb23f03fbf4d Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 26 Aug 2022 13:45:28 -0400 Subject: [PATCH 10/44] docs: add loudTom as a contributor for doc, infra (#341) --- .all-contributorsrc | 10 ++++++++++ CONTRIBUTORS.rst | 1 + 2 files changed, 11 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 41e9b16ed..08b879968 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -167,6 +167,16 @@ "contributions": [ "maintenance" ] + }, + { + "login": "loudTom", + "name": "Tom Johnson", + "avatar_url": "https://avatars.githubusercontent.com/u/33604148?v=4", + "profile": "https://github.com/loudTom", + "contributions": [ + "doc", + "infra" + ] } ], "contributorsPerLine": 7, diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index 268f182e3..fb8ea16d4 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -46,6 +46,7 @@ Thanks goes to these wonderful people (`emoji key
Scott Henderson

🚧
Shashank Bhushan

💡 +
Tom Johnson

📖 🚇
Zach Fair

🐛 💻 📖 🤔 💬 👀
alexdibella

🐛 🤔 💻
nitin-ravinder

🐛 👀 From cbe968e4ddeda41c2657f3a9d53cc335ef546e03 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 26 Aug 2022 13:47:57 -0400 Subject: [PATCH 11/44] docs: add liuzheng-arctic as a contributor for doc, bug, code, ideas, review, tool, example (#342) --- .all-contributorsrc | 15 +++++++++++++++ CONTRIBUTORS.rst | 3 +++ 2 files changed, 18 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 08b879968..aee5a716b 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -177,6 +177,21 @@ "doc", "infra" ] + }, + { + "login": "liuzheng-arctic", + "name": "liuzheng-arctic", + "avatar_url": "https://avatars.githubusercontent.com/u/51420076?v=4", + "profile": "https://github.com/liuzheng-arctic", + "contributions": [ + "doc", + "bug", + "code", + "ideas", + "review", + "tool", + "example" + ] } ], "contributorsPerLine": 7, diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index fb8ea16d4..74b6ea219 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -49,7 +49,10 @@ Thanks goes to these wonderful people (`emoji key
Tom Johnson

📖 🚇
Zach Fair

🐛 💻 📖 🤔 💬 👀
alexdibella

🐛 🤔 💻 +
liuzheng-arctic

📖 🐛 💻 🤔 👀 🔧 💡
nitin-ravinder

🐛 👀 + +
trevorskaggs

🐛 💻 From 4f8b5a530100b3fdf88c2360c0fd2981b2ad7862 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 26 Aug 2022 13:50:24 -0400 Subject: [PATCH 12/44] docs: add fperez as a contributor for design, business, ideas (#343) --- .all-contributorsrc | 11 +++++++++++ CONTRIBUTORS.rst | 5 +++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index aee5a716b..b8df6f43e 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -192,6 +192,17 @@ "tool", "example" ] + }, + { + "login": "fperez", + "name": "Fernando Perez", + "avatar_url": "https://avatars.githubusercontent.com/u/57394?v=4", + "profile": "http://fperez.org", + "contributions": [ + "design", + "business", + "ideas" + ] } ], "contributorsPerLine": 7, diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index 74b6ea219..1a522f79b 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -36,23 +36,24 @@ Thanks goes to these wonderful people (`emoji key
Anthony Arendt

🐛 💼 📋 +
Fernando Perez

🎨 💼 🤔
Jessica

🐛 💻 🖋 📖 🎨 💡 🤔 🚧 🧑‍🏫 📆 💬 👀
Kelsey Bisson

🐛 💻 📖 🤔 💡 🤔 🧑‍🏫 💬 👀
Nicole Abib

💻 🤔
Raphael Hagen

📖 🎨 💻 🚇 👀
Romina Piunno

💻 🤔 🧑‍🏫 👀 -
Sarah Hall

🐛 💻 📖 🚧 ⚠️ +
Sarah Hall

🐛 💻 📖 🚧 ⚠️
Scott Henderson

🚧
Shashank Bhushan

💡
Tom Johnson

📖 🚇
Zach Fair

🐛 💻 📖 🤔 💬 👀
alexdibella

🐛 🤔 💻
liuzheng-arctic

📖 🐛 💻 🤔 👀 🔧 💡 -
nitin-ravinder

🐛 👀 +
nitin-ravinder

🐛 👀
trevorskaggs

🐛 💻 From d1ffe40282305dd1315f1ed54c396c027ac7b77a Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 26 Aug 2022 13:51:48 -0400 Subject: [PATCH 13/44] docs: add tedmaksym as a contributor for ideas (#344) --- .all-contributorsrc | 9 +++++++++ CONTRIBUTORS.rst | 1 + 2 files changed, 10 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index b8df6f43e..cf12f14c4 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -203,6 +203,15 @@ "business", "ideas" ] + }, + { + "login": "tedmaksym", + "name": "tedmaksym", + "avatar_url": "https://avatars.githubusercontent.com/u/13255911?v=4", + "profile": "https://github.com/tedmaksym", + "contributions": [ + "ideas" + ] } ], "contributorsPerLine": 7, diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index 1a522f79b..55d8e365b 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -54,6 +54,7 @@ Thanks goes to these wonderful people (`emoji key
nitin-ravinder

🐛 👀 +
tedmaksym

🤔
trevorskaggs

🐛 💻 From ecb8889f2895d7c7446271a61841095244266dfd Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 26 Aug 2022 13:53:36 -0400 Subject: [PATCH 14/44] docs: add jomey as a contributor for mentoring, maintenance (#345) --- .all-contributorsrc | 10 ++++++++++ CONTRIBUTORS.rst | 5 +++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index cf12f14c4..866a8fb27 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -212,6 +212,16 @@ "contributions": [ "ideas" ] + }, + { + "login": "jomey", + "name": "Joachim Meyer", + "avatar_url": "https://avatars.githubusercontent.com/u/178649?v=4", + "profile": "https://github.com/jomey", + "contributions": [ + "mentoring", + "maintenance" + ] } ], "contributorsPerLine": 7, diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index 55d8e365b..a1f3144ce 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -38,21 +38,22 @@ Thanks goes to these wonderful people (`emoji key
Anthony Arendt

🐛 💼 📋
Fernando Perez

🎨 💼 🤔
Jessica

🐛 💻 🖋 📖 🎨 💡 🤔 🚧 🧑‍🏫 📆 💬 👀 +
Joachim Meyer

🧑‍🏫 🚧
Kelsey Bisson

🐛 💻 📖 🤔 💡 🤔 🧑‍🏫 💬 👀
Nicole Abib

💻 🤔
Raphael Hagen

📖 🎨 💻 🚇 👀 -
Romina Piunno

💻 🤔 🧑‍🏫 👀 +
Romina Piunno

💻 🤔 🧑‍🏫 👀
Sarah Hall

🐛 💻 📖 🚧 ⚠️
Scott Henderson

🚧
Shashank Bhushan

💡
Tom Johnson

📖 🚇
Zach Fair

🐛 💻 📖 🤔 💬 👀
alexdibella

🐛 🤔 💻 -
liuzheng-arctic

📖 🐛 💻 🤔 👀 🔧 💡 +
liuzheng-arctic

📖 🐛 💻 🤔 👀 🔧 💡
nitin-ravinder

🐛 👀
tedmaksym

🤔
trevorskaggs

🐛 💻 From a91e1118b8af96a95bed3c4716d7271317f3bb01 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 26 Aug 2022 13:55:21 -0400 Subject: [PATCH 15/44] docs: add lsetiawan as a contributor for infra, platform (#346) --- .all-contributorsrc | 10 ++++++++++ CONTRIBUTORS.rst | 5 +++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 866a8fb27..bd7db39fa 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -222,6 +222,16 @@ "mentoring", "maintenance" ] + }, + { + "login": "lsetiawan", + "name": "Don Setiawan", + "avatar_url": "https://avatars.githubusercontent.com/u/17802172?v=4", + "profile": "https://www.linkedin.com/in/landungsetiawan/", + "contributions": [ + "infra", + "platform" + ] } ], "contributorsPerLine": 7, diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index a1f3144ce..252521c2e 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -36,23 +36,24 @@ Thanks goes to these wonderful people (`emoji key
Anthony Arendt

🐛 💼 📋 +
Don Setiawan

🚇 📦
Fernando Perez

🎨 💼 🤔
Jessica

🐛 💻 🖋 📖 🎨 💡 🤔 🚧 🧑‍🏫 📆 💬 👀
Joachim Meyer

🧑‍🏫 🚧
Kelsey Bisson

🐛 💻 📖 🤔 💡 🤔 🧑‍🏫 💬 👀
Nicole Abib

💻 🤔 -
Raphael Hagen

📖 🎨 💻 🚇 👀 +
Raphael Hagen

📖 🎨 💻 🚇 👀
Romina Piunno

💻 🤔 🧑‍🏫 👀
Sarah Hall

🐛 💻 📖 🚧 ⚠️
Scott Henderson

🚧
Shashank Bhushan

💡
Tom Johnson

📖 🚇
Zach Fair

🐛 💻 📖 🤔 💬 👀 -
alexdibella

🐛 🤔 💻 +
alexdibella

🐛 🤔 💻
liuzheng-arctic

📖 🐛 💻 🤔 👀 🔧 💡
nitin-ravinder

🐛 👀
tedmaksym

🤔 From 428833f5ea51ed6a745bf4767f31f54127cbbe7b Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 26 Aug 2022 13:56:32 -0400 Subject: [PATCH 16/44] docs: add facusapienza21 as a contributor for example, bug (#347) --- .all-contributorsrc | 10 ++++++++++ CONTRIBUTORS.rst | 5 +++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index bd7db39fa..4dfe20437 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -232,6 +232,16 @@ "infra", "platform" ] + }, + { + "login": "facusapienza21", + "name": "Facundo Sapienza", + "avatar_url": "https://avatars.githubusercontent.com/u/39526081?v=4", + "profile": "http://facusapienza.com", + "contributions": [ + "example", + "bug" + ] } ], "contributorsPerLine": 7, diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index 252521c2e..3c804b565 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -37,22 +37,23 @@ Thanks goes to these wonderful people (`emoji key
Anthony Arendt

🐛 💼 📋
Don Setiawan

🚇 📦 +
Facundo Sapienza

💡 🐛
Fernando Perez

🎨 💼 🤔
Jessica

🐛 💻 🖋 📖 🎨 💡 🤔 🚧 🧑‍🏫 📆 💬 👀
Joachim Meyer

🧑‍🏫 🚧
Kelsey Bisson

🐛 💻 📖 🤔 💡 🤔 🧑‍🏫 💬 👀 -
Nicole Abib

💻 🤔 +
Nicole Abib

💻 🤔
Raphael Hagen

📖 🎨 💻 🚇 👀
Romina Piunno

💻 🤔 🧑‍🏫 👀
Sarah Hall

🐛 💻 📖 🚧 ⚠️
Scott Henderson

🚧
Shashank Bhushan

💡
Tom Johnson

📖 🚇 -
Zach Fair

🐛 💻 📖 🤔 💬 👀 +
Zach Fair

🐛 💻 📖 🤔 💬 👀
alexdibella

🐛 🤔 💻
liuzheng-arctic

📖 🐛 💻 🤔 👀 🔧 💡
nitin-ravinder

🐛 👀 From f235efc8e7bb08db0dc54ce578668c23358a2554 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 26 Aug 2022 13:58:24 -0400 Subject: [PATCH 17/44] docs: add dshean as a contributor for bug, mentoring (#348) --- .all-contributorsrc | 10 ++++++++++ CONTRIBUTORS.rst | 5 +++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 4dfe20437..a6024ba18 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -242,6 +242,16 @@ "example", "bug" ] + }, + { + "login": "dshean", + "name": "David Shean", + "avatar_url": "https://avatars.githubusercontent.com/u/1103530?v=4", + "profile": "http://dshean.github.io", + "contributions": [ + "bug", + "mentoring" + ] } ], "contributorsPerLine": 7, diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index 3c804b565..056c784f4 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -36,23 +36,24 @@ Thanks goes to these wonderful people (`emoji key
Anthony Arendt

🐛 💼 📋 +
David Shean

🐛 🧑‍🏫
Don Setiawan

🚇 📦
Facundo Sapienza

💡 🐛
Fernando Perez

🎨 💼 🤔
Jessica

🐛 💻 🖋 📖 🎨 💡 🤔 🚧 🧑‍🏫 📆 💬 👀
Joachim Meyer

🧑‍🏫 🚧 -
Kelsey Bisson

🐛 💻 📖 🤔 💡 🤔 🧑‍🏫 💬 👀 +
Kelsey Bisson

🐛 💻 📖 🤔 💡 🤔 🧑‍🏫 💬 👀
Nicole Abib

💻 🤔
Raphael Hagen

📖 🎨 💻 🚇 👀
Romina Piunno

💻 🤔 🧑‍🏫 👀
Sarah Hall

🐛 💻 📖 🚧 ⚠️
Scott Henderson

🚧
Shashank Bhushan

💡 -
Tom Johnson

📖 🚇 +
Tom Johnson

📖 🚇
Zach Fair

🐛 💻 📖 🤔 💬 👀
alexdibella

🐛 🤔 💻
liuzheng-arctic

📖 🐛 💻 🤔 👀 🔧 💡 From 21b615360eb543e714862188c572586d0895aa9f Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 26 Aug 2022 13:59:40 -0400 Subject: [PATCH 18/44] docs: add smithb as a contributor for ideas (#349) --- .all-contributorsrc | 9 +++++++++ CONTRIBUTORS.rst | 3 +++ 2 files changed, 12 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index a6024ba18..d80b0b6e1 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -252,6 +252,15 @@ "bug", "mentoring" ] + }, + { + "login": "smithb", + "name": "smithb", + "avatar_url": "https://avatars.githubusercontent.com/u/2279144?v=4", + "profile": "https://github.com/SmithB", + "contributions": [ + "ideas" + ] } ], "contributorsPerLine": 7, diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index 056c784f4..0ead96cf6 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -58,7 +58,10 @@ Thanks goes to these wonderful people (`emoji key
alexdibella

🐛 🤔 💻
liuzheng-arctic

📖 🐛 💻 🤔 👀 🔧 💡
nitin-ravinder

🐛 👀 +
smithb

🤔
tedmaksym

🤔 + +
trevorskaggs

🐛 💻 From ce8ba918a67bd5ed5a8bd4668b23c5c31370ef79 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 26 Aug 2022 14:01:29 -0400 Subject: [PATCH 19/44] docs: add trey-stafford as a contributor for code, ideas, maintenance, review (#350) --- .all-contributorsrc | 12 ++++++++++++ CONTRIBUTORS.rst | 1 + 2 files changed, 13 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index d80b0b6e1..7c3d4d209 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -261,6 +261,18 @@ "contributions": [ "ideas" ] + }, + { + "login": "trey-stafford", + "name": "trey-stafford", + "avatar_url": "https://avatars.githubusercontent.com/u/19692879?v=4", + "profile": "https://github.com/trey-stafford", + "contributions": [ + "code", + "ideas", + "maintenance", + "review" + ] } ], "contributorsPerLine": 7, diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index 0ead96cf6..a39b676d5 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -63,6 +63,7 @@ Thanks goes to these wonderful people (`emoji key
trevorskaggs

🐛 💻 +
trey-stafford

💻 🤔 🚧 👀 From 4c3b98cecfa0f37e298f505fb4d8061a8ff49f83 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 26 Aug 2022 14:03:53 -0400 Subject: [PATCH 20/44] docs: add asteiker as a contributor for example, doc, mentoring (#351) --- .all-contributorsrc | 11 +++++++++++ CONTRIBUTORS.rst | 7 ++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 7c3d4d209..028c2411e 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -273,6 +273,17 @@ "maintenance", "review" ] + }, + { + "login": "asteiker", + "name": "Amy Steiker", + "avatar_url": "https://avatars.githubusercontent.com/u/47193922?v=4", + "profile": "https://nsidc.org", + "contributions": [ + "example", + "doc", + "mentoring" + ] } ], "contributorsPerLine": 7, diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index a39b676d5..c7a1613a9 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -35,33 +35,34 @@ Thanks goes to these wonderful people (`emoji key + - + - + - + From 11f7ebfd311eee68a271a452d1f4ebce43cf1f47 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 26 Aug 2022 14:06:04 -0400 Subject: [PATCH 21/44] docs: add tsutterley as a contributor for doc, code, ideas, question, security, test (#352) --- .all-contributorsrc | 14 ++++++++++++++ CONTRIBUTORS.rst | 3 ++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 028c2411e..cdfd02ea9 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -284,6 +284,20 @@ "doc", "mentoring" ] + }, + { + "login": "tsutterley", + "name": "Tyler Sutterley", + "avatar_url": "https://avatars.githubusercontent.com/u/5384907?v=4", + "profile": "https://tsutterley.github.io/", + "contributions": [ + "doc", + "code", + "ideas", + "question", + "security", + "test" + ] } ], "contributorsPerLine": 7, diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index c7a1613a9..0355189fe 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -55,13 +55,14 @@ Thanks goes to these wonderful people (`emoji key + - + From 98c9d5757241e3f7e25d6f12f2b52801aece3a7d Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 26 Aug 2022 14:08:13 -0400 Subject: [PATCH 22/44] docs: add icetianli as a contributor for bug, code, doc, example, ideas, review, test, tool (#353) --- .all-contributorsrc | 16 ++++++++++++++++ CONTRIBUTORS.rst | 3 ++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index cdfd02ea9..b747c81a5 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -298,6 +298,22 @@ "security", "test" ] + }, + { + "login": "icetianli", + "name": "Tian Li", + "avatar_url": "https://avatars.githubusercontent.com/u/45267156?v=4", + "profile": "https://icetianli.github.io/", + "contributions": [ + "bug", + "code", + "doc", + "example", + "ideas", + "review", + "test", + "tool" + ] } ], "contributorsPerLine": 7, diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index 0355189fe..000d01a21 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -54,14 +54,15 @@ Thanks goes to these wonderful people (`emoji key + - + From 1f652010c121a29cf8bc900b4f253417c5efe8da Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 26 Aug 2022 14:09:14 -0400 Subject: [PATCH 23/44] docs: add annavalentine as a contributor for example (#354) --- .all-contributorsrc | 9 +++++++++ CONTRIBUTORS.rst | 7 ++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index b747c81a5..cc6170ec6 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -314,6 +314,15 @@ "test", "tool" ] + }, + { + "login": "annavalentine", + "name": "Anna Valentine", + "avatar_url": "https://avatars.githubusercontent.com/u/65192768?v=4", + "profile": "https://github.com/annavalentine", + "contributions": [ + "example" + ] } ], "contributorsPerLine": 7, diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index 000d01a21..243735893 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -36,32 +36,33 @@ Thanks goes to these wonderful people (`emoji key + - + - + - + From fa3f7155f7de48b859854c2a3138cf6c4ed5447e Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 26 Aug 2022 14:10:48 -0400 Subject: [PATCH 24/44] docs: add wallinb as a contributor for code, doc, ideas, review (#355) --- .all-contributorsrc | 12 ++++++++++++ CONTRIBUTORS.rst | 7 ++++--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index cc6170ec6..f53edb26c 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -323,6 +323,18 @@ "contributions": [ "example" ] + }, + { + "login": "wallinb", + "name": "Bruce Wallin", + "avatar_url": "https://avatars.githubusercontent.com/u/35819999?v=4", + "profile": "https://github.com/wallinb", + "contributions": [ + "code", + "doc", + "ideas", + "review" + ] } ], "contributorsPerLine": 7, diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index 243735893..92f55a677 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -38,30 +38,31 @@ Thanks goes to these wonderful people (`emoji key
Amy Steiker

💡 📖 🧑‍🏫
+ - + - + - + From 4822a69f681d5659607aad90725a91ca7bc3c68c Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 26 Aug 2022 14:11:59 -0400 Subject: [PATCH 25/44] docs: add mollymwieringa as a contributor for ideas (#356) --- .all-contributorsrc | 9 +++++++++ CONTRIBUTORS.rst | 7 +++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index f53edb26c..a667e5a42 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -335,6 +335,15 @@ "ideas", "review" ] + }, + { + "login": "mollymwieringa", + "name": "Molly Wieringa", + "avatar_url": "https://avatars.githubusercontent.com/u/40209354?v=4", + "profile": "https://github.com/mollymwieringa", + "contributions": [ + "ideas" + ] } ], "contributorsPerLine": 7, diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index 92f55a677..a7558afcb 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -48,26 +48,29 @@ Thanks goes to these wonderful people (`emoji key
Jessica

🐛 💻 🖋 📖 🎨 💡 🤔 🚧 🧑‍🏫 📆 💬 👀
+ - + - + + +

Amy Steiker

💡 📖 🧑‍🏫

Anthony Arendt

🐛 💼 📋

David Shean

🐛 🧑‍🏫

Don Setiawan

🚇 📦

Facundo Sapienza

💡 🐛

Fernando Perez

🎨 💼 🤔

Jessica

🐛 💻 🖋 📖 🎨 💡 🤔 🚧 🧑‍🏫 📆 💬 👀

Joachim Meyer

🧑‍🏫 🚧

Joachim Meyer

🧑‍🏫 🚧

Kelsey Bisson

🐛 💻 📖 🤔 💡 🤔 🧑‍🏫 💬 👀

Nicole Abib

💻 🤔

Raphael Hagen

📖 🎨 💻 🚇 👀

Romina Piunno

💻 🤔 🧑‍🏫 👀

Sarah Hall

🐛 💻 📖 🚧 ⚠️

Scott Henderson

🚧

Shashank Bhushan

💡

Shashank Bhushan

💡

Tom Johnson

📖 🚇

Zach Fair

🐛 💻 📖 🤔 💬 👀

alexdibella

🐛 🤔 💻

liuzheng-arctic

📖 🐛 💻 🤔 👀 🔧 💡

nitin-ravinder

🐛 👀

smithb

🤔

tedmaksym

🤔

tedmaksym

🤔

trevorskaggs

🐛 💻

trey-stafford

💻 🤔 🚧 👀

Shashank Bhushan

💡

Tom Johnson

📖 🚇

Tyler Sutterley

📖 💻 🤔 💬 🛡️ ⚠️

Zach Fair

🐛 💻 📖 🤔 💬 👀

alexdibella

🐛 🤔 💻

liuzheng-arctic

📖 🐛 💻 🤔 👀 🔧 💡

nitin-ravinder

🐛 👀

smithb

🤔

smithb

🤔

tedmaksym

🤔

trevorskaggs

🐛 💻

trey-stafford

💻 🤔 🚧 👀

Shashank Bhushan

💡

Tian Li

🐛 💻 📖 💡 🤔 👀 ⚠️ 🔧

Tom Johnson

📖 🚇

Tyler Sutterley

📖 💻 🤔 💬 🛡️ ⚠️

Zach Fair

🐛 💻 📖 🤔 💬 👀

alexdibella

🐛 🤔 💻

liuzheng-arctic

📖 🐛 💻 🤔 👀 🔧 💡

nitin-ravinder

🐛 👀

nitin-ravinder

🐛 👀

smithb

🤔

tedmaksym

🤔

trevorskaggs

🐛 💻

Amy Steiker

💡 📖 🧑‍🏫

Anna Valentine

💡

Anthony Arendt

🐛 💼 📋

David Shean

🐛 🧑‍🏫

Don Setiawan

🚇 📦

Facundo Sapienza

💡 🐛

Fernando Perez

🎨 💼 🤔

Jessica

🐛 💻 🖋 📖 🎨 💡 🤔 🚧 🧑‍🏫 📆 💬 👀

Jessica

🐛 💻 🖋 📖 🎨 💡 🤔 🚧 🧑‍🏫 📆 💬 👀

Joachim Meyer

🧑‍🏫 🚧

Kelsey Bisson

🐛 💻 📖 🤔 💡 🤔 🧑‍🏫 💬 👀

Nicole Abib

💻 🤔

Raphael Hagen

📖 🎨 💻 🚇 👀

Romina Piunno

💻 🤔 🧑‍🏫 👀

Sarah Hall

🐛 💻 📖 🚧 ⚠️

Scott Henderson

🚧

Scott Henderson

🚧

Shashank Bhushan

💡

Tian Li

🐛 💻 📖 💡 🤔 👀 ⚠️ 🔧

Tom Johnson

📖 🚇

Tyler Sutterley

📖 💻 🤔 💬 🛡️ ⚠️

Zach Fair

🐛 💻 📖 🤔 💬 👀

alexdibella

🐛 🤔 💻

liuzheng-arctic

📖 🐛 💻 🤔 👀 🔧 💡

liuzheng-arctic

📖 🐛 💻 🤔 👀 🔧 💡

nitin-ravinder

🐛 👀

smithb

🤔

tedmaksym

🤔

Anna Valentine

💡

Anthony Arendt

🐛 💼 📋

Bruce Wallin

💻 📖 🤔 👀

David Shean

🐛 🧑‍🏫

Don Setiawan

🚇 📦

Facundo Sapienza

💡 🐛

Fernando Perez

🎨 💼 🤔

Fernando Perez

🎨 💼 🤔

Jessica

🐛 💻 🖋 📖 🎨 💡 🤔 🚧 🧑‍🏫 📆 💬 👀

Joachim Meyer

🧑‍🏫 🚧

Kelsey Bisson

🐛 💻 📖 🤔 💡 🤔 🧑‍🏫 💬 👀

Nicole Abib

💻 🤔

Raphael Hagen

📖 🎨 💻 🚇 👀

Romina Piunno

💻 🤔 🧑‍🏫 👀

Sarah Hall

🐛 💻 📖 🚧 ⚠️

Sarah Hall

🐛 💻 📖 🚧 ⚠️

Scott Henderson

🚧

Shashank Bhushan

💡

Tian Li

🐛 💻 📖 💡 🤔 👀 ⚠️ 🔧

Tom Johnson

📖 🚇

Tyler Sutterley

📖 💻 🤔 💬 🛡️ ⚠️

Zach Fair

🐛 💻 📖 🤔 💬 👀

alexdibella

🐛 🤔 💻

alexdibella

🐛 🤔 💻

liuzheng-arctic

📖 🐛 💻 🤔 👀 🔧 💡

nitin-ravinder

🐛 👀

smithb

🤔

Joachim Meyer

🧑‍🏫 🚧

Kelsey Bisson

🐛 💻 📖 🤔 💡 🤔 🧑‍🏫 💬 👀

Molly Wieringa

🤔

Nicole Abib

💻 🤔

Raphael Hagen

📖 🎨 💻 🚇 👀

Romina Piunno

💻 🤔 🧑‍🏫 👀

Romina Piunno

💻 🤔 🧑‍🏫 👀

Sarah Hall

🐛 💻 📖 🚧 ⚠️

Scott Henderson

🚧

Shashank Bhushan

💡

Tian Li

🐛 💻 📖 💡 🤔 👀 ⚠️ 🔧

Tom Johnson

📖 🚇

Tyler Sutterley

📖 💻 🤔 💬 🛡️ ⚠️

Zach Fair

🐛 💻 📖 🤔 💬 👀

Zach Fair

🐛 💻 📖 🤔 💬 👀

alexdibella

🐛 🤔 💻

liuzheng-arctic

📖 🐛 💻 🤔 👀 🔧 💡

nitin-ravinder

🐛 👀

smithb

🤔

tedmaksym

🤔

trevorskaggs

🐛 💻

trey-stafford

💻 🤔 🚧 👀
From 8930a77db190308cfe750f2f2f97b24a374226ef Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 26 Aug 2022 14:12:57 -0400 Subject: [PATCH 26/44] docs: add bidhya as a contributor for example (#357) --- .all-contributorsrc | 9 +++++++++ CONTRIBUTORS.rst | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index a667e5a42..da31f52f1 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -344,6 +344,15 @@ "contributions": [ "ideas" ] + }, + { + "login": "bidhya", + "name": "bidhya", + "avatar_url": "https://avatars.githubusercontent.com/u/6469101?v=4", + "profile": "https://byrd.osu.edu/", + "contributions": [ + "example" + ] } ], "contributorsPerLine": 7, diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index a7558afcb..1b6c326c4 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -64,13 +64,14 @@ Thanks goes to these wonderful people (`emoji key
Zach Fair

🐛 💻 📖 🤔 💬 👀
alexdibella

🐛 🤔 💻 +
bidhya

💡
liuzheng-arctic

📖 🐛 💻 🤔 👀 🔧 💡
nitin-ravinder

🐛 👀
smithb

🤔
tedmaksym

🤔 -
trevorskaggs

🐛 💻 +
trevorskaggs

🐛 💻
trey-stafford

💻 🤔 🚧 👀 From c40960daee2a6cb7f2dd717f29bdb1a956d97d79 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 26 Aug 2022 14:14:08 -0400 Subject: [PATCH 27/44] docs: add aaarendt as a contributor for fundingFinding (#358) --- .all-contributorsrc | 3 ++- CONTRIBUTORS.rst | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index da31f52f1..c31f67114 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -123,7 +123,8 @@ "contributions": [ "bug", "business", - "eventOrganizing" + "eventOrganizing", + "fundingFinding" ] }, { diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index 1b6c326c4..dc61b8c76 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -37,7 +37,7 @@ Thanks goes to these wonderful people (`emoji key
Amy Steiker

💡 📖 🧑‍🏫
Anna Valentine

💡 -
Anthony Arendt

🐛 💼 📋 +
Anthony Arendt

🐛 💼 📋 🔍
Bruce Wallin

💻 📖 🤔 👀
David Shean

🐛 🧑‍🏫
Don Setiawan

🚇 📦 From 90079de1cab9a5f93c5befceba18ce27db6b8541 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 26 Aug 2022 14:18:08 -0400 Subject: [PATCH 28/44] docs: add trey-stafford as a contributor for question (#359) --- .all-contributorsrc | 3 +- CONTRIBUTORS.rst | 2 +- .../documentation/classes_dev_uml.svg | 14 +- .../documentation/classes_user_uml.svg | 318 +++++++++--------- 4 files changed, 169 insertions(+), 168 deletions(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index c31f67114..9cf9a907b 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -272,7 +272,8 @@ "code", "ideas", "maintenance", - "review" + "review", + "question" ] }, { diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index dc61b8c76..9962fa3b2 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -72,7 +72,7 @@ Thanks goes to these wonderful people (`emoji key
trevorskaggs

🐛 💻 -
trey-stafford

💻 🤔 🚧 👀 +
trey-stafford

💻 🤔 🚧 👀 💬 diff --git a/doc/source/user_guide/documentation/classes_dev_uml.svg b/doc/source/user_guide/documentation/classes_dev_uml.svg index 18e112c99..465dd2464 100644 --- a/doc/source/user_guide/documentation/classes_dev_uml.svg +++ b/doc/source/user_guide/documentation/classes_dev_uml.svg @@ -18,7 +18,7 @@ capability_url email netrc : NoneType -pswd : str, NoneType +pswd : NoneType, str session : Session uid @@ -68,7 +68,7 @@ _file_vars _granules _order_vars -_prod : NoneType, str +_prod : str, NoneType _readable_granule_name : list _reqparams _s3login_credentials @@ -162,7 +162,7 @@ Parameters -_fmted_keys : dict, NoneType +_fmted_keys : NoneType, dict _poss_keys : dict _reqtype : str, NoneType fmted_keys @@ -221,7 +221,7 @@ _is2catalog : Catalog _out_obj : Dataset _pattern : str -_prod : str, NoneType +_prod : NoneType, str _read_vars _source_type : str data_source : NoneType @@ -266,13 +266,13 @@ Variables -_avail : NoneType, list +_avail : list, NoneType _session : NoneType _vartype _version : NoneType path : NoneType product : NoneType -wanted : NoneType, dict +wanted : dict, NoneType __init__(vartype, avail, wanted, session, product, version, path) _check_valid_lists(vgrp, allpaths, var_list, beam_list, keyword_list) @@ -322,7 +322,7 @@ bbox : list cycles : NoneType date_range : NoneType -product : NoneType, str +product : str, NoneType tracks : NoneType __init__(query_obj, product, spatial_extent, date_range, cycles, tracks) diff --git a/doc/source/user_guide/documentation/classes_user_uml.svg b/doc/source/user_guide/documentation/classes_user_uml.svg index 94056e11d..f13a38c9c 100644 --- a/doc/source/user_guide/documentation/classes_user_uml.svg +++ b/doc/source/user_guide/documentation/classes_user_uml.svg @@ -4,272 +4,272 @@ - + classes_user_uml - + icepyx.core.Earthdata.Earthdata - -Earthdata - + +Earthdata + capability_url email netrc : NoneType -pswd : str, NoneType +pswd : NoneType, str session : Session uid - + login(attempts) icepyx.core.query.GenQuery - -GenQuery - - - + +GenQuery + + + icepyx.core.granules.Granules - -Granules - -avail : list -orderIDs : list - -download(verbose, path, session, restart) -get_avail(CMRparams, reqparams) -place_order(CMRparams, reqparams, subsetparams, verbose, subset, session, geom_filepath) + +Granules + +avail : list +orderIDs : list + +download(verbose, path, session, restart) +get_avail(CMRparams, reqparams) +place_order(CMRparams, reqparams, subsetparams, verbose, subset, session, geom_filepath) icepyx.core.query.Query - -Query - -CMRparams -cycles -dataset -dates -end_time -file_vars -granules -order_vars -product -product_version -reqparams -spatial -spatial_extent -start_time -tracks - -avail_granules(ids, cycles, tracks, s3urls) -download_granules(path, verbose, subset, restart) -earthdata_login(uid, email, s3token) -latest_version() -order_granules(verbose, subset, email) -product_all_info() -product_summary_info() -show_custom_options(dictview) -subsetparams() -visualize_elevation() -visualize_spatial_extent() + +Query + +CMRparams +cycles +dataset +dates +end_time +file_vars +granules +order_vars +product +product_version +reqparams +spatial +spatial_extent +start_time +tracks + +avail_granules(ids, cycles, tracks, s3urls) +download_granules(path, verbose, subset, restart) +earthdata_login(uid, email, s3token) +latest_version() +order_granules(verbose, subset, email) +product_all_info() +product_summary_info() +show_custom_options(dictview) +subsetparams() +visualize_elevation() +visualize_spatial_extent() icepyx.core.granules.Granules->icepyx.core.query.Query - - -_granules + + +_granules icepyx.core.granules.Granules->icepyx.core.query.Query - - -_granules + + +_granules icepyx.core.icesat2data.Icesat2Data - -Icesat2Data - - - + +Icesat2Data + + + icepyx.core.exceptions.NsidcQueryError - -NsidcQueryError - -errmsg -msgtxt : str - - + +NsidcQueryError + +errmsg +msgtxt : str + + icepyx.core.exceptions.QueryError - -QueryError - - - + +QueryError + + + icepyx.core.exceptions.NsidcQueryError->icepyx.core.exceptions.QueryError - - + + icepyx.core.APIformatting.Parameters - -Parameters - -fmted_keys -partype -poss_keys - -build_params() -check_req_values() -check_values() + +Parameters + +fmted_keys +partype +poss_keys + +build_params() +check_req_values() +check_values() icepyx.core.APIformatting.Parameters->icepyx.core.query.Query - - -_CMRparams + + +_CMRparams icepyx.core.APIformatting.Parameters->icepyx.core.query.Query - - -_reqparams + + +_reqparams icepyx.core.APIformatting.Parameters->icepyx.core.query.Query - - -_subsetparams + + +_subsetparams icepyx.core.APIformatting.Parameters->icepyx.core.query.Query - - -_subsetparams + + +_subsetparams icepyx.core.query.Query->icepyx.core.query.GenQuery - - + + icepyx.core.read.Read - -Read - -data_source : NoneType -is2catalog -vars - -load() + +Read + +data_source : NoneType +is2catalog +vars + +load() icepyx.core.spatial.Spatial - -Spatial - -extent_file -extent_type -spatial_extent - - + +Spatial + +extent_file +extent_type +spatial_extent + + icepyx.core.spatial.Spatial->icepyx.core.query.GenQuery - - -_sp_extent + + +_sp_extent icepyx.core.variables.Variables - -Variables - -path : NoneType -product : NoneType -wanted : NoneType, dict - -append(defaults, var_list, beam_list, keyword_list) -avail(options, internal) -parse_var_list(varlist, tiered, tiered_vars) -remove(all, var_list, beam_list, keyword_list) + +Variables + +path : NoneType +product : NoneType +wanted : NoneType, dict + +append(defaults, var_list, beam_list, keyword_list) +avail(options, internal) +parse_var_list(varlist, tiered, tiered_vars) +remove(all, var_list, beam_list, keyword_list) icepyx.core.variables.Variables->icepyx.core.query.Query - - -_order_vars + + +_order_vars icepyx.core.variables.Variables->icepyx.core.query.Query - - -_order_vars + + +_order_vars icepyx.core.variables.Variables->icepyx.core.query.Query - - -_file_vars + + +_file_vars icepyx.core.variables.Variables->icepyx.core.read.Read - - -_read_vars + + +_read_vars icepyx.core.visualization.Visualize - -Visualize - -bbox : list -cycles : NoneType -date_range : NoneType -product : str, NoneType -tracks : NoneType - -generate_OA_parameters(): list -grid_bbox(binsize): list -make_request(base_url, payload) -parallel_request_OA(): da.array -query_icesat2_filelist(): tuple -request_OA_data(paras): da.array -viz_elevation(): (hv.DynamicMap, hv.Layout) + +Visualize + +bbox : list +cycles : NoneType +date_range : NoneType +product : str, NoneType +tracks : NoneType + +generate_OA_parameters(): list +grid_bbox(binsize): list +make_request(base_url, payload) +parallel_request_OA(): da.array +query_icesat2_filelist(): tuple +request_OA_data(paras): da.array +viz_elevation(): (hv.DynamicMap, hv.Layout) From bbb06d2344e1346bdf96202270217def35ed023b Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 26 Aug 2022 14:19:12 -0400 Subject: [PATCH 29/44] docs: add wallinb as a contributor for question (#360) --- .all-contributorsrc | 3 ++- CONTRIBUTORS.rst | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 9cf9a907b..f8ce5f164 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -335,7 +335,8 @@ "code", "doc", "ideas", - "review" + "review", + "question" ] }, { diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index 9962fa3b2..f8bdf931d 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -38,7 +38,7 @@ Thanks goes to these wonderful people (`emoji key
Amy Steiker
💡 📖 🧑‍🏫
Anna Valentine

💡
Anthony Arendt

🐛 💼 📋 🔍 -
Bruce Wallin

💻 📖 🤔 👀 +
Bruce Wallin

💻 📖 🤔 👀 💬
David Shean

🐛 🧑‍🏫
Don Setiawan

🚇 📦
Facundo Sapienza

💡 🐛 From 40aaf43d2a1f1dea01a18997b733af448bb141d6 Mon Sep 17 00:00:00 2001 From: Jessica Scheick Date: Fri, 26 Aug 2022 14:43:41 -0400 Subject: [PATCH 30/44] clean up after adding all contribs via bot (#334) * update num of contributors in badge * remove previous formatted list of contributors and fix alignment for rendering --- CONTRIBUTORS.rst | 121 +++++++++++++++++++---------------------------- README.rst | 4 +- 2 files changed, 51 insertions(+), 74 deletions(-) diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index f8bdf931d..0d586122f 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -5,80 +5,57 @@ The following people have made contributions to the project (in alphabetical order by last name) and are considered "The icepyx Developers". Thanks goes to these wonderful people (`emoji key `_): -* `Nicole Abib `_ - University of Oregon -* `Anthony Arendt `_ - University of Washington -* `Shashank Bhushan `_ - University of Washington -* `Alessandro Di Bella `_ - Technical University of Denmark -* `Raphael Hagen `_ - University of Washington -* `Scott Henderson `_ - University of Washington -* `Thomas Johnson `_ - University College London -* `Zheng Liu `_ - University of Washington -* `Ted Maksym `_ - Woods Hole Oceanographic Institution -* `Joachim Meyer `_ - University of Utah -* `Fernando Perez `_ - University of California, Berkeley -* `Facundo Sapienza `_ - University of California, Berkeley -* `David Shean `_ - University of Washington -* `Ben Smith `_ - University of Washington -* `Trey Stafford `_ - NSIDC, University of Colorado -* `Amy Steiker `_ - NSIDC, University of Colorado -* `Tyler Sutterley `_ - University of Washington -* `Anna Valentine `_ - Colorado School of Mines -* `Bruce Wallin `_ - NSIDC, University of Colorado -* `Molly Wieringa `_ - University of Washington -* `Bidhyananda Yadav `_ - Ohio State University - - .. raw:: html - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Amy Steiker

💡 📖 🧑‍🏫

Anna Valentine

💡

Anthony Arendt

🐛 💼 📋 🔍

Bruce Wallin

💻 📖 🤔 👀 💬

David Shean

🐛 🧑‍🏫

Don Setiawan

🚇 📦

Facundo Sapienza

💡 🐛

Fernando Perez

🎨 💼 🤔

Jessica

🐛 💻 🖋 📖 🎨 💡 🤔 🚧 🧑‍🏫 📆 💬 👀

Joachim Meyer

🧑‍🏫 🚧

Kelsey Bisson

🐛 💻 📖 🤔 💡 🤔 🧑‍🏫 💬 👀

Molly Wieringa

🤔

Nicole Abib

💻 🤔

Raphael Hagen

📖 🎨 💻 🚇 👀

Romina Piunno

💻 🤔 🧑‍🏫 👀

Sarah Hall

🐛 💻 📖 🚧 ⚠️

Scott Henderson

🚧

Shashank Bhushan

💡

Tian Li

🐛 💻 📖 💡 🤔 👀 ⚠️ 🔧

Tom Johnson

📖 🚇

Tyler Sutterley

📖 💻 🤔 💬 🛡️ ⚠️

Zach Fair

🐛 💻 📖 🤔 💬 👀

alexdibella

🐛 🤔 💻

bidhya

💡

liuzheng-arctic

📖 🐛 💻 🤔 👀 🔧 💡

nitin-ravinder

🐛 👀

smithb

🤔

tedmaksym

🤔

trevorskaggs

🐛 💻

trey-stafford

💻 🤔 🚧 👀 💬
- - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Amy Steiker

💡 📖 🧑‍🏫

Anna Valentine

💡

Anthony Arendt

🐛 💼 📋 🔍

Bruce Wallin

💻 📖 🤔 👀 💬

David Shean

🐛 🧑‍🏫

Don Setiawan

🚇 📦

Facundo Sapienza

💡 🐛

Fernando Perez

🎨 💼 🤔

Jessica

🐛 💻 🖋 📖 🎨 💡 🤔 🚧 🧑‍🏫 📆 💬 👀

Joachim Meyer

🧑‍🏫 🚧

Kelsey Bisson

🐛 💻 📖 🤔 💡 🤔 🧑‍🏫 💬 👀

Molly Wieringa

🤔

Nicole Abib

💻 🤔

Raphael Hagen

📖 🎨 💻 🚇 👀

Romina Piunno

💻 🤔 🧑‍🏫 👀

Sarah Hall

🐛 💻 📖 🚧 ⚠️

Scott Henderson

🚧

Shashank Bhushan

💡

Tian Li

🐛 💻 📖 💡 🤔 👀 ⚠️ 🔧

Tom Johnson

📖 🚇

Tyler Sutterley

📖 💻 🤔 💬 🛡️ ⚠️

Zach Fair

🐛 💻 📖 🤔 💬 👀

alexdibella

🐛 🤔 💻

bidhya

💡

liuzheng-arctic

📖 🐛 💻 🤔 👀 🔧 💡

nitin-ravinder

🐛 👀

smithb

🤔

tedmaksym

🤔

trevorskaggs

🐛 💻

trey-stafford

💻 🤔 🚧 👀 💬
+ + + + + This project follows the `all-contributors `_ specification. Contributions of any kind welcome! diff --git a/README.rst b/README.rst index 52b1778e0..e6caf3f43 100644 --- a/README.rst +++ b/README.rst @@ -18,7 +18,7 @@ Current development version (development branch): |Docs Status dev| |Travis dev .. |Pypi install| image:: https://badge.fury.io/py/icepyx.svg :target: https://pypi.org/project/icepyx -.. |Contributors| image:: https://img.shields.io/badge/all_contributors-27-orange.svg?style=flat-square +.. |Contributors| image:: https://img.shields.io/badge/all_contributors-30-orange.svg?style=flat-square :alt: All Contributors :target: https://github.com/icesat2py/icepyx/blob/main/CONTRIBUTORS.rst @@ -131,4 +131,4 @@ taken to close/merge these PRs, and issues closed. For more information, please visit `the informational page `__ or download the `participant information -sheet `__. \ No newline at end of file +sheet `__. From 8165a87de9cf7bbd26d563d504e635dd16c1401b Mon Sep 17 00:00:00 2001 From: Jessica Scheick Date: Tue, 30 Aug 2022 10:19:36 -0400 Subject: [PATCH 31/44] Traffic and traffic scripts updates (#363) * script updates to remove dupes and simplify traffic PR reviews --- doc/source/tracking/pypistats/downloads.svg | 1289 +++-- .../tracking/pypistats/downloads_data.csv | 757 ++- .../tracking/pypistats/get_pypi_stats.py | 2 +- .../tracking/pypistats/sys_downloads_data.csv | 836 ++- doc/source/tracking/traffic/clones.csv | 146 +- doc/source/tracking/traffic/plots.svg | 4696 +++++++++-------- .../tracking/traffic/traffic_data_mgmt.py | 7 +- doc/source/tracking/traffic/views.csv | 169 + 8 files changed, 4729 insertions(+), 3173 deletions(-) diff --git a/doc/source/tracking/pypistats/downloads.svg b/doc/source/tracking/pypistats/downloads.svg index ccc029a76..0148d739c 100644 --- a/doc/source/tracking/pypistats/downloads.svg +++ b/doc/source/tracking/pypistats/downloads.svg @@ -6,11 +6,11 @@ - 2022-03-17T21:02:01.353153 + 2022-08-01T20:57:02.309907 image/svg+xml - Matplotlib v3.5.1, https://matplotlib.org/ + Matplotlib v3.5.2, https://matplotlib.org/ @@ -41,12 +41,12 @@ z - - + @@ -205,12 +205,12 @@ z - + - + - + - + @@ -283,12 +283,12 @@ z - + - + - + - + @@ -339,12 +339,12 @@ z - + - + @@ -358,7 +358,63 @@ z - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -477,46 +533,46 @@ z - + - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + + - - + + - + - + @@ -1435,7 +1628,7 @@ z - + diff --git a/doc/source/tracking/pypistats/downloads_data.csv b/doc/source/tracking/pypistats/downloads_data.csv index 5b3974e4b..29ed53a73 100644 --- a/doc/source/tracking/pypistats/downloads_data.csv +++ b/doc/source/tracking/pypistats/downloads_data.csv @@ -1,352 +1,617 @@ category,date,downloads with_mirrors,2022-03-05,259 +with_mirrors,2022-03-18,255 with_mirrors,2022-03-07,246 with_mirrors,2022-03-04,203 with_mirrors,2022-03-08,150 -with_mirrors,2021-12-02,146 -with_mirrors,2021-12-09,136 -with_mirrors,2021-12-01,120 with_mirrors,2022-03-09,114 with_mirrors,2022-03-10,114 -with_mirrors,2021-12-08,106 with_mirrors,2022-03-11,98 with_mirrors,2022-03-06,96 -with_mirrors,2021-12-10,88 +with_mirrors,2022-05-17,92 +with_mirrors,2022-03-22,91 with_mirrors,2022-02-21,88 -with_mirrors,2021-12-18,84 -with_mirrors,2021-12-16,75 -with_mirrors,2021-12-24,73 -with_mirrors,2021-09-20,72 +with_mirrors,2022-04-02,87 +without_mirrors,2022-03-18,87 +with_mirrors,2022-03-25,86 +with_mirrors,2022-04-01,86 +with_mirrors,2022-05-06,85 +with_mirrors,2022-06-11,85 +with_mirrors,2022-03-30,84 +with_mirrors,2022-06-06,83 +with_mirrors,2022-03-24,79 +with_mirrors,2022-03-21,76 +with_mirrors,2022-04-08,76 +with_mirrors,2022-03-20,75 with_mirrors,2022-03-12,71 -with_mirrors,2021-10-04,67 -with_mirrors,2022-01-12,67 +with_mirrors,2022-04-14,71 with_mirrors,2022-02-03,67 -with_mirrors,2021-12-06,66 +with_mirrors,2022-03-29,66 +with_mirrors,2022-04-07,65 without_mirrors,2022-03-10,65 -with_mirrors,2021-12-17,63 -with_mirrors,2022-01-19,63 -with_mirrors,2021-12-23,62 +with_mirrors,2022-03-19,64 +with_mirrors,2022-03-28,62 without_mirrors,2022-02-21,62 with_mirrors,2022-02-22,61 +with_mirrors,2022-03-26,60 +with_mirrors,2022-04-23,60 without_mirrors,2022-03-07,59 +with_mirrors,2022-04-17,58 +with_mirrors,2022-07-14,58 +with_mirrors,2022-07-25,58 +with_mirrors,2022-07-29,58 with_mirrors,2022-02-27,57 -with_mirrors,2022-01-21,53 -with_mirrors,2022-01-22,52 -with_mirrors,2021-09-21,50 -with_mirrors,2021-12-03,50 +with_mirrors,2022-04-11,57 +with_mirrors,2022-06-14,56 +with_mirrors,2022-07-10,56 +with_mirrors,2022-07-05,55 +with_mirrors,2022-04-15,54 +with_mirrors,2022-07-21,54 +with_mirrors,2022-04-24,53 +with_mirrors,2022-04-21,52 with_mirrors,2022-02-10,49 -with_mirrors,2021-12-22,48 -with_mirrors,2022-01-03,48 -with_mirrors,2022-01-08,48 +with_mirrors,2022-04-26,49 with_mirrors,2022-02-06,48 +with_mirrors,2022-04-19,48 with_mirrors,2022-02-04,47 with_mirrors,2022-02-24,47 with_mirrors,2022-03-14,47 +with_mirrors,2022-03-31,47 without_mirrors,2022-03-04,47 -with_mirrors,2021-11-04,46 with_mirrors,2022-03-02,46 without_mirrors,2022-03-02,46 -with_mirrors,2022-01-24,44 -with_mirrors,2021-11-17,43 +with_mirrors,2022-04-09,45 +with_mirrors,2022-04-13,43 +with_mirrors,2022-06-24,42 without_mirrors,2022-02-22,42 -with_mirrors,2021-11-20,41 -with_mirrors,2021-12-04,41 -with_mirrors,2022-01-01,40 -with_mirrors,2021-11-22,39 +without_mirrors,2022-07-29,42 +with_mirrors,2022-04-16,41 +with_mirrors,2022-05-07,41 +with_mirrors,2022-06-08,41 +with_mirrors,2022-07-30,40 with_mirrors,2022-02-20,39 -with_mirrors,2021-11-14,37 -with_mirrors,2021-12-11,37 -without_mirrors,2021-12-04,37 -with_mirrors,2021-12-19,36 -without_mirrors,2021-09-20,36 -with_mirrors,2021-10-03,35 -with_mirrors,2021-10-22,35 -with_mirrors,2021-10-25,35 -with_mirrors,2021-12-20,35 +with_mirrors,2022-05-19,39 +with_mirrors,2022-05-31,39 +with_mirrors,2022-04-27,38 +with_mirrors,2022-04-28,38 +with_mirrors,2022-04-06,37 +with_mirrors,2022-05-25,37 +with_mirrors,2022-06-25,37 +with_mirrors,2022-07-26,37 +with_mirrors,2022-03-17,36 with_mirrors,2022-03-15,35 -with_mirrors,2021-11-24,34 +with_mirrors,2022-05-10,35 +with_mirrors,2022-06-17,35 +with_mirrors,2022-07-09,35 +without_mirrors,2022-05-10,35 with_mirrors,2022-03-13,34 -with_mirrors,2021-11-01,33 -with_mirrors,2021-11-02,33 -with_mirrors,2021-09-28,32 -with_mirrors,2021-10-17,32 -with_mirrors,2021-11-27,32 -with_mirrors,2022-01-29,32 -with_mirrors,2021-11-29,31 -with_mirrors,2022-01-16,31 -with_mirrors,2022-01-28,31 +with_mirrors,2022-06-01,34 +with_mirrors,2022-06-03,34 +with_mirrors,2022-06-18,34 +with_mirrors,2022-07-19,34 +with_mirrors,2022-07-20,34 +with_mirrors,2022-05-30,33 +with_mirrors,2022-06-23,33 with_mirrors,2022-02-09,31 with_mirrors,2022-02-14,31 +with_mirrors,2022-06-10,31 +with_mirrors,2022-06-16,31 without_mirrors,2022-03-15,31 -with_mirrors,2021-09-23,30 -with_mirrors,2022-01-06,30 +without_mirrors,2022-06-14,31 +without_mirrors,2022-07-10,31 with_mirrors,2022-02-25,30 -with_mirrors,2021-09-30,29 +with_mirrors,2022-04-03,30 +with_mirrors,2022-06-15,30 +with_mirrors,2022-06-28,30 +with_mirrors,2022-06-29,30 +without_mirrors,2022-03-30,30 +with_mirrors,2022-05-22,29 +with_mirrors,2022-06-19,29 +with_mirrors,2022-07-27,29 +with_mirrors,2022-05-20,28 +with_mirrors,2022-05-27,28 +with_mirrors,2022-07-01,28 +without_mirrors,2022-03-13,28 +with_mirrors,2022-03-27,27 +with_mirrors,2022-04-10,27 +with_mirrors,2022-05-11,27 +with_mirrors,2022-07-08,27 +with_mirrors,2022-07-17,27 +without_mirrors,2022-03-08,27 +without_mirrors,2022-03-27,27 +without_mirrors,2022-03-28,27 +without_mirrors,2022-04-02,27 +with_mirrors,2022-03-23,26 +with_mirrors,2022-06-21,26 +with_mirrors,2022-02-19,25 +with_mirrors,2022-02-07,24 +with_mirrors,2022-03-01,24 +with_mirrors,2022-03-03,24 +with_mirrors,2022-03-16,24 +without_mirrors,2022-03-01,24 +with_mirrors,2022-04-12,23 +without_mirrors,2022-03-24,21 +with_mirrors,2022-02-02,20 +with_mirrors,2022-02-08,20 +with_mirrors,2022-07-23,20 +without_mirrors,2022-02-20,20 +without_mirrors,2022-07-23,20 +without_mirrors,2022-02-27,19 +with_mirrors,2022-02-05,18 +with_mirrors,2022-05-28,18 +with_mirrors,2022-06-22,18 +with_mirrors,2022-02-28,17 +without_mirrors,2022-04-14,17 +without_mirrors,2022-05-17,17 +without_mirrors,2022-07-30,17 +with_mirrors,2022-02-15,16 +with_mirrors,2022-05-26,16 +with_mirrors,2022-06-04,16 +with_mirrors,2022-07-31,16 +without_mirrors,2022-03-09,16 +without_mirrors,2022-06-08,16 +with_mirrors,2022-06-13,15 +without_mirrors,2022-06-13,15 +with_mirrors,2022-02-23,14 +with_mirrors,2022-05-14,14 +without_mirrors,2022-03-14,14 +without_mirrors,2022-03-16,14 +with_mirrors,2022-02-16,13 +with_mirrors,2022-05-21,13 +with_mirrors,2022-07-22,13 +without_mirrors,2022-03-05,13 +without_mirrors,2022-07-22,13 +with_mirrors,2022-02-26,12 +with_mirrors,2022-05-12,12 +without_mirrors,2022-02-26,12 +without_mirrors,2022-03-22,12 +without_mirrors,2022-03-29,12 +with_mirrors,2022-02-01,11 +with_mirrors,2022-04-04,11 +without_mirrors,2022-04-12,11 +with_mirrors,2022-04-05,10 +with_mirrors,2022-04-20,10 +without_mirrors,2022-02-07,10 +without_mirrors,2022-04-15,10 +without_mirrors,2022-07-09,10 +with_mirrors,2022-04-22,9 +with_mirrors,2022-04-29,9 +with_mirrors,2022-04-30,9 +with_mirrors,2022-05-02,9 +with_mirrors,2022-05-24,9 +with_mirrors,2022-05-29,9 +with_mirrors,2022-07-07,9 +without_mirrors,2022-04-19,9 +without_mirrors,2022-06-03,9 +without_mirrors,2022-07-07,9 +without_mirrors,2022-07-19,9 +with_mirrors,2022-07-28,8 +without_mirrors,2022-02-06,8 +without_mirrors,2022-02-14,8 +without_mirrors,2022-02-15,8 +without_mirrors,2022-04-13,8 +without_mirrors,2022-05-19,8 +without_mirrors,2022-05-25,8 +without_mirrors,2022-06-17,8 +without_mirrors,2022-07-14,8 +without_mirrors,2022-07-28,8 +without_mirrors,2022-07-31,8 +with_mirrors,2022-02-13,7 +with_mirrors,2022-05-08,7 +with_mirrors,2022-05-15,7 +with_mirrors,2022-06-26,7 +with_mirrors,2022-06-30,7 +without_mirrors,2022-02-28,7 +without_mirrors,2022-03-23,7 +without_mirrors,2022-03-25,7 +without_mirrors,2022-05-15,7 +without_mirrors,2022-05-30,7 +without_mirrors,2022-06-04,7 +without_mirrors,2022-07-25,7 +with_mirrors,2022-05-16,6 +with_mirrors,2022-05-18,6 +with_mirrors,2022-06-20,6 +without_mirrors,2022-02-16,6 +without_mirrors,2022-02-23,6 +without_mirrors,2022-03-11,6 +without_mirrors,2022-03-19,6 +without_mirrors,2022-03-31,6 +without_mirrors,2022-04-06,6 +without_mirrors,2022-04-11,6 +without_mirrors,2022-04-21,6 +without_mirrors,2022-04-24,6 +without_mirrors,2022-04-26,6 +without_mirrors,2022-05-16,6 +without_mirrors,2022-05-26,6 +without_mirrors,2022-06-01,6 +without_mirrors,2022-06-06,6 +without_mirrors,2022-06-10,6 +without_mirrors,2022-06-11,6 +with_mirrors,2022-05-04,5 +with_mirrors,2022-05-05,5 +with_mirrors,2022-06-07,5 +with_mirrors,2022-06-12,5 +with_mirrors,2022-07-03,5 +without_mirrors,2022-02-01,5 +without_mirrors,2022-02-03,5 +without_mirrors,2022-02-04,5 +without_mirrors,2022-02-05,5 +without_mirrors,2022-02-10,5 +without_mirrors,2022-02-13,5 +without_mirrors,2022-02-25,5 +without_mirrors,2022-03-03,5 +without_mirrors,2022-03-12,5 +without_mirrors,2022-03-20,5 +without_mirrors,2022-03-21,5 +without_mirrors,2022-04-01,5 +without_mirrors,2022-05-04,5 +without_mirrors,2022-05-05,5 +without_mirrors,2022-05-31,5 +without_mirrors,2022-06-07,5 +without_mirrors,2022-06-12,5 +without_mirrors,2022-06-15,5 +without_mirrors,2022-06-24,5 +without_mirrors,2022-06-26,5 +without_mirrors,2022-06-28,5 +without_mirrors,2022-06-30,5 +without_mirrors,2022-07-03,5 +without_mirrors,2022-07-05,5 +with_mirrors,2022-02-11,4 +with_mirrors,2022-05-03,4 +with_mirrors,2022-05-23,4 +with_mirrors,2022-06-02,4 +with_mirrors,2022-06-09,4 +without_mirrors,2022-02-08,4 +without_mirrors,2022-02-09,4 +without_mirrors,2022-03-17,4 +without_mirrors,2022-03-26,4 +without_mirrors,2022-04-05,4 +without_mirrors,2022-04-08,4 +without_mirrors,2022-05-03,4 +without_mirrors,2022-05-06,4 +without_mirrors,2022-05-07,4 +without_mirrors,2022-05-11,4 +without_mirrors,2022-05-23,4 +without_mirrors,2022-06-02,4 +without_mirrors,2022-06-19,4 +without_mirrors,2022-06-20,4 +without_mirrors,2022-07-21,4 +with_mirrors,2022-02-12,3 +with_mirrors,2022-05-09,3 +with_mirrors,2022-07-02,3 +with_mirrors,2022-07-06,3 +with_mirrors,2022-07-13,3 +with_mirrors,2022-07-15,3 +without_mirrors,2022-02-11,3 +without_mirrors,2022-02-12,3 +without_mirrors,2022-02-24,3 +without_mirrors,2022-04-04,3 +without_mirrors,2022-04-07,3 +without_mirrors,2022-04-22,3 +without_mirrors,2022-04-29,3 +without_mirrors,2022-05-02,3 +without_mirrors,2022-05-09,3 +without_mirrors,2022-05-18,3 +without_mirrors,2022-05-24,3 +without_mirrors,2022-05-27,3 +without_mirrors,2022-05-29,3 +without_mirrors,2022-06-18,3 +without_mirrors,2022-06-23,3 +without_mirrors,2022-07-01,3 +without_mirrors,2022-07-02,3 +without_mirrors,2022-07-06,3 +without_mirrors,2022-07-13,3 +without_mirrors,2022-07-15,3 +without_mirrors,2022-07-20,3 +without_mirrors,2022-07-26,3 +without_mirrors,2022-07-27,3 +with_mirrors,2022-02-17,2 +with_mirrors,2022-02-18,2 +with_mirrors,2022-04-25,2 +with_mirrors,2022-05-13,2 +with_mirrors,2022-06-27,2 +with_mirrors,2022-07-11,2 +without_mirrors,2022-02-17,2 +without_mirrors,2022-02-18,2 +without_mirrors,2022-02-19,2 +without_mirrors,2022-03-06,2 +without_mirrors,2022-04-17,2 +without_mirrors,2022-04-25,2 +without_mirrors,2022-04-28,2 +without_mirrors,2022-05-12,2 +without_mirrors,2022-05-13,2 +without_mirrors,2022-05-14,2 +without_mirrors,2022-05-20,2 +without_mirrors,2022-05-28,2 +without_mirrors,2022-06-09,2 +without_mirrors,2022-06-16,2 +without_mirrors,2022-06-22,2 +without_mirrors,2022-06-25,2 +without_mirrors,2022-06-27,2 +without_mirrors,2022-07-08,2 +without_mirrors,2022-07-11,2 +without_mirrors,2022-07-17,2 +with_mirrors,2022-04-18,1 +with_mirrors,2022-05-01,1 +with_mirrors,2022-06-05,1 +with_mirrors,2022-07-04,1 +with_mirrors,2022-07-12,1 +with_mirrors,2022-07-18,1 +without_mirrors,2022-02-02,1 +without_mirrors,2022-04-03,1 +without_mirrors,2022-04-18,1 +without_mirrors,2022-04-23,1 +without_mirrors,2022-04-27,1 +without_mirrors,2022-04-30,1 +without_mirrors,2022-05-01,1 +without_mirrors,2022-05-08,1 +without_mirrors,2022-05-21,1 +without_mirrors,2022-06-05,1 +without_mirrors,2022-06-21,1 +without_mirrors,2022-06-29,1 +without_mirrors,2022-07-04,1 +without_mirrors,2022-07-12,1 +without_mirrors,2022-07-18,1 +with_mirrors,2022-01-12,67 +with_mirrors,2022-01-19,63 +with_mirrors,2022-01-21,53 +with_mirrors,2022-01-22,52 +with_mirrors,2022-01-03,48 +with_mirrors,2022-01-08,48 +with_mirrors,2022-01-24,44 +with_mirrors,2022-01-01,40 +with_mirrors,2022-01-29,32 +with_mirrors,2022-01-16,31 +with_mirrors,2022-01-28,31 +with_mirrors,2022-01-06,30 with_mirrors,2022-01-04,29 +with_mirrors,2022-01-10,28 +with_mirrors,2022-01-14,28 +with_mirrors,2022-01-20,27 +with_mirrors,2022-01-11,26 +with_mirrors,2022-01-05,24 +without_mirrors,2022-01-21,24 +without_mirrors,2022-01-10,23 +with_mirrors,2022-01-02,21 +with_mirrors,2022-01-17,16 +with_mirrors,2022-01-15,14 +with_mirrors,2022-01-13,13 +without_mirrors,2022-01-08,9 +without_mirrors,2022-01-29,9 +with_mirrors,2022-01-23,8 +with_mirrors,2022-01-31,8 +without_mirrors,2022-01-17,8 +without_mirrors,2022-01-31,8 +with_mirrors,2022-01-07,7 +without_mirrors,2022-01-04,6 +without_mirrors,2022-01-24,6 +without_mirrors,2022-01-13,5 +without_mirrors,2022-01-14,5 +without_mirrors,2022-01-19,5 +without_mirrors,2022-01-01,4 +without_mirrors,2022-01-03,4 +without_mirrors,2022-01-15,4 +without_mirrors,2022-01-20,4 +with_mirrors,2022-01-18,3 +with_mirrors,2022-01-25,3 +without_mirrors,2022-01-05,3 +without_mirrors,2022-01-11,3 +without_mirrors,2022-01-18,3 +without_mirrors,2022-01-22,3 +with_mirrors,2022-01-27,2 +with_mirrors,2022-01-30,2 +without_mirrors,2022-01-06,2 +without_mirrors,2022-01-07,2 +without_mirrors,2022-01-12,2 +without_mirrors,2022-01-16,2 +without_mirrors,2022-01-27,2 +without_mirrors,2022-01-30,2 +with_mirrors,2022-01-09,1 +with_mirrors,2022-01-26,1 +without_mirrors,2022-01-02,1 +without_mirrors,2022-01-09,1 +without_mirrors,2022-01-25,1 +without_mirrors,2022-01-26,1 +with_mirrors,2021-12-02,146 +with_mirrors,2021-12-09,136 +with_mirrors,2021-12-08,106 +with_mirrors,2021-12-10,88 +with_mirrors,2021-12-18,84 +with_mirrors,2021-12-16,75 +with_mirrors,2021-12-24,73 +with_mirrors,2021-12-06,66 +with_mirrors,2021-12-17,63 +with_mirrors,2021-12-23,62 +with_mirrors,2021-12-03,50 +with_mirrors,2021-12-22,48 +with_mirrors,2021-12-04,41 +with_mirrors,2021-12-11,37 +without_mirrors,2021-12-04,37 +with_mirrors,2021-12-19,36 +with_mirrors,2021-12-20,35 without_mirrors,2021-12-08,29 -with_mirrors,2021-10-15,28 with_mirrors,2021-12-13,28 with_mirrors,2021-12-15,28 -with_mirrors,2022-01-10,28 -with_mirrors,2022-01-14,28 without_mirrors,2021-12-02,28 without_mirrors,2021-12-09,28 without_mirrors,2021-12-16,28 -without_mirrors,2022-03-13,28 -with_mirrors,2021-09-25,27 -with_mirrors,2022-01-20,27 -without_mirrors,2022-03-08,27 +with_mirrors,2021-12-07,24 +with_mirrors,2021-12-12,23 +with_mirrors,2021-12-29,21 +without_mirrors,2021-12-10,15 +with_mirrors,2021-12-27,13 +with_mirrors,2021-12-31,13 +without_mirrors,2021-12-13,13 +with_mirrors,2021-12-25,12 +with_mirrors,2021-12-21,11 +without_mirrors,2021-12-17,11 +without_mirrors,2021-12-03,10 +with_mirrors,2021-12-05,9 +without_mirrors,2021-12-27,9 +without_mirrors,2021-12-18,8 +without_mirrors,2021-12-22,8 +with_mirrors,2021-12-14,7 +without_mirrors,2021-12-19,7 +without_mirrors,2021-12-20,6 +without_mirrors,2021-12-21,6 +without_mirrors,2021-12-23,6 +without_mirrors,2021-12-06,5 +without_mirrors,2021-12-12,5 +without_mirrors,2021-12-14,5 +without_mirrors,2021-12-15,5 +without_mirrors,2021-12-24,4 +without_mirrors,2021-12-05,3 +without_mirrors,2021-12-07,3 +without_mirrors,2021-12-31,3 +with_mirrors,2021-12-28,2 +without_mirrors,2021-12-11,2 +without_mirrors,2021-12-25,2 +without_mirrors,2021-12-28,2 +without_mirrors,2021-12-29,2 +with_mirrors,2021-12-01,120 +with_mirrors,2021-11-04,46 +with_mirrors,2021-11-17,43 +with_mirrors,2021-11-20,41 +with_mirrors,2021-11-22,39 +with_mirrors,2021-11-14,37 +with_mirrors,2021-11-24,34 +with_mirrors,2021-11-01,33 +with_mirrors,2021-11-02,33 +with_mirrors,2021-11-27,32 +with_mirrors,2021-11-29,31 with_mirrors,2021-11-18,26 -with_mirrors,2022-01-11,26 -with_mirrors,2021-10-29,25 with_mirrors,2021-11-08,25 -with_mirrors,2022-02-19,25 without_mirrors,2021-12-01,25 -with_mirrors,2021-10-28,24 -with_mirrors,2021-10-31,24 -with_mirrors,2021-12-07,24 -with_mirrors,2022-01-05,24 -with_mirrors,2022-02-07,24 -with_mirrors,2022-03-01,24 -with_mirrors,2022-03-03,24 -with_mirrors,2022-03-16,24 -without_mirrors,2022-01-21,24 -without_mirrors,2022-03-01,24 -with_mirrors,2021-10-02,23 with_mirrors,2021-11-13,23 -with_mirrors,2021-12-12,23 -without_mirrors,2022-01-10,23 with_mirrors,2021-11-15,22 -with_mirrors,2021-09-29,21 -with_mirrors,2021-12-29,21 -with_mirrors,2022-01-02,21 -with_mirrors,2021-10-27,20 with_mirrors,2021-11-05,20 with_mirrors,2021-11-16,20 with_mirrors,2021-11-25,20 -with_mirrors,2022-02-02,20 -with_mirrors,2022-02-08,20 -without_mirrors,2021-10-03,20 -without_mirrors,2021-10-04,20 -without_mirrors,2021-10-27,20 without_mirrors,2021-11-16,20 -without_mirrors,2022-02-20,20 -with_mirrors,2021-10-06,19 with_mirrors,2021-11-12,19 with_mirrors,2021-11-30,19 -without_mirrors,2022-02-27,19 -with_mirrors,2021-09-22,18 -with_mirrors,2021-10-21,18 -with_mirrors,2022-02-05,18 -with_mirrors,2021-09-19,17 -with_mirrors,2021-10-08,17 -with_mirrors,2021-10-11,17 -with_mirrors,2021-10-16,17 -with_mirrors,2022-02-28,17 -without_mirrors,2021-10-08,17 without_mirrors,2021-11-04,17 -with_mirrors,2021-09-26,16 -with_mirrors,2021-10-20,16 -with_mirrors,2021-10-30,16 -with_mirrors,2022-01-17,16 -with_mirrors,2022-02-15,16 -without_mirrors,2021-10-30,16 -without_mirrors,2022-03-09,16 -with_mirrors,2021-10-18,15 with_mirrors,2021-11-19,15 -without_mirrors,2021-12-10,15 -with_mirrors,2021-10-26,14 -with_mirrors,2022-01-15,14 -with_mirrors,2022-02-23,14 without_mirrors,2021-11-05,14 without_mirrors,2021-11-22,14 without_mirrors,2021-11-25,14 -without_mirrors,2022-03-14,14 -without_mirrors,2022-03-16,14 -with_mirrors,2021-10-01,13 -with_mirrors,2021-10-09,13 with_mirrors,2021-11-11,13 with_mirrors,2021-11-23,13 -with_mirrors,2021-12-27,13 -with_mirrors,2021-12-31,13 -with_mirrors,2022-01-13,13 -with_mirrors,2022-02-16,13 without_mirrors,2021-11-12,13 -without_mirrors,2021-12-13,13 -without_mirrors,2022-03-05,13 -with_mirrors,2021-12-25,12 -with_mirrors,2022-02-26,12 -without_mirrors,2021-10-26,12 -without_mirrors,2021-10-31,12 -without_mirrors,2022-02-26,12 with_mirrors,2021-11-03,11 -with_mirrors,2021-12-21,11 -with_mirrors,2022-02-01,11 without_mirrors,2021-11-01,11 without_mirrors,2021-11-03,11 without_mirrors,2021-11-15,11 without_mirrors,2021-11-17,11 without_mirrors,2021-11-20,11 -without_mirrors,2021-12-17,11 with_mirrors,2021-11-28,10 -without_mirrors,2021-10-29,10 without_mirrors,2021-11-02,10 -without_mirrors,2021-12-03,10 -without_mirrors,2022-02-07,10 -with_mirrors,2021-10-13,9 with_mirrors,2021-11-10,9 -with_mirrors,2021-12-05,9 -without_mirrors,2021-10-28,9 without_mirrors,2021-11-10,9 without_mirrors,2021-11-19,9 without_mirrors,2021-11-30,9 -without_mirrors,2021-12-27,9 -without_mirrors,2022-01-08,9 -without_mirrors,2022-01-29,9 -with_mirrors,2021-09-27,8 -with_mirrors,2021-10-05,8 -with_mirrors,2022-01-23,8 -with_mirrors,2022-01-31,8 -without_mirrors,2021-10-02,8 without_mirrors,2021-11-13,8 without_mirrors,2021-11-29,8 -without_mirrors,2021-12-18,8 -without_mirrors,2021-12-22,8 -without_mirrors,2022-01-17,8 -without_mirrors,2022-01-31,8 -without_mirrors,2022-02-06,8 -without_mirrors,2022-02-14,8 -without_mirrors,2022-02-15,8 with_mirrors,2021-11-21,7 -with_mirrors,2021-12-14,7 -with_mirrors,2022-01-07,7 -with_mirrors,2022-02-13,7 -without_mirrors,2021-09-30,7 -without_mirrors,2021-10-01,7 -without_mirrors,2021-10-05,7 without_mirrors,2021-11-11,7 without_mirrors,2021-11-14,7 without_mirrors,2021-11-18,7 without_mirrors,2021-11-21,7 without_mirrors,2021-11-23,7 without_mirrors,2021-11-24,7 -without_mirrors,2021-12-19,7 -without_mirrors,2022-02-28,7 with_mirrors,2021-11-09,6 -without_mirrors,2021-09-29,6 without_mirrors,2021-11-08,6 without_mirrors,2021-11-09,6 -without_mirrors,2021-12-20,6 -without_mirrors,2021-12-21,6 -without_mirrors,2021-12-23,6 -without_mirrors,2022-01-04,6 -without_mirrors,2022-01-24,6 -without_mirrors,2022-02-16,6 -without_mirrors,2022-02-23,6 -without_mirrors,2022-03-11,6 -with_mirrors,2021-10-19,5 -with_mirrors,2021-10-23,5 with_mirrors,2021-11-06,5 -without_mirrors,2021-09-21,5 -without_mirrors,2021-09-27,5 -without_mirrors,2021-10-09,5 -without_mirrors,2021-10-19,5 -without_mirrors,2021-10-22,5 -without_mirrors,2021-10-23,5 without_mirrors,2021-11-06,5 without_mirrors,2021-11-27,5 -without_mirrors,2021-12-06,5 -without_mirrors,2021-12-12,5 -without_mirrors,2021-12-14,5 -without_mirrors,2021-12-15,5 -without_mirrors,2022-01-13,5 -without_mirrors,2022-01-14,5 -without_mirrors,2022-01-19,5 -without_mirrors,2022-02-01,5 -without_mirrors,2022-02-03,5 -without_mirrors,2022-02-04,5 -without_mirrors,2022-02-05,5 -without_mirrors,2022-02-10,5 -without_mirrors,2022-02-13,5 -without_mirrors,2022-02-25,5 -without_mirrors,2022-03-03,5 -without_mirrors,2022-03-12,5 with_mirrors,2021-11-07,4 -with_mirrors,2022-02-11,4 -without_mirrors,2021-09-25,4 -without_mirrors,2021-10-06,4 without_mirrors,2021-11-07,4 without_mirrors,2021-11-28,4 -without_mirrors,2021-12-24,4 -without_mirrors,2022-01-01,4 -without_mirrors,2022-01-03,4 -without_mirrors,2022-01-15,4 -without_mirrors,2022-01-20,4 -without_mirrors,2022-02-08,4 -without_mirrors,2022-02-09,4 with_mirrors,2021-11-26,3 -with_mirrors,2022-01-18,3 -with_mirrors,2022-01-25,3 -with_mirrors,2022-02-12,3 +without_mirrors,2021-11-26,3 +with_mirrors,2021-10-04,67 +with_mirrors,2021-10-03,35 +with_mirrors,2021-10-22,35 +with_mirrors,2021-10-25,35 +with_mirrors,2021-10-17,32 +with_mirrors,2021-10-15,28 +with_mirrors,2021-10-29,25 +with_mirrors,2021-10-28,24 +with_mirrors,2021-10-31,24 +with_mirrors,2021-10-02,23 +with_mirrors,2021-10-27,20 +without_mirrors,2021-10-03,20 +without_mirrors,2021-10-04,20 +without_mirrors,2021-10-27,20 +with_mirrors,2021-10-06,19 +with_mirrors,2021-10-21,18 +with_mirrors,2021-10-08,17 +with_mirrors,2021-10-11,17 +with_mirrors,2021-10-16,17 +without_mirrors,2021-10-08,17 +with_mirrors,2021-10-20,16 +with_mirrors,2021-10-30,16 +without_mirrors,2021-10-30,16 +with_mirrors,2021-10-18,15 +with_mirrors,2021-10-26,14 +with_mirrors,2021-10-09,13 +without_mirrors,2021-10-26,12 +without_mirrors,2021-10-31,12 +without_mirrors,2021-10-29,10 +with_mirrors,2021-10-13,9 +without_mirrors,2021-10-28,9 +with_mirrors,2021-10-05,8 +without_mirrors,2021-10-02,8 +without_mirrors,2021-10-05,7 +with_mirrors,2021-10-19,5 +with_mirrors,2021-10-23,5 +without_mirrors,2021-10-09,5 +without_mirrors,2021-10-19,5 +without_mirrors,2021-10-22,5 +without_mirrors,2021-10-23,5 +without_mirrors,2021-10-06,4 without_mirrors,2021-10-13,3 without_mirrors,2021-10-15,3 without_mirrors,2021-10-25,3 -without_mirrors,2021-11-26,3 -without_mirrors,2021-12-05,3 -without_mirrors,2021-12-07,3 -without_mirrors,2021-12-31,3 -without_mirrors,2022-01-05,3 -without_mirrors,2022-01-11,3 -without_mirrors,2022-01-18,3 -without_mirrors,2022-01-22,3 -without_mirrors,2022-02-11,3 -without_mirrors,2022-02-12,3 -without_mirrors,2022-02-24,3 -with_mirrors,2021-09-17,2 -with_mirrors,2021-09-18,2 -with_mirrors,2021-09-24,2 with_mirrors,2021-10-07,2 with_mirrors,2021-10-10,2 -with_mirrors,2021-12-28,2 -with_mirrors,2022-01-27,2 -with_mirrors,2022-01-30,2 -with_mirrors,2022-02-17,2 -with_mirrors,2022-02-18,2 -without_mirrors,2021-09-17,2 -without_mirrors,2021-09-18,2 -without_mirrors,2021-09-19,2 -without_mirrors,2021-09-24,2 -without_mirrors,2021-09-28,2 without_mirrors,2021-10-07,2 without_mirrors,2021-10-10,2 without_mirrors,2021-10-11,2 without_mirrors,2021-10-16,2 without_mirrors,2021-10-17,2 without_mirrors,2021-10-21,2 -without_mirrors,2021-12-11,2 -without_mirrors,2021-12-25,2 -without_mirrors,2021-12-28,2 -without_mirrors,2021-12-29,2 -without_mirrors,2022-01-06,2 -without_mirrors,2022-01-07,2 -without_mirrors,2022-01-12,2 -without_mirrors,2022-01-16,2 -without_mirrors,2022-01-27,2 -without_mirrors,2022-01-30,2 -without_mirrors,2022-02-17,2 -without_mirrors,2022-02-18,2 -without_mirrors,2022-02-19,2 -without_mirrors,2022-03-06,2 -with_mirrors,2022-01-09,1 -with_mirrors,2022-01-26,1 +without_mirrors,2021-10-20,1 +with_mirrors,2021-09-20,72 +with_mirrors,2021-09-21,50 +without_mirrors,2021-09-20,36 +with_mirrors,2021-09-28,32 +with_mirrors,2021-09-23,30 +with_mirrors,2021-09-30,29 +with_mirrors,2021-09-25,27 +with_mirrors,2021-09-29,21 +with_mirrors,2021-09-22,18 +with_mirrors,2021-09-19,17 +with_mirrors,2021-09-26,16 +with_mirrors,2021-10-01,13 +with_mirrors,2021-09-27,8 +without_mirrors,2021-09-30,7 +without_mirrors,2021-10-01,7 +without_mirrors,2021-09-29,6 +without_mirrors,2021-09-21,5 +without_mirrors,2021-09-27,5 +without_mirrors,2021-09-25,4 +with_mirrors,2021-09-17,2 +with_mirrors,2021-09-18,2 +with_mirrors,2021-09-24,2 +without_mirrors,2021-09-17,2 +without_mirrors,2021-09-18,2 +without_mirrors,2021-09-19,2 +without_mirrors,2021-09-24,2 +without_mirrors,2021-09-28,2 without_mirrors,2021-09-22,1 without_mirrors,2021-09-26,1 -without_mirrors,2021-10-20,1 -without_mirrors,2022-01-02,1 -without_mirrors,2022-01-09,1 -without_mirrors,2022-01-25,1 -without_mirrors,2022-01-26,1 -without_mirrors,2022-02-02,1 with_mirrors,2021-07-06,63 with_mirrors,2021-08-16,62 with_mirrors,2021-07-20,57 diff --git a/doc/source/tracking/pypistats/get_pypi_stats.py b/doc/source/tracking/pypistats/get_pypi_stats.py index c5340e448..b8ff990ff 100644 --- a/doc/source/tracking/pypistats/get_pypi_stats.py +++ b/doc/source/tracking/pypistats/get_pypi_stats.py @@ -36,7 +36,7 @@ exist_sysdownloads["category"] = exist_sysdownloads["category"].fillna("null") sysdl_data = sysdownloads.merge( exist_sysdownloads, how="outer", on=["category", "date", "downloads"] -).reindex() +) # .reindex() removed 8/30/2022 to see if it makes for cleaner PRs # except: # dl_data = sysdownloads diff --git a/doc/source/tracking/pypistats/sys_downloads_data.csv b/doc/source/tracking/pypistats/sys_downloads_data.csv index 95ebd07ae..4b6036b6b 100644 --- a/doc/source/tracking/pypistats/sys_downloads_data.csv +++ b/doc/source/tracking/pypistats/sys_downloads_data.csv @@ -1,204 +1,163 @@ category,date,downloads +null,2022-03-18,77 null,2022-03-10,64 null,2022-02-21,60 null,2022-03-07,47 null,2022-02-22,40 null,2022-03-02,38 -null,2021-12-04,37 null,2022-03-04,37 -null,2021-09-20,32 +null,2022-07-29,35 +null,2022-05-10,29 +null,2022-03-30,28 +null,2022-07-10,27 null,2022-03-15,26 -null,2021-12-02,25 -null,2021-12-08,24 -null,2021-12-09,24 +null,2022-03-27,25 +null,2022-04-02,25 +null,2022-06-14,25 +Linux,2022-03-28,24 null,2022-03-13,24 null,2022-03-01,23 -null,2021-12-16,21 -null,2022-01-10,20 null,2022-02-20,20 -Linux,2021-10-03,19 -null,2021-12-01,19 null,2022-02-27,19 null,2022-03-08,19 -Linux,2021-10-04,18 -null,2021-10-08,16 -null,2021-10-27,16 -null,2021-11-16,15 -null,2022-01-21,13 +null,2022-05-17,16 +null,2022-07-30,16 +null,2022-07-23,14 +Windows,2022-04-14,14 null,2022-03-05,13 -Linux,2021-10-31,11 -Linux,2021-11-03,11 -Linux,2021-11-04,11 -Linux,2021-11-05,11 -Linux,2021-11-15,11 -Linux,2021-11-25,11 +null,2022-06-13,13 +Windows,2022-06-08,13 +null,2022-03-24,12 null,2022-02-26,11 -Linux,2021-10-30,10 -Linux,2022-01-21,10 -Linux,2021-10-29,9 +null,2022-07-22,11 +Linux,2022-03-18,10 +Windows,2022-07-09,10 Linux,2022-03-07,9 -null,2021-12-10,9 -null,2022-01-08,9 null,2022-03-09,9 Windows,2022-02-07,9 -Linux,2021-11-10,8 -Linux,2021-11-13,8 -Linux,2021-11-17,8 -Linux,2021-11-22,8 Linux,2022-03-04,8 -null,2021-12-13,8 -null,2022-01-29,8 -Linux,2021-10-02,7 -Linux,2021-11-12,7 -Linux,2021-11-14,7 -Linux,2021-11-19,7 -Linux,2021-11-20,7 -null,2021-12-03,7 +Linux,2022-07-07,8 +Windows,2022-03-29,8 +Linux,2022-05-25,7 null,2022-02-06,7 -Linux,2021-10-01,6 -Linux,2021-10-05,6 -Linux,2021-11-02,6 -Linux,2021-11-09,6 -Linux,2021-11-29,6 -Linux,2021-12-01,6 -Linux,2021-12-18,6 -Linux,2021-12-22,6 +null,2022-04-15,7 +null,2022-04-19,7 Linux,2022-03-02,6 -null,2021-11-01,6 +Linux,2022-03-22,6 +Linux,2022-06-11,6 null,2022-02-16,6 null,2022-03-16,6 -Linux,2021-10-26,5 -Linux,2021-11-11,5 -Linux,2021-11-21,5 -Linux,2021-11-23,5 -Linux,2021-11-30,5 -Linux,2021-12-16,5 -Linux,2021-12-17,5 -Linux,2022-01-17,5 +null,2022-04-12,6 +null,2022-04-13,6 +null,2022-06-04,6 +null,2022-07-31,6 +Windows,2022-04-11,6 Linux,2022-03-16,5 -null,2021-11-12,5 -null,2021-12-19,5 -null,2021-12-27,5 -null,2022-01-14,5 +Linux,2022-06-03,5 +Linux,2022-07-25,5 +Linux,2022-07-29,5 null,2022-02-14,5 null,2022-03-14,5 -Windows,2021-11-22,5 -Linux,2021-09-27,4 -Linux,2021-10-23,4 -Linux,2021-10-27,4 -Linux,2021-10-28,4 -Linux,2021-11-01,4 -Linux,2021-11-08,4 -Linux,2021-11-18,4 -Linux,2021-11-28,4 -Linux,2021-12-08,4 -Linux,2021-12-10,4 -Linux,2021-12-20,4 -Linux,2021-12-21,4 -Linux,2022-01-04,4 -Linux,2022-01-19,4 +null,2022-05-15,5 +null,2022-05-16,5 +null,2022-05-19,5 +null,2022-07-19,5 +Windows,2022-03-24,5 +Windows,2022-04-06,5 +Windows,2022-05-04,5 +Windows,2022-07-14,5 +Windows,2022-07-23,5 Linux,2022-02-23,4 Linux,2022-03-08,4 Linux,2022-03-09,4 -null,2021-10-26,4 -null,2021-10-30,4 -null,2021-11-24,4 -null,2021-12-12,4 -null,2022-01-01,4 -null,2022-01-31,4 +Linux,2022-03-23,4 +Linux,2022-03-24,4 +Linux,2022-05-23,4 +Linux,2022-06-06,4 +Linux,2022-06-07,4 +Linux,2022-06-12,4 +Linux,2022-06-14,4 +Linux,2022-06-15,4 +Linux,2022-06-17,4 null,2022-02-13,4 null,2022-02-15,4 null,2022-03-11,4 -Windows,2021-09-30,4 -Windows,2021-12-27,4 +null,2022-04-24,4 +null,2022-04-26,4 +null,2022-06-01,4 +null,2022-07-28,4 Windows,2022-02-15,4 Windows,2022-03-08,4 Windows,2022-03-12,4 Windows,2022-03-14,4 -Linux,2021-09-21,3 -Linux,2021-09-29,3 -Linux,2021-10-06,3 -Linux,2021-11-06,3 -Linux,2021-11-07,3 -Linux,2021-11-16,3 -Linux,2021-11-24,3 -Linux,2021-11-26,3 -Linux,2021-11-27,3 -Linux,2021-12-14,3 -Linux,2022-01-31,3 +Windows,2022-03-19,4 +Windows,2022-03-22,4 +Windows,2022-03-31,4 +Windows,2022-05-10,4 +Windows,2022-05-11,4 Linux,2022-02-28,3 Linux,2022-03-13,3 Linux,2022-03-14,3 -null,2021-10-09,3 -null,2021-10-22,3 -null,2021-10-28,3 -null,2021-11-04,3 -null,2021-11-30,3 -null,2021-12-05,3 -null,2021-12-06,3 -null,2021-12-17,3 -null,2021-12-23,3 -null,2022-01-13,3 -null,2022-01-17,3 -null,2022-01-22,3 -null,2022-01-24,3 +Linux,2022-03-17,3 +Linux,2022-03-25,3 +Linux,2022-03-26,3 +Linux,2022-03-29,3 +Linux,2022-05-03,3 +Linux,2022-05-07,3 +Linux,2022-05-26,3 +Linux,2022-05-31,3 +Linux,2022-06-19,3 +Linux,2022-06-20,3 +Linux,2022-06-26,3 +Linux,2022-06-28,3 +Linux,2022-07-19,3 +Linux,2022-07-20,3 +Linux,2022-07-28,3 null,2022-02-12,3 null,2022-02-25,3 null,2022-03-03,3 -Windows,2021-09-20,3 -Windows,2021-11-04,3 -Windows,2021-11-17,3 -Windows,2021-12-09,3 -Windows,2021-12-13,3 -Windows,2021-12-17,3 +null,2022-03-20,3 +null,2022-03-21,3 +null,2022-04-08,3 +null,2022-05-26,3 +null,2022-06-03,3 +null,2022-06-17,3 Windows,2022-02-03,3 Windows,2022-02-10,3 Windows,2022-03-09,3 Windows,2022-03-15,3 Windows,2022-03-16,3 +Windows,2022-03-28,3 +Windows,2022-04-12,3 +Windows,2022-04-15,3 +Windows,2022-04-21,3 +Windows,2022-04-29,3 +Windows,2022-05-06,3 +Windows,2022-05-19,3 +Windows,2022-06-24,3 +Windows,2022-07-21,3 Darwin,2022-02-01,2 Darwin,2022-03-14,2 -Linux,2021-09-25,2 -Linux,2021-10-10,2 -Linux,2021-10-11,2 -Linux,2021-10-15,2 -Linux,2021-10-19,2 -Linux,2021-10-22,2 -Linux,2021-12-06,2 -Linux,2021-12-07,2 -Linux,2021-12-13,2 -Linux,2021-12-15,2 -Linux,2021-12-19,2 -Linux,2021-12-23,2 -Linux,2021-12-28,2 -Linux,2021-12-31,2 -Linux,2022-01-05,2 -Linux,2022-01-13,2 -Linux,2022-01-15,2 -Linux,2022-01-24,2 +Darwin,2022-05-30,2 +Darwin,2022-06-10,2 Linux,2022-02-03,2 Linux,2022-02-05,2 Linux,2022-02-08,2 Linux,2022-02-14,2 Linux,2022-03-15,2 -null,2021-09-18,2 -null,2021-09-25,2 -null,2021-09-30,2 -null,2021-10-13,2 -null,2021-10-19,2 -null,2021-11-02,2 -null,2021-11-19,2 -null,2021-11-25,2 -null,2021-11-29,2 -null,2021-12-11,2 -null,2021-12-14,2 -null,2021-12-24,2 -null,2021-12-29,2 -null,2022-01-03,2 -null,2022-01-04,2 -null,2022-01-11,2 -null,2022-01-15,2 -null,2022-01-20,2 +Linux,2022-03-20,2 +Linux,2022-03-21,2 +Linux,2022-04-04,2 +Linux,2022-04-12,2 +Linux,2022-04-26,2 +Linux,2022-06-16,2 +Linux,2022-06-24,2 +Linux,2022-06-30,2 +Linux,2022-07-02,2 +Linux,2022-07-05,2 +Linux,2022-07-06,2 +Linux,2022-07-10,2 +Linux,2022-07-26,2 null,2022-02-01,2 null,2022-02-04,2 null,2022-02-09,2 @@ -206,70 +165,78 @@ null,2022-02-11,2 null,2022-02-17,2 null,2022-02-19,2 null,2022-02-28,2 -Windows,2021-09-29,2 -Windows,2021-10-25,2 -Windows,2021-10-26,2 -Windows,2021-10-28,2 -Windows,2021-10-30,2 -Windows,2021-11-02,2 -Windows,2021-11-05,2 -Windows,2021-11-11,2 -Windows,2021-11-16,2 -Windows,2021-11-20,2 -Windows,2021-11-21,2 -Windows,2021-12-02,2 -Windows,2021-12-03,2 -Windows,2021-12-10,2 -Windows,2021-12-15,2 -Windows,2021-12-16,2 -Windows,2021-12-25,2 -Windows,2022-01-10,2 -Windows,2022-01-20,2 +null,2022-04-14,2 +null,2022-04-21,2 +null,2022-05-05,2 +null,2022-05-14,2 +null,2022-05-18,2 +null,2022-05-29,2 +null,2022-05-30,2 +null,2022-06-02,2 +null,2022-06-08,2 +null,2022-06-26,2 +null,2022-06-30,2 +null,2022-07-03,2 +null,2022-07-05,2 +null,2022-07-14,2 +null,2022-07-17,2 +null,2022-07-27,2 Windows,2022-02-04,2 Windows,2022-02-05,2 Windows,2022-02-28,2 Windows,2022-03-02,2 Windows,2022-03-07,2 Windows,2022-03-11,2 -Darwin,2021-09-21,1 -Darwin,2021-10-04,1 -Darwin,2021-10-26,1 -Darwin,2021-11-07,1 -Darwin,2021-11-10,1 -Darwin,2021-11-18,1 -Darwin,2021-11-20,1 -Darwin,2022-01-07,1 -Darwin,2022-01-30,1 +Windows,2022-03-23,2 +Windows,2022-03-25,2 +Windows,2022-03-27,2 +Windows,2022-04-01,2 +Windows,2022-04-02,2 +Windows,2022-04-05,2 +Windows,2022-04-07,2 +Windows,2022-04-13,2 +Windows,2022-04-22,2 +Windows,2022-05-05,2 +Windows,2022-05-27,2 +Windows,2022-05-30,2 +Windows,2022-06-01,2 +Windows,2022-06-02,2 +Windows,2022-06-06,2 +Windows,2022-06-09,2 +Windows,2022-06-10,2 +Windows,2022-06-14,2 +Windows,2022-06-22,2 +Windows,2022-06-23,2 +Windows,2022-06-25,2 +Windows,2022-06-28,2 +Windows,2022-07-01,2 +Windows,2022-07-03,2 +Windows,2022-07-10,2 +Windows,2022-07-15,2 +Windows,2022-07-25,2 +Windows,2022-07-31,2 Darwin,2022-02-07,1 Darwin,2022-02-18,1 Darwin,2022-02-21,1 Darwin,2022-03-04,1 Darwin,2022-03-07,1 -Linux,2021-09-19,1 -Linux,2021-09-20,1 -Linux,2021-09-22,1 -Linux,2021-09-24,1 -Linux,2021-09-26,1 -Linux,2021-09-28,1 -Linux,2021-09-30,1 -Linux,2021-10-07,1 -Linux,2021-10-08,1 -Linux,2021-10-09,1 -Linux,2021-10-13,1 -Linux,2021-10-17,1 -Linux,2021-10-25,1 -Linux,2021-12-02,1 -Linux,2021-12-03,1 -Linux,2021-12-09,1 -Linux,2021-12-24,1 -Linux,2022-01-02,1 -Linux,2022-01-03,1 -Linux,2022-01-06,1 -Linux,2022-01-10,1 -Linux,2022-01-18,1 -Linux,2022-01-26,1 -Linux,2022-01-27,1 -Linux,2022-01-29,1 +Darwin,2022-03-22,1 +Darwin,2022-03-25,1 +Darwin,2022-03-29,1 +Darwin,2022-03-30,1 +Darwin,2022-03-31,1 +Darwin,2022-04-01,1 +Darwin,2022-04-05,1 +Darwin,2022-04-14,1 +Darwin,2022-05-02,1 +Darwin,2022-05-09,1 +Darwin,2022-05-10,1 +Darwin,2022-05-12,1 +Darwin,2022-05-13,1 +Darwin,2022-05-24,1 +Darwin,2022-07-04,1 +Darwin,2022-07-05,1 +Darwin,2022-07-29,1 Linux,2022-02-01,1 Linux,2022-02-04,1 Linux,2022-02-06,1 @@ -285,90 +252,81 @@ Linux,2022-03-03,1 Linux,2022-03-06,1 Linux,2022-03-10,1 Linux,2022-03-12,1 -null,2021-09-17,1 -null,2021-09-19,1 -null,2021-09-24,1 -null,2021-09-27,1 -null,2021-09-29,1 -null,2021-10-01,1 -null,2021-10-03,1 -null,2021-10-05,1 -null,2021-10-07,1 -null,2021-10-15,1 -null,2021-10-16,1 -null,2021-10-17,1 -null,2021-10-20,1 -null,2021-10-21,1 -null,2021-10-23,1 -null,2021-10-31,1 -null,2021-11-05,1 -null,2021-11-06,1 -null,2021-11-08,1 -null,2021-11-18,1 -null,2021-11-20,1 -null,2021-11-22,1 -null,2021-11-23,1 -null,2021-11-27,1 -null,2021-12-07,1 -null,2021-12-15,1 -null,2021-12-18,1 -null,2021-12-20,1 -null,2021-12-21,1 -null,2021-12-22,1 -null,2022-01-06,1 -null,2022-01-09,1 -null,2022-01-12,1 -null,2022-01-16,1 -null,2022-01-18,1 -null,2022-01-19,1 -null,2022-01-25,1 -null,2022-01-30,1 +Linux,2022-03-19,1 +Linux,2022-03-31,1 +Linux,2022-04-01,1 +Linux,2022-04-19,1 +Linux,2022-04-21,1 +Linux,2022-04-24,1 +Linux,2022-05-02,1 +Linux,2022-05-05,1 +Linux,2022-05-06,1 +Linux,2022-05-08,1 +Linux,2022-05-09,1 +Linux,2022-05-10,1 +Linux,2022-05-15,1 +Linux,2022-05-16,1 +Linux,2022-05-24,1 +Linux,2022-05-27,1 +Linux,2022-05-28,1 +Linux,2022-05-29,1 +Linux,2022-05-30,1 +Linux,2022-06-08,1 +Linux,2022-06-10,1 +Linux,2022-06-13,1 +Linux,2022-06-18,1 +Linux,2022-06-27,1 +Linux,2022-07-03,1 +Linux,2022-07-08,1 +Linux,2022-07-11,1 +Linux,2022-07-13,1 +Linux,2022-07-14,1 +Linux,2022-07-15,1 +Linux,2022-07-21,1 +Linux,2022-07-22,1 +Linux,2022-07-23,1 +Linux,2022-07-30,1 null,2022-02-05,1 null,2022-02-08,1 null,2022-02-10,1 null,2022-02-23,1 null,2022-02-24,1 null,2022-03-06,1 -Windows,2021-09-17,1 -Windows,2021-09-21,1 -Windows,2021-09-28,1 -Windows,2021-10-02,1 -Windows,2021-10-04,1 -Windows,2021-10-06,1 -Windows,2021-10-09,1 -Windows,2021-10-16,1 -Windows,2021-10-19,1 -Windows,2021-10-21,1 -Windows,2021-10-29,1 -Windows,2021-11-01,1 -Windows,2021-11-06,1 -Windows,2021-11-08,1 -Windows,2021-11-12,1 -Windows,2021-11-18,1 -Windows,2021-11-23,1 -Windows,2021-11-25,1 -Windows,2021-11-27,1 -Windows,2021-11-30,1 -Windows,2021-12-08,1 -Windows,2021-12-12,1 -Windows,2021-12-18,1 -Windows,2021-12-20,1 -Windows,2021-12-21,1 -Windows,2021-12-22,1 -Windows,2021-12-23,1 -Windows,2021-12-24,1 -Windows,2021-12-31,1 -Windows,2022-01-03,1 -Windows,2022-01-05,1 -Windows,2022-01-07,1 -Windows,2022-01-11,1 -Windows,2022-01-12,1 -Windows,2022-01-16,1 -Windows,2022-01-18,1 -Windows,2022-01-21,1 -Windows,2022-01-24,1 -Windows,2022-01-27,1 -Windows,2022-01-31,1 +null,2022-03-17,1 +null,2022-03-19,1 +null,2022-03-22,1 +null,2022-03-23,1 +null,2022-03-25,1 +null,2022-03-26,1 +null,2022-04-01,1 +null,2022-04-05,1 +null,2022-04-06,1 +null,2022-04-07,1 +null,2022-04-17,1 +null,2022-04-18,1 +null,2022-04-22,1 +null,2022-04-25,1 +null,2022-04-28,1 +null,2022-04-30,1 +null,2022-05-01,1 +null,2022-05-07,1 +null,2022-05-20,1 +null,2022-05-31,1 +null,2022-06-05,1 +null,2022-06-07,1 +null,2022-06-10,1 +null,2022-06-18,1 +null,2022-06-19,1 +null,2022-06-20,1 +null,2022-06-21,1 +null,2022-06-23,1 +null,2022-06-27,1 +null,2022-07-01,1 +null,2022-07-07,1 +null,2022-07-11,1 +null,2022-07-12,1 +null,2022-07-13,1 +null,2022-07-26,1 Windows,2022-02-02,1 Windows,2022-02-08,1 Windows,2022-02-09,1 @@ -383,6 +341,328 @@ Windows,2022-03-01,1 Windows,2022-03-03,1 Windows,2022-03-04,1 Windows,2022-03-13,1 +Windows,2022-03-30,1 +Windows,2022-04-03,1 +Windows,2022-04-04,1 +Windows,2022-04-08,1 +Windows,2022-04-17,1 +Windows,2022-04-19,1 +Windows,2022-04-23,1 +Windows,2022-04-24,1 +Windows,2022-04-25,1 +Windows,2022-04-27,1 +Windows,2022-04-28,1 +Windows,2022-05-02,1 +Windows,2022-05-03,1 +Windows,2022-05-09,1 +Windows,2022-05-12,1 +Windows,2022-05-13,1 +Windows,2022-05-15,1 +Windows,2022-05-17,1 +Windows,2022-05-18,1 +Windows,2022-05-20,1 +Windows,2022-05-21,1 +Windows,2022-05-24,1 +Windows,2022-05-25,1 +Windows,2022-05-28,1 +Windows,2022-05-31,1 +Windows,2022-06-03,1 +Windows,2022-06-04,1 +Windows,2022-06-12,1 +Windows,2022-06-13,1 +Windows,2022-06-15,1 +Windows,2022-06-17,1 +Windows,2022-06-18,1 +Windows,2022-06-29,1 +Windows,2022-06-30,1 +Windows,2022-07-02,1 +Windows,2022-07-06,1 +Windows,2022-07-08,1 +Windows,2022-07-13,1 +Windows,2022-07-18,1 +Windows,2022-07-19,1 +Windows,2022-07-22,1 +Windows,2022-07-27,1 +Windows,2022-07-28,1 +Windows,2022-07-29,1 +null,2022-01-10,20 +null,2022-01-21,13 +Linux,2022-01-21,10 +null,2022-01-08,9 +null,2022-01-29,8 +Linux,2022-01-17,5 +null,2022-01-14,5 +Linux,2022-01-04,4 +Linux,2022-01-19,4 +null,2022-01-01,4 +null,2022-01-31,4 +Linux,2022-01-31,3 +null,2022-01-13,3 +null,2022-01-17,3 +null,2022-01-22,3 +null,2022-01-24,3 +Linux,2022-01-05,2 +Linux,2022-01-13,2 +Linux,2022-01-15,2 +Linux,2022-01-24,2 +null,2022-01-03,2 +null,2022-01-04,2 +null,2022-01-11,2 +null,2022-01-15,2 +null,2022-01-20,2 +Windows,2022-01-10,2 +Windows,2022-01-20,2 +Darwin,2022-01-07,1 +Darwin,2022-01-30,1 +Linux,2022-01-02,1 +Linux,2022-01-03,1 +Linux,2022-01-06,1 +Linux,2022-01-10,1 +Linux,2022-01-18,1 +Linux,2022-01-26,1 +Linux,2022-01-27,1 +Linux,2022-01-29,1 +null,2022-01-06,1 +null,2022-01-09,1 +null,2022-01-12,1 +null,2022-01-16,1 +null,2022-01-18,1 +null,2022-01-19,1 +null,2022-01-25,1 +null,2022-01-30,1 +Windows,2022-01-03,1 +Windows,2022-01-05,1 +Windows,2022-01-07,1 +Windows,2022-01-11,1 +Windows,2022-01-12,1 +Windows,2022-01-16,1 +Windows,2022-01-18,1 +Windows,2022-01-21,1 +Windows,2022-01-24,1 +Windows,2022-01-27,1 +Windows,2022-01-31,1 +null,2021-12-04,37 +null,2021-12-02,25 +null,2021-12-08,24 +null,2021-12-09,24 +null,2021-12-16,21 +null,2021-12-10,9 +null,2021-12-13,8 +null,2021-12-03,7 +Linux,2021-12-18,6 +Linux,2021-12-22,6 +Linux,2021-12-16,5 +Linux,2021-12-17,5 +null,2021-12-19,5 +null,2021-12-27,5 +Linux,2021-12-08,4 +Linux,2021-12-10,4 +Linux,2021-12-20,4 +Linux,2021-12-21,4 +null,2021-12-12,4 +Windows,2021-12-27,4 +Linux,2021-12-14,3 +null,2021-12-05,3 +null,2021-12-06,3 +null,2021-12-17,3 +null,2021-12-23,3 +Windows,2021-12-09,3 +Windows,2021-12-13,3 +Windows,2021-12-17,3 +Linux,2021-12-06,2 +Linux,2021-12-07,2 +Linux,2021-12-13,2 +Linux,2021-12-15,2 +Linux,2021-12-19,2 +Linux,2021-12-23,2 +Linux,2021-12-28,2 +Linux,2021-12-31,2 +null,2021-12-11,2 +null,2021-12-14,2 +null,2021-12-24,2 +null,2021-12-29,2 +Windows,2021-12-02,2 +Windows,2021-12-03,2 +Windows,2021-12-10,2 +Windows,2021-12-15,2 +Windows,2021-12-16,2 +Windows,2021-12-25,2 +Linux,2021-12-02,1 +Linux,2021-12-03,1 +Linux,2021-12-09,1 +Linux,2021-12-24,1 +null,2021-12-07,1 +null,2021-12-15,1 +null,2021-12-18,1 +null,2021-12-20,1 +null,2021-12-21,1 +null,2021-12-22,1 +Windows,2021-12-08,1 +Windows,2021-12-12,1 +Windows,2021-12-18,1 +Windows,2021-12-20,1 +Windows,2021-12-21,1 +Windows,2021-12-22,1 +Windows,2021-12-23,1 +Windows,2021-12-24,1 +Windows,2021-12-31,1 +null,2021-12-01,19 +null,2021-11-16,15 +Linux,2021-11-03,11 +Linux,2021-11-04,11 +Linux,2021-11-05,11 +Linux,2021-11-15,11 +Linux,2021-11-25,11 +Linux,2021-11-10,8 +Linux,2021-11-13,8 +Linux,2021-11-17,8 +Linux,2021-11-22,8 +Linux,2021-11-12,7 +Linux,2021-11-14,7 +Linux,2021-11-19,7 +Linux,2021-11-20,7 +Linux,2021-11-02,6 +Linux,2021-11-09,6 +Linux,2021-11-29,6 +Linux,2021-12-01,6 +null,2021-11-01,6 +Linux,2021-11-11,5 +Linux,2021-11-21,5 +Linux,2021-11-23,5 +Linux,2021-11-30,5 +null,2021-11-12,5 +Windows,2021-11-22,5 +Linux,2021-11-01,4 +Linux,2021-11-08,4 +Linux,2021-11-18,4 +Linux,2021-11-28,4 +null,2021-11-24,4 +Linux,2021-11-06,3 +Linux,2021-11-07,3 +Linux,2021-11-16,3 +Linux,2021-11-24,3 +Linux,2021-11-26,3 +Linux,2021-11-27,3 +null,2021-11-04,3 +null,2021-11-30,3 +Windows,2021-11-04,3 +Windows,2021-11-17,3 +null,2021-11-02,2 +null,2021-11-19,2 +null,2021-11-25,2 +null,2021-11-29,2 +Windows,2021-11-02,2 +Windows,2021-11-05,2 +Windows,2021-11-11,2 +Windows,2021-11-16,2 +Windows,2021-11-20,2 +Windows,2021-11-21,2 +Darwin,2021-11-07,1 +Darwin,2021-11-10,1 +Darwin,2021-11-18,1 +Darwin,2021-11-20,1 +null,2021-11-05,1 +null,2021-11-06,1 +null,2021-11-08,1 +null,2021-11-18,1 +null,2021-11-20,1 +null,2021-11-22,1 +null,2021-11-23,1 +null,2021-11-27,1 +Windows,2021-11-01,1 +Windows,2021-11-06,1 +Windows,2021-11-08,1 +Windows,2021-11-12,1 +Windows,2021-11-18,1 +Windows,2021-11-23,1 +Windows,2021-11-25,1 +Windows,2021-11-27,1 +Windows,2021-11-30,1 +Linux,2021-10-03,19 +Linux,2021-10-04,18 +null,2021-10-08,16 +null,2021-10-27,16 +Linux,2021-10-31,11 +Linux,2021-10-30,10 +Linux,2021-10-29,9 +Linux,2021-10-02,7 +Linux,2021-10-05,6 +Linux,2021-10-26,5 +Linux,2021-10-23,4 +Linux,2021-10-27,4 +Linux,2021-10-28,4 +null,2021-10-26,4 +null,2021-10-30,4 +Linux,2021-10-06,3 +null,2021-10-09,3 +null,2021-10-22,3 +null,2021-10-28,3 +Linux,2021-10-10,2 +Linux,2021-10-11,2 +Linux,2021-10-15,2 +Linux,2021-10-19,2 +Linux,2021-10-22,2 +null,2021-10-13,2 +null,2021-10-19,2 +Windows,2021-10-25,2 +Windows,2021-10-26,2 +Windows,2021-10-28,2 +Windows,2021-10-30,2 +Darwin,2021-10-04,1 +Darwin,2021-10-26,1 +Linux,2021-10-07,1 +Linux,2021-10-08,1 +Linux,2021-10-09,1 +Linux,2021-10-13,1 +Linux,2021-10-17,1 +Linux,2021-10-25,1 +null,2021-10-03,1 +null,2021-10-05,1 +null,2021-10-07,1 +null,2021-10-15,1 +null,2021-10-16,1 +null,2021-10-17,1 +null,2021-10-20,1 +null,2021-10-21,1 +null,2021-10-23,1 +null,2021-10-31,1 +Windows,2021-10-02,1 +Windows,2021-10-04,1 +Windows,2021-10-06,1 +Windows,2021-10-09,1 +Windows,2021-10-16,1 +Windows,2021-10-19,1 +Windows,2021-10-21,1 +Windows,2021-10-29,1 +null,2021-09-20,32 +Linux,2021-10-01,6 +Linux,2021-09-27,4 +Windows,2021-09-30,4 +Linux,2021-09-21,3 +Linux,2021-09-29,3 +Windows,2021-09-20,3 +Linux,2021-09-25,2 +null,2021-09-18,2 +null,2021-09-25,2 +null,2021-09-30,2 +Windows,2021-09-29,2 +Darwin,2021-09-21,1 +Linux,2021-09-19,1 +Linux,2021-09-20,1 +Linux,2021-09-22,1 +Linux,2021-09-24,1 +Linux,2021-09-26,1 +Linux,2021-09-28,1 +Linux,2021-09-30,1 +null,2021-09-17,1 +null,2021-09-19,1 +null,2021-09-24,1 +null,2021-09-27,1 +null,2021-09-29,1 +null,2021-10-01,1 +Windows,2021-09-17,1 +Windows,2021-09-21,1 +Windows,2021-09-28,1 null,2021-06-30,21 null,2021-07-26,20 null,2021-07-25,17 diff --git a/doc/source/tracking/traffic/clones.csv b/doc/source/tracking/traffic/clones.csv index 819c41e43..adbed85be 100644 --- a/doc/source/tracking/traffic/clones.csv +++ b/doc/source/tracking/traffic/clones.csv @@ -323,8 +323,8 @@ _date,total_clones,unique_clones 2021-12-16,23,12 2021-12-17,1,1 2021-12-18,1,1 -2021-12-20,49,18 2021-12-20,1,1 +2021-12-20,49,18 2021-12-21,52,24 2021-12-22,2,2 2021-12-23,17,9 @@ -386,8 +386,152 @@ _date,total_clones,unique_clones 2022-03-05,13,8 2022-03-06,15,9 2022-03-07,58,22 +2022-03-07,57,22 2022-03-08,22,10 2022-03-09,12,8 2022-03-10,2,1 2022-03-11,6,4 2022-03-12,2,1 +2022-03-14,10,4 +2022-03-14,11,5 +2022-03-16,90,21 +2022-03-17,129,43 +2022-03-18,34,15 +2022-03-19,2,2 +2022-03-20,17,1 +2022-03-21,3,3 +2022-03-21,4,4 +2022-03-22,3,3 +2022-03-23,1,1 +2022-03-24,1,1 +2022-03-25,2,2 +2022-03-27,2,1 +2022-03-28,1,1 +2022-03-28,2,2 +2022-04-01,1,1 +2022-04-02,1,1 +2022-04-04,1,1 +2022-04-04,3,3 +2022-04-05,3,2 +2022-04-06,1,1 +2022-04-08,1,1 +2022-04-09,2,2 +2022-04-11,2,2 +2022-04-11,1,1 +2022-04-15,1,1 +2022-04-16,2,2 +2022-04-17,4,2 +2022-04-18,1,1 +2022-04-18,2,2 +2022-04-24,1,1 +2022-04-25,1,1 +2022-04-25,3,3 +2022-04-26,3,2 +2022-04-28,5,4 +2022-04-29,13,7 +2022-04-30,5,3 +2022-05-01,2,2 +2022-05-02,3,3 +2022-05-02,1,1 +2022-05-04,9,5 +2022-05-05,18,7 +2022-05-06,1,1 +2022-05-09,1,1 +2022-05-09,2,2 +2022-05-11,1,1 +2022-05-12,1,1 +2022-05-13,13,5 +2022-05-14,1,1 +2022-05-16,11,7 +2022-05-16,13,8 +2022-05-17,1,1 +2022-05-18,2,1 +2022-05-20,29,12 +2022-05-21,2,1 +2022-05-23,43,19 +2022-05-23,42,19 +2022-05-24,12,8 +2022-05-25,99,29 +2022-05-26,42,17 +2022-05-27,5,3 +2022-05-30,2,2 +2022-05-30,1,1 +2022-05-31,3,2 +2022-06-01,2,2 +2022-06-03,46,2 +2022-06-04,4,2 +2022-06-05,1,1 +2022-06-06,1,1 +2022-06-06,2,2 +2022-06-07,18,2 +2022-06-09,1,1 +2022-06-10,1,1 +2022-06-11,1,1 +2022-06-13,7,5 +2022-06-13,8,6 +2022-06-14,36,19 +2022-06-16,1,1 +2022-06-17,4,3 +2022-06-20,25,6 +2022-06-20,5,4 +2022-06-21,29,13 +2022-06-22,1,1 +2022-06-25,4,3 +2022-06-26,3,2 +2022-06-27,10,6 +2022-06-27,11,6 +2022-06-29,3,2 +2022-06-30,6,3 +2022-07-01,2,2 +2022-07-03,1,1 +2022-07-04,4,3 +2022-07-04,5,4 +2022-07-05,7,4 +2022-07-06,4,2 +2022-07-07,41,19 +2022-07-08,3,3 +2022-07-11,30,14 +2022-07-11,31,15 +2022-07-12,1,1 +2022-07-13,7,4 +2022-07-15,18,9 +2022-07-17,1,1 +2022-07-18,3,3 +2022-07-18,2,2 +2022-07-20,2,2 +2022-07-21,69,24 +2022-07-22,7,5 +2022-07-24,1,1 +2022-07-25,1,1 +2022-07-25,2,2 +2022-07-26,28,11 +2022-07-27,17,10 +2022-07-28,2,2 +2022-07-29,23,13 +2022-07-30,1,1 +2022-07-31,1,1 +2022-08-01,5,4 +2022-08-02,1,1 +2022-08-03,13,6 +2022-08-05,3,3 +2022-08-06,2,1 +2022-08-08,2,2 +2022-08-08,1,1 +2022-08-09,4,2 +2022-08-10,13,7 +2022-08-11,17,2 +2022-08-12,16,1 +2022-08-13,2,1 +2022-08-14,2,1 +2022-08-15,31,14 +2022-08-15,32,15 +2022-08-16,60,25 +2022-08-17,1,1 +2022-08-18,34,16 +2022-08-19,4,2 +2022-08-20,1,1 +2022-08-22,6,3 +2022-08-24,5,3 +2022-08-25,1,1 +2022-08-26,315,44 +2022-08-28,7,4 diff --git a/doc/source/tracking/traffic/plots.svg b/doc/source/tracking/traffic/plots.svg index 07ae1ebf0..1eb547e9a 100644 --- a/doc/source/tracking/traffic/plots.svg +++ b/doc/source/tracking/traffic/plots.svg @@ -6,11 +6,11 @@ - 2022-03-14T00:39:32.763785 + 2022-08-29T01:00:16.160434 image/svg+xml - Matplotlib v3.5.1, https://matplotlib.org/ + Matplotlib v3.5.3, https://matplotlib.org/ @@ -41,12 +41,12 @@ z - - + @@ -136,61 +136,12 @@ z - + - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - + + - + - + - + @@ -292,128 +221,53 @@ z - - + + - + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -426,55 +280,55 @@ z - + - - + + - + - - - + + + - + - - + + - - + + - + - - - + + + - + - - + + - + @@ -601,819 +455,1070 @@ z - + - - + - + - + - + - + - - - - + + + + + - + - + - - - - + + + + - + - + - - - - - + + + + + - - + + - - + + - + - + @@ -1693,13 +1798,13 @@ z - + - + @@ -1781,13 +1886,13 @@ z " style="fill: #ffffff"/> - - + + - + - + @@ -1803,15 +1908,15 @@ z - - + + - + - + - + @@ -1825,15 +1930,42 @@ z - - + + - + - + - + + + + @@ -1847,53 +1979,44 @@ z - - + + - + - + - + - @@ -1910,15 +2033,15 @@ z - - + + - + - - - + + + @@ -1928,19 +2051,19 @@ z - + - - + + - + - - - + + + @@ -1949,12 +2072,73 @@ z - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1967,12 +2151,12 @@ z - + - + - + @@ -1980,12 +2164,12 @@ z - + - + - + @@ -1995,12 +2179,12 @@ z - + - + - + @@ -2010,12 +2194,12 @@ z - + - + - + @@ -2025,1005 +2209,1321 @@ z - + +L 116.118506 231.910431 +L 116.873377 229.498947 +L 117.628247 244.771675 +L 118.383117 251.470239 +L 119.137987 239.412823 +L 119.892857 239.14488 +L 120.647727 235.393684 +L 121.402597 239.14488 +L 122.157468 239.948708 +L 122.912338 250.666411 +L 123.667208 248.522871 +L 124.422078 247.719043 +L 125.176948 239.948708 +L 125.931818 213.690335 +L 126.686688 227.355407 +L 127.441558 244.235789 +L 128.196429 247.4511 +L 128.951299 251.202297 +L 130.461039 225.747751 +L 131.215909 246.111388 +L 131.970779 243.699904 +L 132.725649 237.537225 +L 133.480519 237.537225 +L 134.23539 249.862584 +L 134.99026 237.805167 +L 135.74513 234.321914 +L 136.5 243.967847 +L 137.25487 243.967847 +L 138.00974 239.412823 +L 138.76461 247.183158 +L 139.519481 249.326699 +L 140.274351 227.623349 +L 141.029221 249.058756 +L 141.784091 248.254928 +L 142.538961 249.862584 +L 143.293831 247.986986 +L 144.048701 251.470239 +L 144.803571 251.470239 +L 145.558442 229.231005 +L 146.313312 217.173589 +L 147.068182 244.235789 +L 147.823052 245.575502 +L 148.577922 227.891292 +L 149.332792 250.934354 +L 150.087662 245.30756 +L 150.842532 242.092249 +L 151.597403 246.37933 +L 152.352273 237.00134 +L 153.107143 247.183158 +L 153.862013 250.934354 +L 154.616883 251.738182 +L 155.371753 244.235789 +L 156.126623 242.628134 +L 156.881494 242.896077 +L 157.636364 241.556364 +L 158.391234 249.058756 +L 159.146104 250.934354 +L 159.900974 250.666411 +L 160.655844 247.4511 +L 161.410714 247.986986 +L 162.165584 243.164019 +L 162.920455 250.130526 +L 163.675325 251.202297 +L 164.430195 251.470239 +L 165.185065 248.522871 +L 165.939935 249.594641 +L 166.694805 250.398469 +L 167.449675 251.738182 +L 168.204545 247.4511 +L 168.959416 247.719043 +L 169.714286 250.934354 +L 170.469156 246.647273 +L 171.224026 243.164019 +L 171.978896 240.752536 +L 172.733766 247.986986 +L 173.488636 249.058756 +L 174.243506 233.518086 +L 174.998377 250.398469 +L 175.753247 235.125742 +L 176.508117 236.733397 +L 177.262987 240.752536 +L 178.017857 234.589856 +L 178.772727 247.183158 +L 179.527597 235.929569 +L 180.282468 251.202297 +L 181.037338 234.857799 +L 181.792208 236.197512 +L 182.547078 228.159234 +L 183.301948 233.786029 +L 184.056818 240.752536 +L 184.811688 243.431962 +L 185.566558 248.522871 +L 186.321429 230.302775 +L 187.076299 226.015694 +L 187.831169 237.269282 +L 188.586039 235.929569 +L 189.340909 233.518086 +L 190.095779 247.719043 +L 190.850649 248.790813 +L 191.605519 231.374545 +L 192.36039 247.183158 +L 193.87013 234.321914 +L 195.37987 250.934354 +L 196.13474 247.986986 +L 196.88961 236.465455 +L 197.644481 235.929569 +L 198.399351 226.819522 +L 199.154221 242.628134 +L 199.909091 250.398469 +L 200.663961 250.666411 +L 201.418831 249.326699 +L 202.173701 243.164019 +L 202.928571 243.431962 +L 203.683442 247.183158 +L 204.438312 232.178373 +L 205.193182 248.522871 +L 205.948052 242.628134 +L 206.702922 239.948708 +L 207.457792 241.556364 +L 208.212662 227.087464 +L 208.967532 236.733397 +L 209.722403 235.929569 +L 210.477273 240.752536 +L 211.232143 239.14488 +L 211.987013 240.216651 +L 212.741883 187.431962 +L 213.496753 246.111388 +L 214.251623 232.178373 +L 215.006494 235.661627 +L 215.761364 228.427177 +L 216.516234 242.360191 +L 217.271104 202.972632 +L 218.025974 201.364976 +L 218.780844 206.99177 +L 219.535714 230.570718 +L 220.290584 178.321914 +L 221.045455 225.211866 +L 221.800325 246.37933 +L 222.555195 245.575502 +L 223.310065 238.341053 +L 224.064935 232.446316 +L 224.819805 229.231005 +L 225.574675 235.661627 +L 226.329545 225.479809 +L 227.084416 244.235789 +L 227.839286 246.111388 +L 228.594156 208.063541 +L 229.349026 233.786029 +L 230.103896 235.393684 +L 230.858766 246.647273 +L 231.613636 248.790813 +L 232.368506 248.254928 +L 233.123377 234.053971 +L 233.878247 187.967847 +L 234.633117 231.106603 +L 235.387987 235.393684 +L 236.142857 216.369761 +L 236.897727 244.771675 +L 237.652597 248.522871 +L 238.407468 245.30756 +L 239.162338 223.604211 +L 239.917208 239.412823 +L 240.672078 224.943923 +L 241.426948 203.240574 +L 242.181818 234.857799 +L 242.936688 241.824306 +L 243.691558 246.37933 +L 244.446429 180.465455 +L 245.201299 228.963062 +L 245.956169 243.967847 +L 246.711039 236.197512 +L 247.465909 237.537225 +L 248.220779 249.058756 +L 248.975649 247.183158 +L 249.730519 191.183158 +L 250.48539 184.752536 +L 251.24026 201.364976 +L 251.99513 243.431962 +L 252.75 249.326699 +L 253.50487 237.537225 +L 254.25974 247.719043 +L 255.769481 226.015694 +L 256.524351 167.336268 +L 257.279221 223.872153 +L 258.034091 223.068325 +L 258.788961 227.623349 +L 259.543831 245.843445 +L 260.298701 246.647273 +L 261.053571 221.996555 +L 261.808442 237.00134 +L 262.563312 236.733397 +L 263.318182 227.891292 +L 264.073052 243.699904 +L 264.827922 249.326699 +L 265.582792 201.097033 +L 266.337662 238.07311 +L 267.092532 215.030048 +L 267.847403 209.135311 +L 268.602273 215.565933 +L 269.357143 249.862584 +L 270.112013 249.862584 +L 270.866883 224.140096 +L 271.621753 234.053971 +L 272.376623 233.518086 +L 273.131494 239.680766 +L 273.886364 243.164019 +L 274.641234 248.522871 +L 275.396104 246.37933 +L 276.150974 227.355407 +L 276.905844 244.503732 +L 277.660714 241.020478 +L 278.415584 233.250144 +L 279.170455 239.412823 +L 279.925325 249.862584 +L 280.680195 249.862584 +L 281.435065 243.431962 +L 282.189935 240.752536 +L 282.944805 246.647273 +L 283.699675 241.824306 +L 284.454545 243.967847 +L 285.209416 249.326699 +L 285.964286 247.719043 +L 286.719156 232.178373 +L 287.474026 237.269282 +L 288.228896 172.69512 +L 288.983766 215.833876 +L 289.738636 244.503732 +L 290.493506 242.628134 +L 291.248377 250.130526 +L 292.003247 233.250144 +L 292.758117 235.125742 +L 293.512987 242.360191 +L 294.267857 241.556364 +L 295.022727 236.465455 +L 295.777597 249.862584 +L 296.532468 250.398469 +L 297.287338 196.274067 +L 298.042208 239.948708 +L 298.797078 245.30756 +L 299.551948 247.4511 +L 300.306818 204.312344 +L 301.061688 247.4511 +L 301.816558 248.254928 +L 303.326299 242.360191 +L 304.081169 242.628134 +L 304.836039 225.479809 +L 305.590909 244.771675 +L 306.345779 249.862584 +L 307.100649 243.967847 +L 307.855519 245.575502 +L 308.61039 183.948708 +L 309.36526 200.293206 +L 310.12013 241.020478 +L 311.62987 245.039617 +L 312.38474 244.503732 +L 313.13961 232.714258 +L 313.894481 242.628134 +L 314.649351 243.699904 +L 315.404221 223.872153 +L 316.159091 239.948708 +L 316.913961 250.398469 +L 317.668831 251.738182 +L 318.423701 245.039617 +L 319.178571 245.575502 +L 319.933442 246.915215 +L 320.688312 243.967847 +L 321.443182 246.37933 +L 322.198052 249.594641 +L 322.952922 251.202297 +L 323.707792 243.967847 +L 324.462662 243.699904 +L 325.217532 231.910431 +L 325.972403 230.302775 +L 326.727273 250.666411 +L 327.482143 246.37933 +L 328.237013 251.738182 +L 328.991883 239.680766 +L 329.746753 240.752536 +L 330.501623 243.164019 +L 331.256494 240.484593 +L 332.011364 248.522871 +L 332.766234 245.843445 +L 333.521104 250.130526 +L 334.275974 237.537225 +L 335.030844 239.412823 +L 335.785714 244.235789 +L 336.540584 241.288421 +L 337.295455 232.446316 +L 338.050325 242.360191 +L 338.805195 248.522871 +L 339.560065 233.518086 +L 340.314935 250.398469 +L 341.069805 246.111388 +L 341.824675 244.503732 +L 342.579545 251.202297 +L 343.334416 250.934354 +L 344.089286 245.039617 +L 344.844156 245.575502 +L 345.599026 233.250144 +L 346.353896 231.642488 +L 347.108766 249.058756 +L 347.863636 249.862584 +L 348.618506 250.398469 +L 349.373377 242.628134 +L 350.128247 228.159234 +L 350.883117 236.465455 +L 351.637987 236.197512 +L 352.392857 245.30756 +L 353.147727 249.862584 +L 353.902597 245.843445 +L 354.657468 246.647273 +L 355.412338 249.862584 +L 356.167208 237.269282 +L 356.922078 247.719043 +L 357.676948 242.628134 +L 358.431818 226.015694 +L 359.186688 250.934354 +L 359.941558 248.254928 +L 360.696429 233.786029 +L 361.451299 216.905646 +L 362.206169 236.733397 +L 362.961039 248.254928 +L 363.715909 247.719043 +L 364.470779 250.398469 +L 365.225649 246.647273 +L 365.980519 232.178373 +L 366.73539 230.570718 +L 367.49026 221.46067 +L 368.24513 233.786029 +L 369 248.522871 +L 369.75487 251.470239 +L 370.50974 248.522871 +L 371.26461 249.862584 +L 372.019481 239.948708 +L 372.774351 189.575502 +L 373.529221 229.498947 +L 374.284091 242.628134 +L 375.038961 241.020478 +L 375.793831 230.83866 +L 376.548701 230.83866 +L 377.303571 220.924785 +L 378.058442 198.417608 +L 378.813312 217.441531 +L 379.568182 246.37933 +L 380.323052 250.666411 +L 381.077922 224.675981 +L 381.832792 228.159234 +L 382.587662 212.618565 +L 383.342532 240.216651 +L 384.097403 236.197512 +L 384.852273 246.111388 +L 385.607143 248.254928 +L 386.362013 215.565933 +L 387.116883 238.608995 +L 387.871753 249.594641 +L 388.626623 223.604211 +L 389.381494 164.924785 +L 390.136364 240.484593 +L 390.891234 235.929569 +L 391.646104 227.891292 +L 392.400974 228.963062 +L 393.155844 242.896077 +L 393.910714 232.446316 +L 394.665584 238.876938 +L 395.420455 246.915215 +L 396.175325 245.843445 +L 396.930195 235.929569 +L 397.685065 249.058756 +L 398.439935 243.431962 +L 399.194805 229.498947 +L 400.704545 250.934354 +L 401.459416 250.130526 +L 402.214286 245.039617 +L 402.969156 231.642488 +L 403.724026 240.752536 +L 404.478896 247.183158 +L 405.233766 247.986986 +L 405.988636 247.986986 +L 406.743506 248.790813 +L 407.498377 239.412823 +L 408.253247 235.661627 +L 409.008117 243.967847 +L 410.517857 237.537225 +L 411.272727 250.130526 +L 412.027597 249.862584 +L 412.782468 234.589856 +L 413.537338 232.982201 +L 414.292208 245.575502 +L 415.801948 250.934354 +L 416.556818 248.522871 +L 417.311688 247.719043 +L 418.066558 244.503732 +L 418.821429 228.69512 +L 419.576299 238.341053 +L 420.331169 238.876938 +L 421.086039 226.819522 +L 421.840909 249.862584 +L 422.595779 228.159234 +L 423.350649 237.269282 +L 424.105519 202.972632 +L 424.86039 239.948708 +L 425.61526 221.996555 +L 426.37013 247.4511 +L 427.125 248.254928 +L 427.87987 230.034833 +L 428.63474 208.599426 +L 429.38961 234.589856 +L 430.144481 237.269282 +L 430.899351 243.431962 +L 431.654221 233.250144 +L 432.409091 249.058756 +L 433.163961 217.173589 +L 433.918831 235.929569 +L 434.673701 239.948708 +L 435.428571 242.628134 +L 436.183442 242.896077 +L 436.938312 246.915215 +L 437.693182 249.058756 +L 438.448052 245.843445 +L 439.202922 248.790813 +L 439.957792 250.934354 +L 440.712662 249.594641 +L 441.467532 249.326699 +L 442.222403 246.915215 +L 442.977273 217.709474 +L 444.487013 242.092249 +L 445.241883 243.164019 +L 445.996753 249.862584 +L 446.751623 250.934354 +L 447.506494 251.738182 +L 449.016234 236.733397 +L 449.771104 241.288421 +L 450.525974 219.585072 +L 451.280844 246.915215 +L 452.035714 246.111388 +L 452.790584 250.934354 +L 453.545455 247.719043 +L 454.300325 239.412823 +L 455.055195 244.771675 +L 455.810065 242.092249 +L 456.564935 245.843445 +L 457.319805 250.666411 +L 458.074675 250.130526 +L 458.829545 219.585072 +L 459.584416 220.120957 +L 460.339286 235.929569 +L 461.094156 247.719043 +L 461.849026 217.441531 +L 462.603896 246.915215 +L 463.358766 235.929569 +L 464.113636 212.886507 +L 464.868506 238.07311 +L 465.623377 209.939139 +L 466.378247 198.68555 +L 467.133117 232.714258 +L 467.887987 250.666411 +L 468.642857 249.862584 +L 469.397727 196.809952 +L 470.152597 208.867368 +L 470.907468 223.872153 +L 471.662338 224.675981 +L 472.417208 179.125742 +L 473.172078 243.967847 +L 473.926948 245.575502 +L 474.681818 217.441531 +L 475.436688 226.015694 +L 476.191558 242.628134 +L 476.946429 240.752536 +L 477.701299 226.283636 +L 478.456169 247.719043 +L 479.211039 249.862584 +L 479.965909 225.747751 +L 480.720779 235.929569 +L 481.475649 223.336268 +L 482.230519 232.178373 +L 482.98539 216.369761 +L 483.74026 239.680766 +L 484.49513 248.254928 +L 485.25 222.264498 +L 486.00487 228.427177 +L 486.75974 231.910431 +L 487.51461 227.623349 +L 488.269481 185.824306 +L 489.024351 223.872153 +L 489.779221 241.288421 +L 490.534091 160.101818 +L 491.288961 200.829091 +L 492.043831 224.943923 +L 492.798701 241.288421 +L 493.553571 239.680766 +L 494.308442 243.967847 +L 495.063312 247.4511 +L 495.818182 211.814737 +L 496.573052 223.068325 +L 497.327922 209.671196 +L 498.082792 213.15445 +L 498.837662 225.211866 +L 499.592532 250.130526 +L 500.347403 249.594641 +L 501.102273 213.422392 +L 501.857143 235.661627 +L 502.612013 222.53244 +L 503.366883 230.570718 +L 504.121753 235.393684 +L 504.876623 242.896077 +L 505.631494 247.719043 +L 506.386364 229.76689 +L 507.141234 236.197512 +L 507.896104 216.637703 +L 508.650974 214.22622 +L 509.405844 242.896077 +L 510.160714 249.058756 +L 510.915584 251.738182 +L 511.670455 239.680766 +L 512.425325 237.805167 +L 513.180195 243.699904 +L 513.935065 235.661627 +L 514.689935 244.235789 +L 515.444805 249.326699 +L 516.199675 250.130526 +L 516.954545 242.896077 +L 517.709416 234.589856 +L 518.464286 247.986986 +L 519.219156 247.986986 +L 519.974026 243.967847 +L 520.728896 240.752536 +L 521.483766 229.498947 +L 522.238636 239.14488 +L 522.993506 238.608995 +L 523.748377 246.37933 +L 525.258117 247.4511 +L 526.012987 250.398469 +L 526.767857 248.790813 +L 528.277597 232.178373 +L 529.032468 234.857799 +L 529.787338 242.896077 +L 530.542208 235.661627 +L 531.297078 249.862584 +L 532.051948 251.470239 +L 532.806818 243.699904 +L 533.561688 246.37933 +L 534.316558 233.786029 +L 535.071429 213.15445 +L 535.826299 244.235789 +L 536.581169 250.666411 +L 537.336039 249.326699 +L 538.090909 240.484593 +L 538.845779 236.733397 +L 539.600649 239.412823 +L 540.355519 238.341053 +L 541.11039 234.857799 +L 541.86526 250.934354 +L 542.62013 241.288421 +L 543.375 228.159234 +L 544.12987 226.819522 +L 544.88474 245.575502 +L 545.63961 248.254928 +L 546.394481 211.278852 +L 547.149351 247.986986 +L 547.904221 250.666411 +L 548.659091 227.891292 +L 549.413961 246.111388 +L 550.168831 221.192727 +L 550.923701 229.498947 +L 551.678571 246.111388 +L 552.433442 251.470239 +L 553.188312 251.470239 +L 553.943182 249.862584 +L 554.698052 244.503732 +L 555.452922 245.843445 +L 556.207792 243.431962 +L 556.962662 251.470239 +L 557.717532 249.862584 +L 558.472403 251.738182 +L 559.227273 245.575502 +L 559.982143 247.986986 +L 560.737013 244.771675 +L 561.491883 243.164019 +L 562.246753 250.666411 +L 563.001623 251.202297 +L 563.756494 241.020478 +L 564.511364 220.656842 +L 565.266234 245.843445 +L 566.021104 246.111388 +L 566.775974 240.484593 +L 567.530844 248.254928 +L 568.285714 251.470239 +L 569.040584 247.4511 +L 569.795455 247.986986 +L 570.550325 241.556364 +L 571.305195 243.699904 +L 572.060065 244.235789 +L 572.814935 249.326699 +L 573.569805 251.470239 +L 574.324675 251.202297 +L 575.079545 243.164019 +L 575.834416 243.967847 +L 576.589286 247.4511 +L 577.344156 237.537225 +L 578.099026 249.058756 +L 578.853896 250.934354 +L 579.608766 248.790813 +L 580.363636 250.934354 +L 581.118506 239.14488 +L 582.628247 227.623349 +L 583.383117 228.427177 +L 584.137987 247.719043 +L 584.892857 249.594641 +L 585.647727 222.800383 +L 586.402597 221.728612 +L 587.157468 238.07311 +L 587.912338 246.647273 +L 588.667208 243.699904 +L 589.422078 234.589856 +L 590.176948 251.202297 +L 590.931818 246.111388 +L 591.686688 238.876938 +L 592.441558 247.4511 +L 593.196429 228.159234 +L 593.951299 234.321914 +L 594.706169 250.934354 +L 595.461039 251.470239 +L 596.215909 250.130526 +L 596.970779 239.948708 +L 597.725649 241.556364 +L 598.480519 248.790813 +L 599.23539 231.106603 +L 599.99026 249.594641 +L 600.74513 251.470239 +L 601.5 249.058756 +L 602.25487 249.326699 +L 603.00974 249.058756 +L 603.76461 241.020478 +L 604.519481 247.183158 +L 605.274351 241.288421 +L 606.029221 249.326699 +L 606.784091 251.738182 +L 607.538961 248.254928 +L 608.293831 227.087464 +L 609.048701 246.915215 +L 609.803571 241.824306 +L 610.558442 247.719043 +L 611.313312 249.862584 +L 612.068182 251.470239 +L 612.823052 244.771675 +L 613.577922 215.833876 +L 614.332792 249.862584 +L 615.087662 226.551579 +L 615.842532 243.164019 +L 616.597403 251.738182 +L 617.352273 251.470239 +L 618.107143 250.130526 +L 618.862013 248.254928 +L 619.616883 238.876938 +L 620.371753 242.092249 +L 621.126623 203.240574 +L 621.881494 249.862584 +L 622.636364 249.326699 +L 622.636364 249.326699 +" clip-path="url(#p9f83e84885)" style="fill: none; stroke: #1f77b4; stroke-width: 1.5; stroke-linecap: square"/> - + +L 116.118506 249.594641 +L 116.873377 248.522871 +L 117.628247 249.594641 +L 118.383117 251.738182 +L 119.137987 250.130526 +L 119.892857 249.326699 +L 120.647727 249.326699 +L 121.402597 249.058756 +L 122.157468 249.594641 +L 122.912338 251.470239 +L 125.931818 249.326699 +L 126.686688 249.058756 +L 127.441558 250.130526 +L 128.951299 251.738182 +L 129.706169 249.058756 +L 130.461039 249.594641 +L 131.215909 250.666411 +L 131.970779 250.934354 +L 132.725649 250.666411 +L 133.480519 251.470239 +L 134.23539 251.202297 +L 134.99026 250.130526 +L 135.74513 251.202297 +L 136.5 249.058756 +L 137.25487 249.862584 +L 138.00974 250.398469 +L 138.76461 251.202297 +L 139.519481 251.202297 +L 140.274351 247.719043 +L 141.029221 251.470239 +L 141.784091 251.470239 +L 142.538961 251.202297 +L 144.048701 251.738182 +L 144.803571 251.470239 +L 145.558442 249.594641 +L 146.313312 247.183158 +L 147.068182 248.790813 +L 147.823052 250.130526 +L 148.577922 250.130526 +L 149.332792 251.470239 +L 150.087662 250.398469 +L 150.842532 250.130526 +L 151.597403 250.934354 +L 152.352273 247.986986 +L 153.107143 249.594641 +L 153.862013 251.470239 +L 154.616883 251.738182 +L 155.371753 249.326699 +L 156.881494 249.326699 +L 157.636364 250.130526 +L 158.391234 250.398469 +L 159.146104 251.202297 +L 159.900974 251.470239 +L 160.655844 250.934354 +L 161.410714 250.666411 +L 162.165584 251.202297 +L 163.675325 251.202297 +L 164.430195 251.470239 +L 165.185065 250.934354 +L 166.694805 250.934354 +L 167.449675 251.738182 +L 168.204545 251.202297 +L 168.959416 251.202297 +L 169.714286 250.934354 +L 170.469156 249.862584 +L 171.224026 248.254928 +L 171.978896 250.130526 +L 172.733766 251.202297 +L 173.488636 250.934354 +L 174.243506 250.934354 +L 174.998377 251.202297 +L 175.753247 249.594641 +L 176.508117 248.790813 +L 177.262987 249.862584 +L 178.017857 247.183158 +L 178.772727 249.862584 +L 179.527597 250.398469 +L 180.282468 251.202297 +L 181.037338 250.666411 +L 181.792208 250.666411 +L 182.547078 248.522871 +L 183.301948 249.594641 +L 184.056818 249.326699 +L 184.811688 249.326699 +L 185.566558 250.398469 +L 186.321429 246.37933 +L 187.076299 247.986986 +L 187.831169 249.326699 +L 188.586039 247.719043 +L 189.340909 246.647273 +L 190.095779 250.934354 +L 190.850649 250.666411 +L 191.605519 248.790813 +L 192.36039 250.130526 +L 193.11526 248.254928 +L 193.87013 249.594641 +L 194.625 249.594641 +L 195.37987 250.934354 +L 196.13474 251.202297 +L 196.88961 249.058756 +L 197.644481 248.254928 +L 198.399351 248.522871 +L 199.154221 250.934354 +L 199.909091 251.470239 +L 201.418831 250.934354 +L 202.173701 250.934354 +L 202.928571 249.594641 +L 203.683442 250.398469 +L 204.438312 249.058756 +L 205.193182 250.934354 +L 205.948052 250.398469 +L 206.702922 250.934354 +L 207.457792 249.326699 +L 208.212662 249.058756 +L 208.967532 249.058756 +L 209.722403 248.254928 +L 210.477273 250.398469 +L 211.232143 250.934354 +L 211.987013 250.934354 +L 212.741883 242.896077 +L 213.496753 249.058756 +L 214.251623 249.058756 +L 215.006494 247.719043 +L 215.761364 249.326699 +L 216.516234 250.666411 +L 217.271104 250.666411 +L 218.025974 246.647273 +L 218.780844 246.915215 +L 219.535714 248.522871 +L 220.290584 246.915215 +L 221.045455 247.719043 +L 221.800325 250.130526 +L 222.555195 250.934354 +L 223.310065 247.719043 +L 224.064935 246.37933 +L 224.819805 247.4511 +L 225.574675 247.719043 +L 227.084416 251.202297 +L 227.839286 250.130526 +L 228.594156 247.986986 +L 229.349026 247.986986 +L 230.103896 248.790813 +L 230.858766 250.666411 +L 232.368506 251.202297 +L 233.123377 250.130526 +L 233.878247 246.647273 +L 234.633117 247.4511 +L 235.387987 248.790813 +L 236.142857 247.183158 +L 236.897727 249.862584 +L 237.652597 251.202297 +L 239.162338 249.594641 +L 239.917208 248.522871 +L 240.672078 248.790813 +L 241.426948 247.719043 +L 242.181818 249.326699 +L 242.936688 249.594641 +L 243.691558 250.934354 +L 244.446429 245.843445 +L 245.201299 248.254928 +L 245.956169 249.058756 +L 246.711039 249.326699 +L 247.465909 249.326699 +L 248.220779 250.934354 +L 248.975649 250.398469 +L 249.730519 246.111388 +L 250.48539 244.771675 +L 251.24026 247.183158 +L 251.99513 249.058756 +L 252.75 250.398469 +L 253.50487 249.326699 +L 254.25974 250.398469 +L 255.01461 246.647273 +L 255.769481 246.915215 +L 256.524351 230.302775 +L 257.279221 248.254928 +L 258.034091 246.915215 +L 258.788961 250.666411 +L 259.543831 251.738182 +L 260.298701 249.862584 +L 261.053571 248.522871 +L 261.808442 248.522871 +L 262.563312 248.790813 +L 263.318182 247.986986 +L 264.827922 251.202297 +L 265.582792 249.326699 +L 266.337662 248.522871 +L 267.092532 247.183158 +L 267.847403 247.4511 +L 268.602273 246.111388 +L 269.357143 250.666411 +L 270.112013 251.738182 +L 270.866883 246.111388 +L 271.621753 247.4511 +L 272.376623 249.594641 +L 273.131494 247.719043 +L 273.886364 248.522871 +L 274.641234 251.470239 +L 275.396104 250.398469 +L 276.150974 248.522871 +L 276.905844 249.594641 +L 277.660714 248.254928 +L 278.415584 246.647273 +L 279.925325 250.934354 +L 280.680195 251.202297 +L 281.435065 249.326699 +L 282.189935 247.986986 +L 282.944805 250.130526 +L 283.699675 249.594641 +L 284.454545 249.594641 +L 285.964286 250.130526 +L 286.719156 247.183158 +L 287.474026 249.058756 +L 288.228896 249.058756 +L 288.983766 250.130526 +L 289.738636 249.326699 +L 290.493506 251.202297 +L 291.248377 250.398469 +L 292.003247 248.522871 +L 292.758117 249.326699 +L 293.512987 249.058756 +L 294.267857 248.522871 +L 295.022727 249.326699 +L 295.777597 251.202297 +L 296.532468 250.934354 +L 297.287338 247.719043 +L 298.042208 250.666411 +L 298.797078 249.862584 +L 299.551948 249.326699 +L 300.306818 246.111388 +L 301.061688 251.202297 +L 301.816558 250.666411 +L 302.571429 249.862584 +L 303.326299 250.398469 +L 304.081169 249.058756 +L 304.836039 248.254928 +L 305.590909 249.326699 +L 306.345779 250.934354 +L 307.100649 250.934354 +L 307.855519 249.594641 +L 308.61039 247.4511 +L 309.36526 247.4511 +L 310.12013 250.398469 +L 310.875 248.790813 +L 311.62987 250.666411 +L 312.38474 249.594641 +L 313.13961 247.986986 +L 313.894481 248.790813 +L 314.649351 248.790813 +L 315.404221 247.986986 +L 316.159091 248.254928 +L 316.913961 251.202297 +L 317.668831 251.738182 +L 318.423701 250.130526 +L 319.178571 250.130526 +L 319.933442 250.398469 +L 320.688312 250.398469 +L 321.443182 250.666411 +L 322.952922 251.738182 +L 323.707792 250.398469 +L 324.462662 249.594641 +L 325.217532 249.862584 +L 325.972403 248.790813 +L 326.727273 251.202297 +L 327.482143 250.398469 +L 328.237013 251.738182 +L 328.991883 250.398469 +L 329.746753 250.398469 +L 330.501623 248.522871 +L 331.256494 247.986986 +L 332.011364 249.594641 +L 332.766234 250.666411 +L 333.521104 250.666411 +L 334.275974 248.790813 +L 335.030844 249.594641 +L 335.785714 249.862584 +L 336.540584 249.862584 +L 337.295455 249.058756 +L 338.050325 249.326699 +L 338.805195 250.666411 +L 339.560065 248.522871 +L 340.314935 251.470239 +L 341.069805 249.862584 +L 341.824675 249.862584 +L 342.579545 251.202297 +L 343.334416 250.934354 +L 344.089286 250.130526 +L 344.844156 250.130526 +L 345.599026 249.326699 +L 346.353896 249.594641 +L 347.108766 251.202297 +L 347.863636 250.934354 +L 348.618506 251.470239 +L 349.373377 250.398469 +L 350.128247 250.130526 +L 350.883117 248.790813 +L 351.637987 249.326699 +L 352.392857 250.398469 +L 353.147727 250.934354 +L 353.902597 250.398469 +L 354.657468 251.470239 +L 355.412338 250.934354 +L 356.167208 249.326699 +L 356.922078 250.130526 +L 357.676948 251.202297 +L 358.431818 248.522871 +L 359.186688 251.470239 +L 359.941558 251.202297 +L 360.696429 248.254928 +L 362.206169 249.326699 +L 362.961039 250.398469 +L 363.715909 249.862584 +L 364.470779 251.202297 +L 365.225649 250.666411 +L 365.980519 247.986986 +L 366.73539 249.862584 +L 367.49026 249.326699 +L 368.24513 249.862584 +L 369 249.862584 +L 369.75487 251.470239 +L 370.50974 251.470239 +L 371.26461 250.934354 +L 372.019481 248.522871 +L 373.529221 248.522871 +L 374.284091 249.862584 +L 375.038961 249.862584 +L 375.793831 249.058756 +L 376.548701 248.790813 +L 377.303571 247.4511 +L 378.058442 249.594641 +L 378.813312 247.719043 +L 379.568182 250.130526 +L 380.323052 251.202297 +L 381.077922 250.398469 +L 381.832792 249.862584 +L 382.587662 248.254928 +L 383.342532 248.522871 +L 384.097403 249.326699 +L 384.852273 249.862584 +L 385.607143 250.130526 +L 386.362013 247.719043 +L 387.116883 248.522871 +L 387.871753 250.666411 +L 388.626623 249.594641 +L 390.136364 249.058756 +L 390.891234 249.594641 +L 391.646104 247.719043 +L 392.400974 250.130526 +L 393.155844 250.398469 +L 393.910714 248.522871 +L 394.665584 249.058756 +L 395.420455 250.934354 +L 396.175325 250.398469 +L 396.930195 249.594641 +L 397.685065 250.934354 +L 398.439935 249.326699 +L 399.194805 248.790813 +L 399.949675 249.058756 +L 400.704545 251.202297 +L 401.459416 251.202297 +L 402.214286 249.326699 +L 402.969156 250.398469 +L 403.724026 247.986986 +L 405.233766 250.130526 +L 405.988636 250.666411 +L 406.743506 250.130526 +L 407.498377 249.058756 +L 408.253247 247.4511 +L 409.008117 248.522871 +L 409.762987 247.986986 +L 410.517857 249.058756 +L 411.272727 250.666411 +L 412.027597 250.934354 +L 412.782468 249.326699 +L 413.537338 250.666411 +L 414.292208 249.862584 +L 415.047078 250.130526 +L 415.801948 251.470239 +L 416.556818 250.934354 +L 417.311688 250.934354 +L 418.066558 251.470239 +L 418.821429 249.594641 +L 419.576299 250.398469 +L 420.331169 249.058756 +L 421.086039 250.666411 +L 421.840909 251.202297 +L 422.595779 249.058756 +L 423.350649 249.594641 +L 424.105519 249.594641 +L 424.86039 246.915215 +L 425.61526 246.647273 +L 426.37013 250.398469 +L 427.125 250.398469 +L 427.87987 248.790813 +L 428.63474 248.790813 +L 429.38961 249.862584 +L 430.144481 249.326699 +L 430.899351 250.398469 +L 431.654221 250.666411 +L 432.409091 250.666411 +L 433.163961 248.254928 +L 433.918831 249.862584 +L 434.673701 250.666411 +L 435.428571 250.934354 +L 436.183442 249.594641 +L 436.938312 251.738182 +L 437.693182 251.470239 +L 438.448052 250.934354 +L 439.202922 250.934354 +L 439.957792 251.202297 +L 440.712662 250.666411 +L 441.467532 251.202297 +L 442.222403 250.398469 +L 442.977273 244.771675 +L 443.732143 247.4511 +L 444.487013 249.326699 +L 446.751623 250.934354 +L 447.506494 251.738182 +L 448.261364 249.594641 +L 449.016234 249.594641 +L 449.771104 249.058756 +L 450.525974 246.111388 +L 451.280844 250.666411 +L 452.035714 251.738182 +L 452.790584 251.470239 +L 453.545455 250.666411 +L 454.300325 248.254928 +L 455.055195 250.934354 +L 455.810065 250.130526 +L 456.564935 248.522871 +L 457.319805 251.202297 +L 458.074675 251.202297 +L 458.829545 250.130526 +L 459.584416 247.986986 +L 460.339286 248.790813 +L 461.094156 249.862584 +L 461.849026 249.326699 +L 462.603896 250.934354 +L 463.358766 250.666411 +L 464.113636 248.254928 +L 464.868506 249.326699 +L 465.623377 247.183158 +L 466.378247 246.647273 +L 467.133117 247.183158 +L 467.887987 251.202297 +L 468.642857 251.738182 +L 469.397727 247.986986 +L 470.152597 246.111388 +L 470.907468 247.986986 +L 471.662338 246.647273 +L 472.417208 243.431962 +L 473.172078 249.594641 +L 473.926948 249.326699 +L 474.681818 247.4511 +L 475.436688 247.183158 +L 476.191558 248.254928 +L 476.946429 248.790813 +L 477.701299 247.986986 +L 478.456169 249.862584 +L 479.211039 250.934354 +L 479.965909 247.719043 +L 481.475649 248.254928 +L 482.230519 246.915215 +L 482.98539 247.4511 +L 483.74026 247.719043 +L 484.49513 250.666411 +L 485.25 245.843445 +L 486.00487 245.843445 +L 486.75974 243.967847 +L 487.51461 247.183158 +L 488.269481 247.183158 +L 489.024351 249.862584 +L 489.779221 249.058756 +L 490.534091 247.986986 +L 491.288961 245.843445 +L 492.043831 248.522871 +L 492.798701 249.058756 +L 493.553571 249.326699 +L 494.308442 249.326699 +L 495.063312 249.862584 +L 495.818182 246.647273 +L 496.573052 247.183158 +L 497.327922 245.039617 +L 498.082792 247.986986 +L 498.837662 247.183158 +L 499.592532 250.934354 +L 500.347403 251.202297 +L 501.102273 243.967847 +L 501.857143 247.4511 +L 502.612013 245.575502 +L 503.366883 246.37933 +L 504.121753 249.594641 +L 504.876623 250.398469 +L 505.631494 250.398469 +L 506.386364 248.522871 +L 507.141234 249.326699 +L 507.896104 247.183158 +L 508.650974 246.915215 +L 509.405844 249.594641 +L 510.160714 249.862584 +L 510.915584 251.738182 +L 511.670455 248.522871 +L 512.425325 248.254928 +L 513.180195 249.058756 +L 513.935065 244.771675 +L 514.689935 249.326699 +L 515.444805 251.470239 +L 516.199675 250.934354 +L 516.954545 249.058756 +L 517.709416 249.594641 +L 518.464286 249.594641 +L 519.219156 250.666411 +L 519.974026 250.666411 +L 520.728896 251.202297 +L 521.483766 250.666411 +L 522.238636 249.326699 +L 522.993506 249.058756 +L 523.748377 249.326699 +L 524.503247 250.130526 +L 525.258117 249.594641 +L 526.012987 250.666411 +L 526.767857 249.594641 +L 527.522727 248.790813 +L 528.277597 248.522871 +L 529.032468 248.522871 +L 529.787338 249.862584 +L 530.542208 246.915215 +L 531.297078 251.470239 +L 532.051948 251.470239 +L 532.806818 249.058756 +L 533.561688 250.398469 +L 534.316558 250.398469 +L 535.071429 248.254928 +L 535.826299 249.862584 +L 536.581169 251.202297 +L 537.336039 250.398469 +L 538.090909 249.326699 +L 538.845779 248.522871 +L 539.600649 249.058756 +L 540.355519 247.4511 +L 541.11039 249.594641 +L 541.86526 250.934354 +L 542.62013 250.130526 +L 543.375 246.647273 +L 544.12987 247.986986 +L 544.88474 250.666411 +L 545.63961 250.130526 +L 546.394481 248.522871 +L 547.149351 250.130526 +L 547.904221 251.470239 +L 548.659091 249.594641 +L 549.413961 250.130526 +L 550.168831 249.594641 +L 550.923701 248.790813 +L 551.678571 250.398469 +L 552.433442 251.470239 +L 553.188312 251.470239 +L 553.943182 250.666411 +L 554.698052 250.130526 +L 555.452922 250.130526 +L 556.207792 249.058756 +L 556.962662 251.470239 +L 557.717532 250.934354 +L 558.472403 251.738182 +L 559.227273 250.398469 +L 559.982143 249.862584 +L 560.737013 249.594641 +L 561.491883 248.522871 +L 562.246753 251.202297 +L 563.001623 251.470239 +L 563.756494 249.326699 +L 564.511364 249.594641 +L 565.266234 250.130526 +L 566.021104 250.398469 +L 566.775974 249.862584 +L 567.530844 251.470239 +L 568.285714 251.738182 +L 569.040584 250.934354 +L 569.795455 251.202297 +L 570.550325 250.398469 +L 571.305195 249.058756 +L 572.060065 251.202297 +L 572.814935 250.666411 +L 573.569805 251.470239 +L 574.324675 251.202297 +L 575.079545 250.130526 +L 575.834416 249.594641 +L 576.589286 250.130526 +L 577.344156 249.058756 +L 578.099026 250.666411 +L 578.853896 251.470239 +L 579.608766 250.130526 +L 580.363636 251.202297 +L 581.118506 250.666411 +L 581.873377 250.666411 +L 582.628247 248.522871 +L 583.383117 249.594641 +L 584.137987 250.934354 +L 584.892857 251.202297 +L 585.647727 249.862584 +L 586.402597 249.594641 +L 587.157468 249.594641 +L 587.912338 250.666411 +L 588.667208 249.594641 +L 589.422078 249.594641 +L 590.176948 251.470239 +L 590.931818 249.594641 +L 591.686688 249.326699 +L 592.441558 250.666411 +L 593.196429 249.594641 +L 593.951299 249.326699 +L 594.706169 251.202297 +L 595.461039 251.738182 +L 596.215909 250.130526 +L 596.970779 249.594641 +L 597.725649 250.666411 +L 599.23539 250.130526 +L 599.99026 250.666411 +L 600.74513 251.470239 +L 601.5 250.130526 +L 602.25487 250.398469 +L 603.00974 250.130526 +L 603.76461 249.326699 +L 604.519481 249.862584 +L 605.274351 249.862584 +L 606.029221 250.934354 +L 606.784091 251.738182 +L 607.538961 251.202297 +L 608.293831 250.398469 +L 609.048701 250.398469 +L 609.803571 250.934354 +L 610.558442 250.130526 +L 611.313312 250.934354 +L 612.068182 251.470239 +L 612.823052 250.398469 +L 613.577922 249.862584 +L 614.332792 250.130526 +L 615.087662 249.058756 +L 615.842532 249.594641 +L 616.597403 251.738182 +L 617.352273 251.470239 +L 618.107143 250.398469 +L 618.862013 249.862584 +L 619.616883 249.058756 +L 620.371753 249.594641 +L 621.126623 245.039617 +L 621.881494 251.202297 +L 622.636364 250.666411 +L 622.636364 250.666411 +" clip-path="url(#p9f83e84885)" style="fill: none; stroke: #ff7f0e; stroke-width: 1.5; stroke-linecap: square"/> - - - + - + - + - - + - + - + @@ -3150,10 +3650,10 @@ L 119 183.296562 - + - + diff --git a/doc/source/tracking/traffic/traffic_data_mgmt.py b/doc/source/tracking/traffic/traffic_data_mgmt.py index 397490f4b..3d5293164 100644 --- a/doc/source/tracking/traffic/traffic_data_mgmt.py +++ b/doc/source/tracking/traffic/traffic_data_mgmt.py @@ -19,6 +19,11 @@ def update_csv(string): except FileNotFoundError: updated = pd.read_csv(defaultpath + string) + # try to remove duplicate dates; sort default is ascending (30/8/22) + updated = updated.sort_values(f"total_{string}", ignore_index=True).drop_duplicates( + subset="_date", keep="last" + ) + updated.sort_values("_date", ignore_index=True).to_csv( trafficpath + f"{string}.csv", index=False ) @@ -48,4 +53,4 @@ def update_csv(string): fig.savefig(trafficpath + "plots.svg") # removing the files should not be necessary here since they're not included in the git commit -#subprocess.run(["rm -rf " + defaultpath[:-1]], shell=True) +# subprocess.run(["rm -rf " + defaultpath[:-1]], shell=True) diff --git a/doc/source/tracking/traffic/views.csv b/doc/source/tracking/traffic/views.csv index d1ea92ece..b8e022c63 100644 --- a/doc/source/tracking/traffic/views.csv +++ b/doc/source/tracking/traffic/views.csv @@ -503,3 +503,172 @@ _date,total_views,unique_views 2022-03-11,46,10 2022-03-12,30,10 2022-03-13,17,8 +2022-03-14,150,20 +2022-03-15,108,18 +2022-03-16,158,26 +2022-03-17,145,15 +2022-03-18,100,18 +2022-03-19,7,4 +2022-03-20,9,3 +2022-03-21,144,30 +2022-03-22,61,17 +2022-03-23,110,24 +2022-03-24,80,21 +2022-03-25,62,9 +2022-03-26,34,6 +2022-03-27,16,6 +2022-03-28,83,13 +2022-03-29,59,10 +2022-03-30,132,18 +2022-03-31,141,19 +2022-04-01,34,9 +2022-04-02,11,8 +2022-04-03,1,1 +2022-04-04,46,13 +2022-04-05,53,14 +2022-04-06,31,11 +2022-04-07,61,27 +2022-04-08,29,10 +2022-04-09,10,2 +2022-04-10,7,4 +2022-04-11,34,11 +2022-04-12,65,9 +2022-04-13,15,9 +2022-04-14,15,5 +2022-04-15,30,5 +2022-04-16,42,3 +2022-04-17,84,5 +2022-04-18,48,10 +2022-04-19,50,11 +2022-04-20,21,10 +2022-04-21,19,7 +2022-04-22,17,9 +2022-04-23,6,5 +2022-04-24,12,9 +2022-04-25,44,12 +2022-04-26,74,13 +2022-04-27,64,13 +2022-04-28,34,8 +2022-04-29,61,19 +2022-04-30,8,2 +2022-05-01,2,2 +2022-05-02,31,11 +2022-05-03,21,6 +2022-05-04,68,6 +2022-05-05,145,14 +2022-05-06,29,8 +2022-05-07,5,3 +2022-05-08,10,6 +2022-05-09,43,10 +2022-05-10,57,13 +2022-05-11,47,11 +2022-05-12,51,17 +2022-05-13,64,9 +2022-05-14,4,4 +2022-05-15,40,7 +2022-05-16,89,20 +2022-05-17,94,15 +2022-05-18,24,5 +2022-05-19,14,7 +2022-05-20,152,13 +2022-05-21,15,7 +2022-05-22,5,2 +2022-05-23,90,9 +2022-05-24,22,7 +2022-05-25,115,9 +2022-05-26,84,12 +2022-05-27,22,6 +2022-05-28,2,2 +2022-05-29,2,2 +2022-05-30,8,5 +2022-05-31,28,7 +2022-06-01,23,7 +2022-06-02,32,11 +2022-06-03,2,2 +2022-06-04,8,4 +2022-06-05,1,1 +2022-06-06,24,6 +2022-06-07,15,8 +2022-06-08,27,9 +2022-06-09,33,13 +2022-06-10,5,3 +2022-06-11,3,2 +2022-06-13,41,10 +2022-06-14,117,9 +2022-06-15,23,7 +2022-06-16,22,6 +2022-06-17,43,8 +2022-06-18,14,2 +2022-06-19,2,1 +2022-06-20,17,4 +2022-06-20,15,3 +2022-06-21,39,6 +2022-06-22,31,11 +2022-06-23,29,3 +2022-06-24,10,5 +2022-06-25,2,2 +2022-06-26,3,3 +2022-06-27,33,7 +2022-06-28,30,9 +2022-06-29,17,7 +2022-06-30,54,11 +2022-07-01,11,5 +2022-07-02,4,2 +2022-07-03,12,7 +2022-07-04,4,3 +2022-07-05,48,5 +2022-07-06,71,5 +2022-07-07,91,13 +2022-07-08,88,9 +2022-07-09,16,4 +2022-07-10,9,3 +2022-07-11,109,8 +2022-07-11,113,9 +2022-07-12,52,9 +2022-07-13,20,5 +2022-07-14,31,9 +2022-07-15,65,9 +2022-07-16,3,2 +2022-07-18,22,9 +2022-07-19,49,10 +2022-07-20,17,5 +2022-07-21,89,9 +2022-07-22,66,10 +2022-07-23,4,3 +2022-07-24,2,1 +2022-07-25,7,7 +2022-07-26,45,9 +2022-07-27,39,5 +2022-07-28,12,6 +2022-07-29,78,7 +2022-07-30,9,5 +2022-07-31,2,2 +2022-08-01,11,7 +2022-08-01,10,6 +2022-08-02,11,7 +2022-08-03,41,10 +2022-08-04,18,8 +2022-08-05,40,8 +2022-08-06,10,4 +2022-08-07,1,1 +2022-08-08,14,3 +2022-08-09,93,6 +2022-08-10,19,6 +2022-08-11,38,4 +2022-08-12,16,7 +2022-08-13,8,4 +2022-08-14,2,2 +2022-08-15,27,6 +2022-08-16,135,8 +2022-08-17,8,7 +2022-08-18,95,11 +2022-08-19,33,9 +2022-08-20,1,1 +2022-08-21,2,2 +2022-08-22,7,6 +2022-08-23,14,8 +2022-08-24,49,11 +2022-08-25,37,9 +2022-08-26,182,26 +2022-08-27,8,3 +2022-08-28,10,5 From e563946f60dd3022195903800f8a259573532991 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 30 Aug 2022 10:22:49 -0400 Subject: [PATCH 32/44] docs: add salvis2 as a contributor for doc, infra (#365) --- .all-contributorsrc | 10 +++++ CONTRIBUTORS.rst | 95 +++++++++++++++++++++++---------------------- 2 files changed, 58 insertions(+), 47 deletions(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index f8ce5f164..26c11ff1f 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -356,6 +356,16 @@ "contributions": [ "example" ] + }, + { + "login": "salvis2", + "name": "Sebastian Alvis", + "avatar_url": "https://avatars.githubusercontent.com/u/27738742?v=4", + "profile": "https://github.com/salvis2", + "contributions": [ + "doc", + "infra" + ] } ], "contributorsPerLine": 7, diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index 0d586122f..e62baa173 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -8,54 +8,55 @@ Thanks goes to these wonderful people (`emoji key - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Amy Steiker

💡 📖 🧑‍🏫

Anna Valentine

💡

Anthony Arendt

🐛 💼 📋 🔍

Bruce Wallin

💻 📖 🤔 👀 💬

David Shean

🐛 🧑‍🏫

Don Setiawan

🚇 📦

Facundo Sapienza

💡 🐛

Fernando Perez

🎨 💼 🤔

Jessica

🐛 💻 🖋 📖 🎨 💡 🤔 🚧 🧑‍🏫 📆 💬 👀

Joachim Meyer

🧑‍🏫 🚧

Kelsey Bisson

🐛 💻 📖 🤔 💡 🤔 🧑‍🏫 💬 👀

Molly Wieringa

🤔

Nicole Abib

💻 🤔

Raphael Hagen

📖 🎨 💻 🚇 👀

Romina Piunno

💻 🤔 🧑‍🏫 👀

Sarah Hall

🐛 💻 📖 🚧 ⚠️

Scott Henderson

🚧

Shashank Bhushan

💡

Tian Li

🐛 💻 📖 💡 🤔 👀 ⚠️ 🔧

Tom Johnson

📖 🚇

Tyler Sutterley

📖 💻 🤔 💬 🛡️ ⚠️

Zach Fair

🐛 💻 📖 🤔 💬 👀

alexdibella

🐛 🤔 💻

bidhya

💡

liuzheng-arctic

📖 🐛 💻 🤔 👀 🔧 💡

nitin-ravinder

🐛 👀

smithb

🤔

tedmaksym

🤔

trevorskaggs

🐛 💻

trey-stafford

💻 🤔 🚧 👀 💬
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Amy Steiker

💡 📖 🧑‍🏫

Anna Valentine

💡

Anthony Arendt

🐛 💼 📋 🔍

Bruce Wallin

💻 📖 🤔 👀 💬

David Shean

🐛 🧑‍🏫

Don Setiawan

🚇 📦

Facundo Sapienza

💡 🐛

Fernando Perez

🎨 💼 🤔

Jessica

🐛 💻 🖋 📖 🎨 💡 🤔 🚧 🧑‍🏫 📆 💬 👀

Joachim Meyer

🧑‍🏫 🚧

Kelsey Bisson

🐛 💻 📖 🤔 💡 🤔 🧑‍🏫 💬 👀

Molly Wieringa

🤔

Nicole Abib

💻 🤔

Raphael Hagen

📖 🎨 💻 🚇 👀

Romina Piunno

💻 🤔 🧑‍🏫 👀

Sarah Hall

🐛 💻 📖 🚧 ⚠️

Scott Henderson

🚧

Sebastian Alvis

📖 🚇

Shashank Bhushan

💡

Tian Li

🐛 💻 📖 💡 🤔 👀 ⚠️ 🔧

Tom Johnson

📖 🚇

Tyler Sutterley

📖 💻 🤔 💬 🛡️ ⚠️

Zach Fair

🐛 💻 📖 🤔 💬 👀

alexdibella

🐛 🤔 💻

bidhya

💡

liuzheng-arctic

📖 🐛 💻 🤔 👀 🔧 💡

nitin-ravinder

🐛 👀

smithb

🤔

tedmaksym

🤔

trevorskaggs

🐛 💻

trey-stafford

💻 🤔 🚧 👀 💬
- - + + - + This project follows the `all-contributors `_ specification. Contributions of any kind welcome! From c3a18f0e0f5d4eac0a00e14b96f77665925f60bc Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 30 Aug 2022 10:23:51 -0400 Subject: [PATCH 33/44] docs: add learn2phoenix as a contributor for code (#366) --- .all-contributorsrc | 9 +++++++++ CONTRIBUTORS.rst | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 26c11ff1f..ef19575a9 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -366,6 +366,15 @@ "doc", "infra" ] + }, + { + "login": "learn2phoenix", + "name": "learn2phoenix", + "avatar_url": "https://avatars.githubusercontent.com/u/74139166?v=4", + "profile": "https://learn2phoenix.github.io", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 7, diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index e62baa173..215ddf43b 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -43,11 +43,12 @@ Thanks goes to these wonderful people (`emoji key
Zach Fair

🐛 💻 📖 🤔 💬 👀
alexdibella

🐛 🤔 💻
bidhya

💡 +
learn2phoenix

💻
liuzheng-arctic

📖 🐛 💻 🤔 👀 🔧 💡
nitin-ravinder

🐛 👀 -
smithb

🤔 +
smithb

🤔
tedmaksym

🤔
trevorskaggs

🐛 💻
trey-stafford

💻 🤔 🚧 👀 💬 From 7db8d78785777b8701ebbb92c30479f1eb48fb63 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 30 Aug 2022 10:25:05 -0400 Subject: [PATCH 34/44] docs: add jpswinski as a contributor for code (#367) --- .all-contributorsrc | 9 +++++++++ CONTRIBUTORS.rst | 7 ++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index ef19575a9..833d7c7f0 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -375,6 +375,15 @@ "contributions": [ "code" ] + }, + { + "login": "jpswinski", + "name": "JP Swinski", + "avatar_url": "https://avatars.githubusercontent.com/u/54070345?v=4", + "profile": "https://github.com/jpswinski", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 7, diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index 215ddf43b..44fa8c130 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -22,32 +22,33 @@ Thanks goes to these wonderful people (`emoji key
Fernando Perez

🎨 💼 🤔 +
JP Swinski

💻
Jessica

🐛 💻 🖋 📖 🎨 💡 🤔 🚧 🧑‍🏫 📆 💬 👀
Joachim Meyer

🧑‍🏫 🚧
Kelsey Bisson

🐛 💻 📖 🤔 💡 🤔 🧑‍🏫 💬 👀
Molly Wieringa

🤔
Nicole Abib

💻 🤔 -
Raphael Hagen

📖 🎨 💻 🚇 👀 +
Raphael Hagen

📖 🎨 💻 🚇 👀
Romina Piunno

💻 🤔 🧑‍🏫 👀
Sarah Hall

🐛 💻 📖 🚧 ⚠️
Scott Henderson

🚧
Sebastian Alvis

📖 🚇
Shashank Bhushan

💡
Tian Li

🐛 💻 📖 💡 🤔 👀 ⚠️ 🔧 -
Tom Johnson

📖 🚇 +
Tom Johnson

📖 🚇
Tyler Sutterley

📖 💻 🤔 💬 🛡️ ⚠️
Zach Fair

🐛 💻 📖 🤔 💬 👀
alexdibella

🐛 🤔 💻
bidhya

💡
learn2phoenix

💻
liuzheng-arctic

📖 🐛 💻 🤔 👀 🔧 💡 -
nitin-ravinder

🐛 👀 +
nitin-ravinder

🐛 👀
smithb

🤔
tedmaksym

🤔
trevorskaggs

🐛 💻 From 0d3971f080b9b2a08ce4869ab1685a114a2fbd2c Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 30 Aug 2022 11:12:23 -0400 Subject: [PATCH 35/44] docs: add weiji14 as a contributor for bug, code, doc, example, ideas, infra, maintenance, mentoring, question, review, test, talk (#368) --- .all-contributorsrc | 20 ++++++++++++++++++++ CONTRIBUTORS.rst | 3 ++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 833d7c7f0..c8bfd017a 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -384,6 +384,26 @@ "contributions": [ "code" ] + }, + { + "login": "weiji14", + "name": "Wei Ji", + "avatar_url": "https://avatars.githubusercontent.com/u/23487320?v=4", + "profile": "http://weiji14.github.io", + "contributions": [ + "bug", + "code", + "doc", + "example", + "ideas", + "infra", + "maintenance", + "mentoring", + "question", + "review", + "test", + "talk" + ] } ], "contributorsPerLine": 7, diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index 44fa8c130..b31ee6542 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -41,13 +41,14 @@ Thanks goes to these wonderful people (`emoji key
Tom Johnson

📖 🚇
Tyler Sutterley

📖 💻 🤔 💬 🛡️ ⚠️ +
Wei Ji

🐛 💻 📖 💡 🤔 🚇 🚧 🧑‍🏫 💬 👀 ⚠️ 📢
Zach Fair

🐛 💻 📖 🤔 💬 👀
alexdibella

🐛 🤔 💻
bidhya

💡
learn2phoenix

💻 -
liuzheng-arctic

📖 🐛 💻 🤔 👀 🔧 💡 +
liuzheng-arctic

📖 🐛 💻 🤔 👀 🔧 💡
nitin-ravinder

🐛 👀
smithb

🤔
tedmaksym

🤔 From f95053dcd934115983190104eba9bbbe30053c5f Mon Sep 17 00:00:00 2001 From: Jessica Scheick Date: Tue, 30 Aug 2022 11:25:52 -0400 Subject: [PATCH 36/44] update bib file and contribs formatting (#364) --- CONTRIBUTORS.rst | 102 ++++++++++++++-------------- README.rst | 2 +- doc/source/tracking/icepyx_pubs.bib | 60 +++++++++++++++- 3 files changed, 109 insertions(+), 55 deletions(-) diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index b31ee6542..5a0b5ca50 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -8,58 +8,58 @@ Thanks goes to these wonderful people (`emoji key - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Amy Steiker

💡 📖 🧑‍🏫

Anna Valentine

💡

Anthony Arendt

🐛 💼 📋 🔍

Bruce Wallin

💻 📖 🤔 👀 💬

David Shean

🐛 🧑‍🏫

Don Setiawan

🚇 📦

Facundo Sapienza

💡 🐛

Fernando Perez

🎨 💼 🤔

JP Swinski

💻

Jessica

🐛 💻 🖋 📖 🎨 💡 🤔 🚧 🧑‍🏫 📆 💬 👀

Joachim Meyer

🧑‍🏫 🚧

Kelsey Bisson

🐛 💻 📖 🤔 💡 🤔 🧑‍🏫 💬 👀

Molly Wieringa

🤔

Nicole Abib

💻 🤔

Raphael Hagen

📖 🎨 💻 🚇 👀

Romina Piunno

💻 🤔 🧑‍🏫 👀

Sarah Hall

🐛 💻 📖 🚧 ⚠️

Scott Henderson

🚧

Sebastian Alvis

📖 🚇

Shashank Bhushan

💡

Tian Li

🐛 💻 📖 💡 🤔 👀 ⚠️ 🔧

Tom Johnson

📖 🚇

Tyler Sutterley

📖 💻 🤔 💬 🛡️ ⚠️

Wei Ji

🐛 💻 📖 💡 🤔 🚇 🚧 🧑‍🏫 💬 👀 ⚠️ 📢

Zach Fair

🐛 💻 📖 🤔 💬 👀

alexdibella

🐛 🤔 💻

bidhya

💡

learn2phoenix

💻

liuzheng-arctic

📖 🐛 💻 🤔 👀 🔧 💡

nitin-ravinder

🐛 👀

smithb

🤔

tedmaksym

🤔

trevorskaggs

🐛 💻

trey-stafford

💻 🤔 🚧 👀 💬
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Amy Steiker

💡 📖 🧑‍🏫

Anna Valentine

💡

Anthony Arendt

🐛 💼 📋 🔍

Bruce Wallin

💻 📖 🤔 👀 💬

David Shean

🐛 🧑‍🏫

Don Setiawan

🚇 📦

Facundo Sapienza

💡 🐛

Fernando Perez

🎨 💼 🤔

JP Swinski

💻

Jessica

🐛 💻 🖋 📖 🎨 💡 🤔 🚧 🧑‍🏫 📆 💬 👀

Joachim Meyer

🧑‍🏫 🚧

Kelsey Bisson

🐛 💻 📖 🤔 💡 🤔 🧑‍🏫 💬 👀

Molly Wieringa

🤔

Nicole Abib

💻 🤔

Raphael Hagen

📖 🎨 💻 🚇 👀

Romina Piunno

💻 🤔 🧑‍🏫 👀

Sarah Hall

🐛 💻 📖 🚧 ⚠️

Scott Henderson

🚧

Sebastian Alvis

📖 🚇

Shashank Bhushan

💡

Tian Li

🐛 💻 📖 💡 🤔 👀 ⚠️ 🔧

Tom Johnson

📖 🚇

Tyler Sutterley

📖 💻 🤔 💬 🛡️ ⚠️

Wei Ji

🐛 💻 📖 💡 🤔 🚇 🚧 🧑‍🏫 💬 👀 ⚠️ 📢

Zach Fair

🐛 💻 📖 🤔 💬 👀

alexdibella

🐛 🤔 💻

bidhya

💡

learn2phoenix

💻

liuzheng-arctic

📖 🐛 💻 🤔 👀 🔧 💡

nitin-ravinder

🐛 👀

smithb

🤔

tedmaksym

🤔

trevorskaggs

🐛 💻

trey-stafford

💻 🤔 🚧 👀 💬
- - + + - + This project follows the `all-contributors `_ specification. Contributions of any kind welcome! diff --git a/README.rst b/README.rst index e6caf3f43..9cefa4668 100644 --- a/README.rst +++ b/README.rst @@ -18,7 +18,7 @@ Current development version (development branch): |Docs Status dev| |Travis dev .. |Pypi install| image:: https://badge.fury.io/py/icepyx.svg :target: https://pypi.org/project/icepyx -.. |Contributors| image:: https://img.shields.io/badge/all_contributors-30-orange.svg?style=flat-square +.. |Contributors| image:: https://img.shields.io/badge/all_contributors-34-orange.svg?style=flat-square :alt: All Contributors :target: https://github.com/icesat2py/icepyx/blob/main/CONTRIBUTORS.rst diff --git a/doc/source/tracking/icepyx_pubs.bib b/doc/source/tracking/icepyx_pubs.bib index b44d9d54a..ce324e491 100644 --- a/doc/source/tracking/icepyx_pubs.bib +++ b/doc/source/tracking/icepyx_pubs.bib @@ -1,4 +1,56 @@ % ######### materials about icepyx ################ +@misc{2022_IS2-HW-tutorials, + author = {Scheick, Jessica and + Arendt, Anthony and + Haley, Charley and + Henderson, Scott and + Koh, Jane and + Setiawan, Don and + Alterman, Naomi and + Meyer, Joachim and + Cristea, Nicoleta and + Schweiger, Axel and + Barciauskas, Aimee and + Smith, Ben and + Piunno, Romina and + Shapero, Daniel and + Fair, Zachary and + Arndt, Philipp and + Leong, Wei Ji and + Sutterley, Tyler and + Snow, Tasha and + Beig, Mikala and + Besso, Hannah and + Liu, Zheng and + Joughin, Ian and + Bisson, Kelsey and + Sauthoff, Wilson}, + title = {ICESat-2 Hackweek Website}, + month = apr, + year = 2022, + note = {If you use this book, please cite it as below.}, + publisher = {Zenodo}, + version = {2022.04.15}, + doi = {10.5281/zenodo.6462479}, + url = {https://doi.org/10.5281/zenodo.6462479} +} + +@misc{js2021agu, +author = {Scheick, J and Bisson, K and Li, T and Leong, WJ and Arendt, A}, +note = {Abstract and poster (presented by Wei Ji Leong). American Geophysical Union Fall Meeting, New Orleans, LA, USA. 13-17 December 2021.}, +title = {Collaborative Computational Resource Development around {ICESat-2} Data: the {icepyx} Community and Library}, +year = {2021}, +comment = {abstract, poster}, +} + +@misc{js2020agu, +author = {Scheick, J and Arendt, A and Heagy, L and Paolo, F and Perez, F and Steiker, A}, +note = {Abstract and eLightning (poster + presentation). American Geophysical Union Fall Meeting, virtual, USA. 1-17 December 2020.}, +title = {{\texttt{icepyx}: Developing Community and Software Around ICESat-2 Data}}, +year = {2020}, +comment = {abstract, poster, talk}, +} + @misc{2020_IS2-HW-tutorials, author = {Arendt, Anthony and Scheick, Jessica and @@ -44,7 +96,9 @@ @misc{js2019agu % ######### Articles citing icepyx ################ -@article{https://doi.org/10.1029/2021GL095051, + + +@article{Bisson:2021, author = {Bisson, K. M. and Cael, B. B.}, title = {How Are Under Ice Phytoplankton Related to Sea Ice in the Southern Ocean?}, journal = {Geophysical Research Letters}, @@ -56,7 +110,7 @@ @article{https://doi.org/10.1029/2021GL095051 year = {2021} } -@inProceedings{FernandoMappingDiversityAgricultural2021, +@inProceedings{Fernando:2021, title = {Mapping the {{Diversity}} of {{Agricultural Systems}} in the {{Cuellaje Sector}}, {{Cotacachi}}, {{Ecuador Using ATL08}} for the {{ICESat-2 Mission}} and {{Machine Learning Techniques}}}, booktitle = {Computational {{Science}} and {{Its Applications}} \textendash{} {{ICCSA}} 2021}, author = {Fernando, Garrido}, @@ -71,7 +125,7 @@ @inProceedings{FernandoMappingDiversityAgricultural2021 langid = {english} } -@Article{tc-14-3629-2020, +@Article{Li:2020, AUTHOR = {Li, T. and Dawson, G. J. and Chuter, S. J. and Bamber, J. L.}, TITLE = {Mapping the grounding zone of Larsen~C Ice Shelf, Antarctica, from ICESat-2 laser altimetry}, JOURNAL = {The Cryosphere}, From 101c60ddd47cf2023210636fa6fc7af271c4c77a Mon Sep 17 00:00:00 2001 From: Jessica Scheick Date: Tue, 6 Sep 2022 12:27:12 -0400 Subject: [PATCH 37/44] update traffic data (#369) --- doc/source/tracking/pypistats/downloads.svg | 1374 ++--- .../tracking/pypistats/downloads_data.csv | 185 +- .../tracking/pypistats/sys_downloads_data.csv | 201 +- doc/source/tracking/traffic/clones.csv | 30 +- doc/source/tracking/traffic/plots.svg | 4690 ++++++++--------- doc/source/tracking/traffic/views.csv | 10 +- 6 files changed, 3317 insertions(+), 3173 deletions(-) diff --git a/doc/source/tracking/pypistats/downloads.svg b/doc/source/tracking/pypistats/downloads.svg index 0148d739c..a7b02d4ed 100644 --- a/doc/source/tracking/pypistats/downloads.svg +++ b/doc/source/tracking/pypistats/downloads.svg @@ -6,11 +6,11 @@ - 2022-08-01T20:57:02.309907 + 2022-09-01T20:57:35.703526 image/svg+xml - Matplotlib v3.5.2, https://matplotlib.org/ + Matplotlib v3.5.3, https://matplotlib.org/ @@ -41,12 +41,12 @@ z - - + @@ -205,12 +205,12 @@ z - + - + - + - + @@ -283,12 +283,12 @@ z - + - + - + - + @@ -339,12 +339,12 @@ z - + - + @@ -361,12 +361,12 @@ z - + - + - + + + + + + + + + + + + + + + + - + @@ -535,15 +550,15 @@ z - - + - + @@ -553,10 +568,10 @@ L -3.5 0 - + - + @@ -567,10 +582,10 @@ L -3.5 0 - + - + @@ -602,10 +617,10 @@ z - + - + @@ -616,10 +631,10 @@ z - + - + @@ -630,640 +645,669 @@ z +L 116.081137 107.882791 +L 116.798637 119.603721 +L 118.951138 123.12 +L 119.668638 120.775814 +L 120.386139 114.915349 +L 121.103639 121.947907 +L 121.821139 120.775814 +L 122.53864 121.947907 +L 123.25614 96.16186 +L 123.97364 116.087442 +L 124.691141 120.775814 +L 125.408641 114.915349 +L 126.126141 121.947907 +L 126.843642 117.259535 +L 127.561142 116.087442 +L 128.278642 123.12 +L 128.996142 120.775814 +L 129.713643 112.571163 +L 130.431143 114.915349 +L 131.148643 119.603721 +L 131.866144 120.775814 +L 132.583644 120.775814 +L 134.018645 123.12 +L 134.736145 113.743256 +L 135.453645 64.515349 +L 136.171146 117.259535 +L 136.888646 120.775814 +L 137.606146 120.775814 +L 138.323647 118.431628 +L 139.041147 121.947907 +L 139.758647 119.603721 +L 140.476148 123.12 +L 141.193648 120.775814 +L 141.911148 120.775814 +L 142.628649 123.12 +L 143.346149 121.947907 +L 144.063649 119.603721 +L 144.78115 119.603721 +L 145.49865 117.259535 +L 146.21615 123.12 +L 146.933651 123.12 +L 147.651151 121.947907 +L 148.368651 121.947907 +L 149.086151 123.12 +L 149.803652 123.12 +L 150.521152 105.538605 +L 151.238652 118.431628 +L 151.956153 116.087442 +L 152.673653 121.947907 +L 153.391153 118.431628 +L 154.108654 116.087442 +L 154.826154 118.431628 +L 155.543654 123.12 +L 156.261155 121.947907 +L 156.978655 118.431628 +L 157.696155 123.12 +L 159.131156 120.775814 +L 159.848656 116.087442 +L 161.283657 123.12 +L 162.001157 119.603721 +L 162.718658 118.431628 +L 163.436158 123.12 +L 164.153658 119.603721 +L 164.871159 123.12 +L 165.588659 121.947907 +L 166.306159 118.431628 +L 167.02366 123.12 +L 167.74116 121.947907 +L 168.45866 121.947907 +L 169.17616 123.12 +L 169.893661 118.431628 +L 170.611161 123.12 +L 171.328661 120.775814 +L 172.763662 120.775814 +L 173.481162 119.603721 +L 174.198663 117.259535 +L 174.916163 120.775814 +L 175.633663 117.259535 +L 176.351164 123.12 +L 177.786164 120.775814 +L 178.503665 118.431628 +L 179.221165 121.947907 +L 179.938665 123.12 +L 180.656166 121.947907 +L 181.373666 119.603721 +L 182.091166 120.775814 +L 182.808667 123.12 +L 183.526167 107.882791 +L 184.243667 123.12 +L 184.961168 120.775814 +L 185.678668 119.603721 +L 186.396168 123.12 +L 187.113669 119.603721 +L 187.831169 114.915349 +L 188.548669 120.775814 +L 189.266169 123.12 +L 189.98367 123.12 +L 190.70117 121.947907 +L 191.41867 123.12 +L 192.136171 123.12 +L 192.853671 121.947907 +L 193.571171 121.947907 +L 194.288672 120.775814 +L 195.006172 121.947907 +L 197.158673 118.431628 +L 197.876173 120.775814 +L 198.593674 120.775814 +L 200.028674 118.431628 +L 200.746175 121.947907 +L 201.463675 123.12 +L 202.181175 116.087442 +L 202.898676 121.947907 +L 203.616176 121.947907 +L 204.333676 114.915349 +L 205.051177 120.775814 +L 205.768677 120.775814 +L 206.486177 94.989767 +L 207.203678 118.431628 +L 207.921178 120.775814 +L 208.638678 116.087442 +L 209.356178 121.947907 +L 210.073679 117.259535 +L 210.791179 121.947907 +L 211.508679 114.915349 +L 212.22618 118.431628 +L 212.94368 123.12 +L 213.66118 121.947907 +L 214.378681 109.054884 +L 215.096181 118.431628 +L 215.813681 121.947907 +L 216.531182 123.12 +L 217.248682 123.12 +L 217.966182 114.915349 +L 218.683683 123.12 +L 219.401183 123.12 +L 220.118683 119.603721 +L 220.836184 123.12 +L 221.553684 123.12 +L 222.988685 118.431628 +L 223.706185 123.12 +L 224.423685 120.775814 +L 225.858686 123.12 +L 226.576186 118.431628 +L 227.293687 123.12 +L 228.011187 123.12 +L 228.728687 121.947907 +L 229.446187 123.12 +L 230.163688 123.12 +L 230.881188 118.431628 +L 232.316189 123.12 +L 233.751189 120.775814 +L 234.46869 120.775814 +L 235.18619 121.947907 +L 235.90369 119.603721 +L 236.621191 121.947907 +L 237.338691 123.12 +L 238.773692 123.12 +L 239.491192 118.431628 +L 240.208692 123.12 +L 240.926193 121.947907 +L 241.643693 123.12 +L 242.361193 118.431628 +L 243.078694 120.775814 +L 243.796194 121.947907 +L 244.513694 121.947907 +L 245.231195 119.603721 +L 245.948695 121.947907 +L 246.666195 120.775814 +L 247.383696 120.775814 +L 248.101196 121.947907 +L 248.818696 121.947907 +L 249.536196 123.12 +L 250.253697 116.087442 +L 250.971197 121.947907 +L 251.688697 121.947907 +L 252.406198 123.12 +L 253.123698 121.947907 +L 253.841198 123.12 +L 254.558699 123.12 +L 255.993699 120.775814 +L 256.7112 111.39907 +L 257.4287 114.915349 +L 258.1462 89.129302 +L 258.863701 123.12 +L 259.581201 121.947907 +L 260.298701 116.087442 +L 261.016202 118.431628 +L 261.733702 117.259535 +L 262.451202 107.882791 +L 263.168703 123.12 +L 263.886203 121.947907 +L 264.603703 119.603721 +L 265.321204 116.087442 +L 266.038704 111.39907 +L 266.756204 97.333953 +L 267.473705 106.710698 +L 268.191205 121.947907 +L 268.908705 84.44093 +L 269.626205 105.538605 +L 270.343706 114.915349 +L 271.061206 107.882791 +L 271.778706 118.431628 +L 272.496207 107.882791 +L 273.213707 109.054884 +L 273.931207 106.710698 +L 274.648708 97.333953 +L 275.366208 120.775814 +L 276.083708 116.087442 +L 276.801209 120.775814 +L 277.518709 123.12 +L 278.236209 118.431628 +L 278.95371 123.12 +L 279.67121 120.775814 +L 280.38871 123.12 +L 281.106211 121.947907 +L 281.823711 107.882791 +L 282.541211 120.775814 +L 283.258712 117.259535 +L 283.976212 119.603721 +L 284.693712 118.431628 +L 285.411213 123.12 +L 286.128713 116.087442 +L 286.846213 118.431628 +L 287.563714 121.947907 +L 288.281214 117.259535 +L 288.998714 123.12 +L 289.716214 120.775814 +L 290.433715 123.12 +L 291.151215 119.603721 +L 291.868715 121.947907 +L 292.586216 119.603721 +L 293.303716 118.431628 +L 294.021216 121.947907 +L 295.456217 121.947907 +L 296.173717 119.603721 +L 296.891218 118.431628 +L 297.608718 98.506047 +L 298.326218 100.850233 +L 299.043719 120.775814 +L 299.761219 121.947907 +L 300.478719 117.259535 +L 301.19622 118.431628 +L 301.91372 116.087442 +L 302.63122 121.947907 +L 303.348721 123.12 +L 304.066221 117.259535 +L 304.783721 116.087442 +L 305.501222 112.571163 +L 306.218722 121.947907 +L 306.936222 118.431628 +L 307.653723 121.947907 +L 308.371223 121.947907 +L 309.088723 123.12 +L 310.523724 118.431628 +L 311.958724 123.12 +L 312.676225 120.775814 +L 313.393725 121.947907 +L 314.111225 116.087442 +L 314.828726 113.743256 +L 315.546226 116.087442 +L 316.263726 117.259535 +L 316.981227 114.915349 +L 317.698727 105.538605 +L 318.416227 117.259535 +L 319.133728 119.603721 +L 319.851228 118.431628 +L 320.568728 114.915349 +L 321.286229 106.710698 +L 322.003729 121.947907 +L 322.721229 120.775814 +L 323.43873 123.12 +L 324.15623 113.743256 +L 324.87373 114.915349 +L 325.591231 119.603721 +L 326.308731 112.571163 +L 327.026231 110.226977 +L 327.743732 121.947907 +L 328.461232 121.947907 +L 329.178732 112.571163 +L 329.896232 91.473488 +L 330.613733 107.882791 +L 331.331233 117.259535 +L 332.048733 118.431628 +L 332.766234 118.431628 +L 334.201234 120.775814 +L 334.918735 117.259535 +L 335.636235 117.259535 +L 336.353735 121.947907 +L 337.071236 121.947907 +L 337.788736 120.775814 +L 338.506236 121.947907 +L 339.223737 114.915349 +L 339.941237 114.915349 +L 340.658737 117.259535 +L 341.376238 113.743256 +L 342.093738 105.538605 +L 342.811238 114.915349 +L 343.528739 114.915349 +L 344.246239 120.775814 +L 344.963739 120.775814 +L 345.68124 116.087442 +L 346.39874 123.12 +L 347.11624 103.194419 +L 347.833741 100.850233 +L 348.551241 117.259535 +L 349.268741 118.431628 +L 349.986241 107.882791 +L 350.703742 113.743256 +L 351.421242 120.775814 +L 352.138742 118.431628 +L 352.856243 123.12 +L 353.573743 113.743256 +L 354.291243 98.506047 +L 355.008744 121.947907 +L 355.726244 120.775814 +L 357.161245 123.12 +L 357.878745 119.603721 +L 358.596245 100.850233 +L 359.313746 114.915349 +L 360.031246 121.947907 +L 360.748746 121.947907 +L 361.466247 105.538605 +L 362.183747 120.775814 +L 362.901247 121.947907 +L 363.618748 120.775814 +L 366.488749 120.775814 +L 367.206249 118.431628 +L 367.92375 123.12 +L 368.64125 121.947907 +L 369.35875 121.947907 +L 370.07625 123.12 +L 370.793751 123.12 +L 371.511251 121.947907 +L 372.228751 123.12 +L 372.946252 117.259535 +L 373.663752 121.947907 +L 374.381252 118.431628 +L 375.098753 118.431628 +L 375.816253 116.087442 +L 376.533753 118.431628 +L 377.251254 123.12 +L 377.968754 120.775814 +L 379.403755 120.775814 +L 380.121255 123.12 +L 380.838755 121.947907 +L 381.556256 121.947907 +L 382.273756 119.603721 +L 382.991256 121.947907 +L 385.143757 121.947907 +L 385.861258 82.096744 +L 386.578758 118.431628 +L 387.296258 123.12 +L 388.013759 121.947907 +L 388.731259 119.603721 +L 389.448759 123.12 +L 390.166259 118.431628 +L 390.88376 121.947907 +L 391.60126 117.259535 +L 392.31876 116.087442 +L 393.036261 116.087442 +L 393.753761 114.915349 +L 394.471261 100.850233 +L 395.188762 100.850233 +L 395.906262 116.087442 +L 396.623762 119.603721 +L 397.341263 121.947907 +L 398.058763 104.366512 +L 398.776263 118.431628 +L 399.493764 121.947907 +L 400.211264 121.947907 +L 400.928764 120.775814 +L 401.646265 120.775814 +L 402.363765 121.947907 +L 403.081265 121.947907 +L 403.798766 118.431628 +L 404.516266 123.12 +L 405.233766 121.947907 +L 405.951267 118.431628 +L 406.668767 118.431628 +L 407.386267 120.775814 +L 408.821268 100.850233 +L 409.538768 113.743256 +L 410.256268 112.571163 +L 410.973769 105.538605 +L 411.691269 110.226977 +L 413.12627 112.571163 +L 413.84377 111.39907 +L 414.56127 104.366512 +L 415.278771 107.882791 +L 415.996271 118.431628 +L 416.713771 119.603721 +L 417.431272 117.259535 +L 418.148772 117.259535 +L 418.866272 113.743256 +L 419.583773 116.087442 +L 420.301273 109.054884 +L 421.018773 114.915349 +L 421.736274 116.087442 +L 422.453774 111.39907 +L 423.171274 100.850233 +L 423.888775 111.39907 +L 424.606275 116.087442 +L 426.041276 111.39907 +L 426.758776 116.087442 +L 427.476276 107.882791 +L 428.193777 116.087442 +L 428.911277 111.39907 +L 429.628777 120.775814 +L 430.346277 116.087442 +L 431.063778 107.882791 +L 431.781278 120.775814 +L 432.498778 118.431628 +L 433.216279 119.603721 +L 433.933779 114.915349 +L 434.651279 113.743256 +L 435.36878 94.989767 +L 436.08628 91.473488 +L 436.80378 112.571163 +L 437.521281 80.924651 +L 438.238781 120.775814 +L 438.956281 118.431628 +L 439.673782 120.775814 +L 440.391282 90.301395 +L 441.108782 91.473488 +L 442.543783 121.947907 +L 443.261283 118.431628 +L 443.978784 109.054884 +L 444.696284 118.431628 +L 445.413784 118.431628 +L 446.131285 91.473488 +L 446.848785 111.39907 +L 447.566285 114.915349 +L 449.001286 117.259535 +L 449.718786 117.259535 +L 450.436286 114.915349 +L 452.588787 121.947907 +L 453.306288 113.743256 +L 454.023788 121.947907 +L 454.741288 121.947907 +L 456.176289 119.603721 +L 456.893789 123.12 +L 457.61129 119.603721 +L 458.32879 117.259535 +L 459.04629 120.775814 +L 459.763791 121.947907 +L 460.481291 121.947907 +L 461.198791 113.743256 +L 461.916292 123.12 +L 462.633792 97.333953 +L 463.351292 120.775814 +L 464.068793 121.947907 +L 464.786293 118.431628 +L 465.503793 118.431628 +L 466.221294 119.603721 +L 466.938794 121.947907 +L 467.656294 114.915349 +L 468.373795 120.775814 +L 469.091295 118.431628 +L 469.808795 119.603721 +L 470.526295 96.16186 +L 471.243796 120.775814 +L 471.961296 117.259535 +L 472.678796 123.12 +L 473.396297 123.12 +L 474.113797 121.947907 +L 474.831297 113.743256 +L 475.548798 121.947907 +L 476.266298 114.915349 +L 476.983798 118.431628 +L 477.701299 123.12 +L 478.418799 118.431628 +L 479.8538 118.431628 +L 480.5713 114.915349 +L 481.2888 112.571163 +L 482.006301 119.603721 +L 482.723801 119.603721 +L 483.441301 118.431628 +L 484.158802 120.775814 +L 484.876302 120.775814 +L 485.593802 118.431628 +L 486.311303 114.915349 +L 487.028803 114.915349 +L 487.746303 117.259535 +L 488.463804 121.947907 +L 489.898804 121.947907 +L 490.616304 100.850233 +L 491.333805 51.622326 +L 492.051305 75.064186 +L 492.768805 117.259535 +L 493.486306 120.775814 +L 494.203806 118.431628 +L 495.638807 102.022326 +L 496.356307 116.087442 +L 497.073807 96.16186 +L 497.791308 70.375814 +L 498.508808 118.431628 +L 499.226308 69.203721 +L 499.943809 109.054884 +L 500.661309 121.947907 +L 501.378809 55.138605 +L 502.09631 92.645581 +L 502.81381 105.538605 +L 503.53131 48.106047 +L 504.248811 117.259535 +L 504.966311 118.431628 +L 505.683811 91.473488 +L 506.401312 107.882791 +L 507.118812 87.957209 +L 507.836312 107.882791 +L 508.553813 119.603721 +L 509.271313 22.32 +L 509.988813 117.259535 +L 510.706313 118.431628 +L 511.423814 118.431628 +L 512.141314 110.226977 +L 512.858814 116.087442 +L 513.576315 99.67814 +L 514.293815 116.087442 +L 515.011315 119.603721 +L 515.728816 92.645581 +L 516.446316 92.645581 +L 517.163816 110.226977 +L 517.881317 89.129302 +L 518.598817 117.259535 +L 519.316317 118.431628 +L 520.033818 92.645581 +L 520.751318 123.12 +L 521.468818 120.775814 +L 522.186319 119.603721 +L 522.903819 117.259535 +L 523.621319 120.775814 +L 524.33882 119.603721 +L 525.05632 117.259535 +L 525.77382 111.39907 +L 526.491321 114.915349 +L 527.208821 104.366512 +L 528.643822 121.947907 +L 529.361322 123.12 +L 530.078822 113.743256 +L 531.513823 120.775814 +L 532.231323 123.12 +L 532.948823 117.259535 +L 533.666324 121.947907 +L 534.383824 117.259535 +L 535.101324 123.12 +L 536.536325 120.775814 +L 537.253825 123.12 +L 537.971326 123.12 +L 538.688826 120.775814 +L 540.123827 118.431628 +L 540.841327 118.431628 +L 541.558827 119.603721 +L 542.276328 119.603721 +L 542.993828 123.12 +L 543.711328 120.775814 +L 544.428829 83.268837 +L 545.146329 119.603721 +L 545.863829 121.947907 +L 547.29883 121.947907 +L 548.01633 116.087442 +L 548.733831 117.259535 +L 549.451331 104.366512 +L 550.168831 120.775814 +L 550.886331 114.915349 +L 551.603832 121.947907 +L 552.321332 123.12 +L 553.038832 119.603721 +L 553.756333 120.775814 +L 554.473833 114.915349 +L 555.191333 117.259535 +L 555.908834 120.775814 +L 556.626334 121.947907 +L 557.343834 120.775814 +L 558.061335 116.087442 +L 558.778835 118.431628 +L 559.496335 117.259535 +L 560.213836 119.603721 +L 560.931336 113.743256 +L 561.648836 116.087442 +L 562.366337 123.12 +L 563.083837 117.259535 +L 563.801337 118.431628 +L 564.518838 105.538605 +L 565.236338 121.947907 +L 565.953838 117.259535 +L 566.671339 117.259535 +L 567.388839 118.431628 +L 568.106339 106.710698 +L 568.82384 87.957209 +L 569.54134 118.431628 +L 570.25884 121.947907 +L 570.97634 114.915349 +L 571.693841 120.775814 +L 572.411341 119.603721 +L 573.128841 119.603721 +L 573.846342 123.12 +L 575.281342 120.775814 +L 575.998843 118.431628 +L 576.716343 121.947907 +L 577.433843 118.431628 +L 578.151344 121.947907 +L 578.868844 118.431628 +L 579.586344 123.12 +L 580.303845 118.431628 +L 581.021345 120.775814 +L 581.738845 120.775814 +L 582.456346 118.431628 +L 583.173846 123.12 +L 583.891346 118.431628 +L 584.608847 120.775814 +L 585.326347 113.743256 +L 586.043847 121.947907 +L 586.761348 112.571163 +L 587.478848 87.957209 +L 588.196348 121.947907 +L 588.913849 123.12 +L 589.631349 120.775814 +L 590.348849 114.915349 +L 591.066349 120.775814 +L 592.50135 123.12 +L 593.21885 113.743256 +L 593.936351 120.775814 +L 594.653851 119.603721 +L 595.371351 109.054884 +L 596.088852 100.850233 +L 596.806352 116.087442 +L 597.523852 120.775814 +L 598.241353 120.775814 +L 598.958853 114.915349 +L 599.676353 75.064186 +L 600.393854 104.366512 +L 601.111354 114.915349 +L 601.828854 119.603721 +L 602.546355 119.603721 +L 603.263855 85.613023 +L 603.981355 118.431628 +L 604.698856 121.947907 +L 606.133856 121.947907 +L 606.851357 119.603721 +L 607.568857 118.431628 +L 608.286357 120.775814 +L 609.003858 117.259535 +L 609.721358 119.603721 +L 610.438858 123.12 +L 611.156358 120.775814 +L 611.873859 116.087442 +L 612.591359 120.775814 +L 613.308859 114.915349 +L 614.02636 114.915349 +L 614.74386 117.259535 +L 615.46136 120.775814 +L 616.178861 99.67814 +L 616.896361 118.431628 +L 617.613861 104.366512 +L 618.331362 114.915349 +L 619.048862 117.259535 +L 619.766362 105.538605 +L 620.483863 120.775814 +L 621.201363 114.915349 +L 621.918863 110.226977 +L 622.636364 118.431628 +L 622.636364 118.431628 +" clip-path="url(#pf20b14cfc9)" style="fill: none; stroke: #1f77b4; stroke-width: 1.5; stroke-linecap: square"/> - + @@ -1628,7 +1672,7 @@ z - + diff --git a/doc/source/tracking/pypistats/downloads_data.csv b/doc/source/tracking/pypistats/downloads_data.csv index 29ed53a73..768aac7e8 100644 --- a/doc/source/tracking/pypistats/downloads_data.csv +++ b/doc/source/tracking/pypistats/downloads_data.csv @@ -4,13 +4,14 @@ with_mirrors,2022-03-18,255 with_mirrors,2022-03-07,246 with_mirrors,2022-03-04,203 with_mirrors,2022-03-08,150 +with_mirrors,2022-08-26,123 with_mirrors,2022-03-09,114 with_mirrors,2022-03-10,114 +with_mirrors,2022-08-23,104 with_mirrors,2022-03-11,98 with_mirrors,2022-03-06,96 with_mirrors,2022-05-17,92 with_mirrors,2022-03-22,91 -with_mirrors,2022-02-21,88 with_mirrors,2022-04-02,87 without_mirrors,2022-03-18,87 with_mirrors,2022-03-25,86 @@ -19,20 +20,20 @@ with_mirrors,2022-05-06,85 with_mirrors,2022-06-11,85 with_mirrors,2022-03-30,84 with_mirrors,2022-06-06,83 +with_mirrors,2022-08-21,82 with_mirrors,2022-03-24,79 with_mirrors,2022-03-21,76 with_mirrors,2022-04-08,76 with_mirrors,2022-03-20,75 with_mirrors,2022-03-12,71 with_mirrors,2022-04-14,71 -with_mirrors,2022-02-03,67 with_mirrors,2022-03-29,66 with_mirrors,2022-04-07,65 +with_mirrors,2022-08-16,65 without_mirrors,2022-03-10,65 with_mirrors,2022-03-19,64 with_mirrors,2022-03-28,62 -without_mirrors,2022-02-21,62 -with_mirrors,2022-02-22,61 +with_mirrors,2022-08-12,62 with_mirrors,2022-03-26,60 with_mirrors,2022-04-23,60 without_mirrors,2022-03-07,59 @@ -40,36 +41,35 @@ with_mirrors,2022-04-17,58 with_mirrors,2022-07-14,58 with_mirrors,2022-07-25,58 with_mirrors,2022-07-29,58 -with_mirrors,2022-02-27,57 with_mirrors,2022-04-11,57 with_mirrors,2022-06-14,56 with_mirrors,2022-07-10,56 +with_mirrors,2022-08-13,56 with_mirrors,2022-07-05,55 with_mirrors,2022-04-15,54 with_mirrors,2022-07-21,54 with_mirrors,2022-04-24,53 with_mirrors,2022-04-21,52 -with_mirrors,2022-02-10,49 +with_mirrors,2022-08-20,50 with_mirrors,2022-04-26,49 -with_mirrors,2022-02-06,48 with_mirrors,2022-04-19,48 -with_mirrors,2022-02-04,47 -with_mirrors,2022-02-24,47 +with_mirrors,2022-08-09,48 with_mirrors,2022-03-14,47 with_mirrors,2022-03-31,47 without_mirrors,2022-03-04,47 -with_mirrors,2022-03-02,46 -without_mirrors,2022-03-02,46 with_mirrors,2022-04-09,45 +with_mirrors,2022-08-03,44 with_mirrors,2022-04-13,43 +with_mirrors,2022-08-30,43 with_mirrors,2022-06-24,42 -without_mirrors,2022-02-22,42 +with_mirrors,2022-08-15,42 +with_mirrors,2022-08-22,42 without_mirrors,2022-07-29,42 with_mirrors,2022-04-16,41 with_mirrors,2022-05-07,41 with_mirrors,2022-06-08,41 +with_mirrors,2022-08-18,41 with_mirrors,2022-07-30,40 -with_mirrors,2022-02-20,39 with_mirrors,2022-05-19,39 with_mirrors,2022-05-31,39 with_mirrors,2022-04-27,38 @@ -78,11 +78,13 @@ with_mirrors,2022-04-06,37 with_mirrors,2022-05-25,37 with_mirrors,2022-06-25,37 with_mirrors,2022-07-26,37 +with_mirrors,2022-08-24,37 with_mirrors,2022-03-17,36 with_mirrors,2022-03-15,35 with_mirrors,2022-05-10,35 with_mirrors,2022-06-17,35 with_mirrors,2022-07-09,35 +with_mirrors,2022-08-19,35 without_mirrors,2022-05-10,35 with_mirrors,2022-03-13,34 with_mirrors,2022-06-01,34 @@ -92,14 +94,13 @@ with_mirrors,2022-07-19,34 with_mirrors,2022-07-20,34 with_mirrors,2022-05-30,33 with_mirrors,2022-06-23,33 -with_mirrors,2022-02-09,31 -with_mirrors,2022-02-14,31 +without_mirrors,2022-08-03,33 +with_mirrors,2022-08-05,32 with_mirrors,2022-06-10,31 with_mirrors,2022-06-16,31 without_mirrors,2022-03-15,31 without_mirrors,2022-06-14,31 without_mirrors,2022-07-10,31 -with_mirrors,2022-02-25,30 with_mirrors,2022-04-03,30 with_mirrors,2022-06-15,30 with_mirrors,2022-06-28,30 @@ -123,55 +124,48 @@ without_mirrors,2022-03-28,27 without_mirrors,2022-04-02,27 with_mirrors,2022-03-23,26 with_mirrors,2022-06-21,26 -with_mirrors,2022-02-19,25 -with_mirrors,2022-02-07,24 -with_mirrors,2022-03-01,24 -with_mirrors,2022-03-03,24 with_mirrors,2022-03-16,24 -without_mirrors,2022-03-01,24 with_mirrors,2022-04-12,23 +with_mirrors,2022-08-01,21 without_mirrors,2022-03-24,21 -with_mirrors,2022-02-02,20 -with_mirrors,2022-02-08,20 +without_mirrors,2022-08-21,21 with_mirrors,2022-07-23,20 -without_mirrors,2022-02-20,20 without_mirrors,2022-07-23,20 -without_mirrors,2022-02-27,19 -with_mirrors,2022-02-05,18 +with_mirrors,2022-08-07,19 with_mirrors,2022-05-28,18 with_mirrors,2022-06-22,18 -with_mirrors,2022-02-28,17 without_mirrors,2022-04-14,17 without_mirrors,2022-05-17,17 without_mirrors,2022-07-30,17 -with_mirrors,2022-02-15,16 +without_mirrors,2022-08-23,17 with_mirrors,2022-05-26,16 with_mirrors,2022-06-04,16 with_mirrors,2022-07-31,16 without_mirrors,2022-03-09,16 without_mirrors,2022-06-08,16 +without_mirrors,2022-08-26,16 with_mirrors,2022-06-13,15 without_mirrors,2022-06-13,15 -with_mirrors,2022-02-23,14 with_mirrors,2022-05-14,14 +with_mirrors,2022-08-02,14 +with_mirrors,2022-08-29,14 without_mirrors,2022-03-14,14 without_mirrors,2022-03-16,14 -with_mirrors,2022-02-16,13 with_mirrors,2022-05-21,13 with_mirrors,2022-07-22,13 without_mirrors,2022-03-05,13 without_mirrors,2022-07-22,13 -with_mirrors,2022-02-26,12 with_mirrors,2022-05-12,12 -without_mirrors,2022-02-26,12 +with_mirrors,2022-08-04,12 without_mirrors,2022-03-22,12 without_mirrors,2022-03-29,12 -with_mirrors,2022-02-01,11 +without_mirrors,2022-08-30,12 with_mirrors,2022-04-04,11 +with_mirrors,2022-08-10,11 +with_mirrors,2022-08-28,11 without_mirrors,2022-04-12,11 with_mirrors,2022-04-05,10 with_mirrors,2022-04-20,10 -without_mirrors,2022-02-07,10 without_mirrors,2022-04-15,10 without_mirrors,2022-07-09,10 with_mirrors,2022-04-22,9 @@ -186,9 +180,8 @@ without_mirrors,2022-06-03,9 without_mirrors,2022-07-07,9 without_mirrors,2022-07-19,9 with_mirrors,2022-07-28,8 -without_mirrors,2022-02-06,8 -without_mirrors,2022-02-14,8 -without_mirrors,2022-02-15,8 +with_mirrors,2022-08-06,8 +with_mirrors,2022-08-17,8 without_mirrors,2022-04-13,8 without_mirrors,2022-05-19,8 without_mirrors,2022-05-25,8 @@ -196,23 +189,26 @@ without_mirrors,2022-06-17,8 without_mirrors,2022-07-14,8 without_mirrors,2022-07-28,8 without_mirrors,2022-07-31,8 -with_mirrors,2022-02-13,7 +without_mirrors,2022-08-17,8 +without_mirrors,2022-08-18,8 +without_mirrors,2022-08-24,8 +without_mirrors,2022-08-29,8 with_mirrors,2022-05-08,7 with_mirrors,2022-05-15,7 with_mirrors,2022-06-26,7 with_mirrors,2022-06-30,7 -without_mirrors,2022-02-28,7 without_mirrors,2022-03-23,7 without_mirrors,2022-03-25,7 without_mirrors,2022-05-15,7 without_mirrors,2022-05-30,7 without_mirrors,2022-06-04,7 without_mirrors,2022-07-25,7 +without_mirrors,2022-08-15,7 with_mirrors,2022-05-16,6 with_mirrors,2022-05-18,6 with_mirrors,2022-06-20,6 -without_mirrors,2022-02-16,6 -without_mirrors,2022-02-23,6 +with_mirrors,2022-08-11,6 +with_mirrors,2022-08-25,6 without_mirrors,2022-03-11,6 without_mirrors,2022-03-19,6 without_mirrors,2022-03-31,6 @@ -227,19 +223,16 @@ without_mirrors,2022-06-01,6 without_mirrors,2022-06-06,6 without_mirrors,2022-06-10,6 without_mirrors,2022-06-11,6 +without_mirrors,2022-08-11,6 +without_mirrors,2022-08-19,6 +without_mirrors,2022-08-25,6 with_mirrors,2022-05-04,5 with_mirrors,2022-05-05,5 with_mirrors,2022-06-07,5 with_mirrors,2022-06-12,5 with_mirrors,2022-07-03,5 -without_mirrors,2022-02-01,5 -without_mirrors,2022-02-03,5 -without_mirrors,2022-02-04,5 -without_mirrors,2022-02-05,5 -without_mirrors,2022-02-10,5 -without_mirrors,2022-02-13,5 -without_mirrors,2022-02-25,5 -without_mirrors,2022-03-03,5 +with_mirrors,2022-08-14,5 +with_mirrors,2022-08-31,5 without_mirrors,2022-03-12,5 without_mirrors,2022-03-20,5 without_mirrors,2022-03-21,5 @@ -256,13 +249,15 @@ without_mirrors,2022-06-28,5 without_mirrors,2022-06-30,5 without_mirrors,2022-07-03,5 without_mirrors,2022-07-05,5 -with_mirrors,2022-02-11,4 +without_mirrors,2022-08-04,5 +without_mirrors,2022-08-09,5 +without_mirrors,2022-08-22,5 +without_mirrors,2022-08-31,5 with_mirrors,2022-05-03,4 with_mirrors,2022-05-23,4 with_mirrors,2022-06-02,4 with_mirrors,2022-06-09,4 -without_mirrors,2022-02-08,4 -without_mirrors,2022-02-09,4 +with_mirrors,2022-08-08,4 without_mirrors,2022-03-17,4 without_mirrors,2022-03-26,4 without_mirrors,2022-04-05,4 @@ -276,15 +271,15 @@ without_mirrors,2022-06-02,4 without_mirrors,2022-06-19,4 without_mirrors,2022-06-20,4 without_mirrors,2022-07-21,4 -with_mirrors,2022-02-12,3 +without_mirrors,2022-08-01,4 +without_mirrors,2022-08-02,4 +without_mirrors,2022-08-08,4 +without_mirrors,2022-08-12,4 with_mirrors,2022-05-09,3 with_mirrors,2022-07-02,3 with_mirrors,2022-07-06,3 with_mirrors,2022-07-13,3 with_mirrors,2022-07-15,3 -without_mirrors,2022-02-11,3 -without_mirrors,2022-02-12,3 -without_mirrors,2022-02-24,3 without_mirrors,2022-04-04,3 without_mirrors,2022-04-07,3 without_mirrors,2022-04-22,3 @@ -305,15 +300,16 @@ without_mirrors,2022-07-15,3 without_mirrors,2022-07-20,3 without_mirrors,2022-07-26,3 without_mirrors,2022-07-27,3 -with_mirrors,2022-02-17,2 -with_mirrors,2022-02-18,2 +without_mirrors,2022-08-10,3 +without_mirrors,2022-08-14,3 +without_mirrors,2022-08-16,3 +without_mirrors,2022-08-20,3 +without_mirrors,2022-08-28,3 with_mirrors,2022-04-25,2 with_mirrors,2022-05-13,2 with_mirrors,2022-06-27,2 with_mirrors,2022-07-11,2 -without_mirrors,2022-02-17,2 -without_mirrors,2022-02-18,2 -without_mirrors,2022-02-19,2 +with_mirrors,2022-08-27,2 without_mirrors,2022-03-06,2 without_mirrors,2022-04-17,2 without_mirrors,2022-04-25,2 @@ -331,13 +327,15 @@ without_mirrors,2022-06-27,2 without_mirrors,2022-07-08,2 without_mirrors,2022-07-11,2 without_mirrors,2022-07-17,2 +without_mirrors,2022-08-05,2 +without_mirrors,2022-08-06,2 +without_mirrors,2022-08-07,2 with_mirrors,2022-04-18,1 with_mirrors,2022-05-01,1 with_mirrors,2022-06-05,1 with_mirrors,2022-07-04,1 with_mirrors,2022-07-12,1 with_mirrors,2022-07-18,1 -without_mirrors,2022-02-02,1 without_mirrors,2022-04-03,1 without_mirrors,2022-04-18,1 without_mirrors,2022-04-23,1 @@ -352,6 +350,69 @@ without_mirrors,2022-06-29,1 without_mirrors,2022-07-04,1 without_mirrors,2022-07-12,1 without_mirrors,2022-07-18,1 +without_mirrors,2022-08-13,1 +with_mirrors,2022-02-21,88 +with_mirrors,2022-02-03,67 +without_mirrors,2022-02-21,62 +with_mirrors,2022-02-22,61 +with_mirrors,2022-02-27,57 +with_mirrors,2022-02-10,49 +with_mirrors,2022-02-06,48 +with_mirrors,2022-02-04,47 +with_mirrors,2022-02-24,47 +with_mirrors,2022-03-02,46 +without_mirrors,2022-03-02,46 +without_mirrors,2022-02-22,42 +with_mirrors,2022-02-20,39 +with_mirrors,2022-02-09,31 +with_mirrors,2022-02-14,31 +with_mirrors,2022-02-25,30 +with_mirrors,2022-02-19,25 +with_mirrors,2022-02-07,24 +with_mirrors,2022-03-01,24 +with_mirrors,2022-03-03,24 +without_mirrors,2022-03-01,24 +with_mirrors,2022-02-02,20 +with_mirrors,2022-02-08,20 +without_mirrors,2022-02-20,20 +without_mirrors,2022-02-27,19 +with_mirrors,2022-02-05,18 +with_mirrors,2022-02-28,17 +with_mirrors,2022-02-15,16 +with_mirrors,2022-02-23,14 +with_mirrors,2022-02-16,13 +with_mirrors,2022-02-26,12 +without_mirrors,2022-02-26,12 +with_mirrors,2022-02-01,11 +without_mirrors,2022-02-07,10 +without_mirrors,2022-02-06,8 +without_mirrors,2022-02-14,8 +without_mirrors,2022-02-15,8 +with_mirrors,2022-02-13,7 +without_mirrors,2022-02-28,7 +without_mirrors,2022-02-16,6 +without_mirrors,2022-02-23,6 +without_mirrors,2022-02-01,5 +without_mirrors,2022-02-03,5 +without_mirrors,2022-02-04,5 +without_mirrors,2022-02-05,5 +without_mirrors,2022-02-10,5 +without_mirrors,2022-02-13,5 +without_mirrors,2022-02-25,5 +without_mirrors,2022-03-03,5 +with_mirrors,2022-02-11,4 +without_mirrors,2022-02-08,4 +without_mirrors,2022-02-09,4 +with_mirrors,2022-02-12,3 +without_mirrors,2022-02-11,3 +without_mirrors,2022-02-12,3 +without_mirrors,2022-02-24,3 +with_mirrors,2022-02-17,2 +with_mirrors,2022-02-18,2 +without_mirrors,2022-02-17,2 +without_mirrors,2022-02-18,2 +without_mirrors,2022-02-19,2 +without_mirrors,2022-02-02,1 with_mirrors,2022-01-12,67 with_mirrors,2022-01-19,63 with_mirrors,2022-01-21,53 diff --git a/doc/source/tracking/pypistats/sys_downloads_data.csv b/doc/source/tracking/pypistats/sys_downloads_data.csv index 4b6036b6b..f5e3f2522 100644 --- a/doc/source/tracking/pypistats/sys_downloads_data.csv +++ b/doc/source/tracking/pypistats/sys_downloads_data.csv @@ -1,12 +1,10 @@ category,date,downloads null,2022-03-18,77 null,2022-03-10,64 -null,2022-02-21,60 null,2022-03-07,47 -null,2022-02-22,40 -null,2022-03-02,38 null,2022-03-04,37 null,2022-07-29,35 +null,2022-08-03,31 null,2022-05-10,29 null,2022-03-30,28 null,2022-07-10,27 @@ -16,10 +14,9 @@ null,2022-04-02,25 null,2022-06-14,25 Linux,2022-03-28,24 null,2022-03-13,24 -null,2022-03-01,23 -null,2022-02-20,20 -null,2022-02-27,19 +null,2022-08-21,20 null,2022-03-08,19 +Linux,2022-08-26,16 null,2022-05-17,16 null,2022-07-30,16 null,2022-07-23,14 @@ -28,24 +25,25 @@ null,2022-03-05,13 null,2022-06-13,13 Windows,2022-06-08,13 null,2022-03-24,12 -null,2022-02-26,11 null,2022-07-22,11 Linux,2022-03-18,10 Windows,2022-07-09,10 Linux,2022-03-07,9 null,2022-03-09,9 -Windows,2022-02-07,9 Linux,2022-03-04,8 Linux,2022-07-07,8 +Linux,2022-08-30,8 Windows,2022-03-29,8 Linux,2022-05-25,7 -null,2022-02-06,7 +Linux,2022-08-15,7 +Linux,2022-08-23,7 +Linux,2022-08-29,7 null,2022-04-15,7 null,2022-04-19,7 -Linux,2022-03-02,6 Linux,2022-03-22,6 Linux,2022-06-11,6 -null,2022-02-16,6 +Linux,2022-08-17,6 +Linux,2022-08-19,6 null,2022-03-16,6 null,2022-04-12,6 null,2022-04-13,6 @@ -56,18 +54,18 @@ Linux,2022-03-16,5 Linux,2022-06-03,5 Linux,2022-07-25,5 Linux,2022-07-29,5 -null,2022-02-14,5 +Linux,2022-08-25,5 null,2022-03-14,5 null,2022-05-15,5 null,2022-05-16,5 null,2022-05-19,5 null,2022-07-19,5 +null,2022-08-23,5 Windows,2022-03-24,5 Windows,2022-04-06,5 Windows,2022-05-04,5 Windows,2022-07-14,5 Windows,2022-07-23,5 -Linux,2022-02-23,4 Linux,2022-03-08,4 Linux,2022-03-09,4 Linux,2022-03-23,4 @@ -79,14 +77,14 @@ Linux,2022-06-12,4 Linux,2022-06-14,4 Linux,2022-06-15,4 Linux,2022-06-17,4 -null,2022-02-13,4 -null,2022-02-15,4 +Linux,2022-08-31,4 null,2022-03-11,4 null,2022-04-24,4 null,2022-04-26,4 null,2022-06-01,4 null,2022-07-28,4 -Windows,2022-02-15,4 +null,2022-08-01,4 +null,2022-08-18,4 Windows,2022-03-08,4 Windows,2022-03-12,4 Windows,2022-03-14,4 @@ -95,7 +93,8 @@ Windows,2022-03-22,4 Windows,2022-03-31,4 Windows,2022-05-10,4 Windows,2022-05-11,4 -Linux,2022-02-28,3 +Windows,2022-08-23,4 +Windows,2022-08-24,4 Linux,2022-03-13,3 Linux,2022-03-14,3 Linux,2022-03-17,3 @@ -113,17 +112,21 @@ Linux,2022-06-28,3 Linux,2022-07-19,3 Linux,2022-07-20,3 Linux,2022-07-28,3 -null,2022-02-12,3 -null,2022-02-25,3 -null,2022-03-03,3 +Linux,2022-08-10,3 +Linux,2022-08-11,3 +Linux,2022-08-16,3 +Linux,2022-08-18,3 +Linux,2022-08-20,3 +Linux,2022-08-22,3 +Linux,2022-08-24,3 null,2022-03-20,3 null,2022-03-21,3 null,2022-04-08,3 null,2022-05-26,3 null,2022-06-03,3 null,2022-06-17,3 -Windows,2022-02-03,3 -Windows,2022-02-10,3 +null,2022-08-04,3 +null,2022-08-28,3 Windows,2022-03-09,3 Windows,2022-03-15,3 Windows,2022-03-16,3 @@ -136,14 +139,11 @@ Windows,2022-05-06,3 Windows,2022-05-19,3 Windows,2022-06-24,3 Windows,2022-07-21,3 -Darwin,2022-02-01,2 +Windows,2022-08-11,3 +Windows,2022-08-30,3 Darwin,2022-03-14,2 Darwin,2022-05-30,2 Darwin,2022-06-10,2 -Linux,2022-02-03,2 -Linux,2022-02-05,2 -Linux,2022-02-08,2 -Linux,2022-02-14,2 Linux,2022-03-15,2 Linux,2022-03-20,2 Linux,2022-03-21,2 @@ -158,13 +158,10 @@ Linux,2022-07-05,2 Linux,2022-07-06,2 Linux,2022-07-10,2 Linux,2022-07-26,2 -null,2022-02-01,2 -null,2022-02-04,2 -null,2022-02-09,2 -null,2022-02-11,2 -null,2022-02-17,2 -null,2022-02-19,2 -null,2022-02-28,2 +Linux,2022-08-02,2 +Linux,2022-08-08,2 +Linux,2022-08-09,2 +Linux,2022-08-14,2 null,2022-04-14,2 null,2022-04-21,2 null,2022-05-05,2 @@ -181,10 +178,11 @@ null,2022-07-05,2 null,2022-07-14,2 null,2022-07-17,2 null,2022-07-27,2 -Windows,2022-02-04,2 -Windows,2022-02-05,2 -Windows,2022-02-28,2 -Windows,2022-03-02,2 +null,2022-08-02,2 +null,2022-08-07,2 +null,2022-08-08,2 +null,2022-08-09,2 +null,2022-08-12,2 Windows,2022-03-07,2 Windows,2022-03-11,2 Windows,2022-03-23,2 @@ -215,9 +213,6 @@ Windows,2022-07-10,2 Windows,2022-07-15,2 Windows,2022-07-25,2 Windows,2022-07-31,2 -Darwin,2022-02-07,1 -Darwin,2022-02-18,1 -Darwin,2022-02-21,1 Darwin,2022-03-04,1 Darwin,2022-03-07,1 Darwin,2022-03-22,1 @@ -237,18 +232,10 @@ Darwin,2022-05-24,1 Darwin,2022-07-04,1 Darwin,2022-07-05,1 Darwin,2022-07-29,1 -Linux,2022-02-01,1 -Linux,2022-02-04,1 -Linux,2022-02-06,1 -Linux,2022-02-09,1 -Linux,2022-02-10,1 -Linux,2022-02-13,1 -Linux,2022-02-18,1 -Linux,2022-02-21,1 -Linux,2022-02-22,1 -Linux,2022-02-24,1 -Linux,2022-02-25,1 -Linux,2022-03-03,1 +Darwin,2022-08-12,1 +Darwin,2022-08-18,1 +Darwin,2022-08-23,1 +Darwin,2022-08-31,1 Linux,2022-03-06,1 Linux,2022-03-10,1 Linux,2022-03-12,1 @@ -286,11 +273,10 @@ Linux,2022-07-21,1 Linux,2022-07-22,1 Linux,2022-07-23,1 Linux,2022-07-30,1 -null,2022-02-05,1 -null,2022-02-08,1 -null,2022-02-10,1 -null,2022-02-23,1 -null,2022-02-24,1 +Linux,2022-08-03,1 +Linux,2022-08-04,1 +Linux,2022-08-06,1 +Linux,2022-08-12,1 null,2022-03-06,1 null,2022-03-17,1 null,2022-03-19,1 @@ -327,18 +313,14 @@ null,2022-07-11,1 null,2022-07-12,1 null,2022-07-13,1 null,2022-07-26,1 -Windows,2022-02-02,1 -Windows,2022-02-08,1 -Windows,2022-02-09,1 -Windows,2022-02-11,1 -Windows,2022-02-14,1 -Windows,2022-02-22,1 -Windows,2022-02-23,1 -Windows,2022-02-24,1 -Windows,2022-02-25,1 -Windows,2022-02-26,1 -Windows,2022-03-01,1 -Windows,2022-03-03,1 +null,2022-08-05,1 +null,2022-08-13,1 +null,2022-08-14,1 +null,2022-08-17,1 +null,2022-08-22,1 +null,2022-08-24,1 +null,2022-08-25,1 +null,2022-08-30,1 Windows,2022-03-04,1 Windows,2022-03-13,1 Windows,2022-03-30,1 @@ -385,6 +367,85 @@ Windows,2022-07-22,1 Windows,2022-07-27,1 Windows,2022-07-28,1 Windows,2022-07-29,1 +Windows,2022-08-03,1 +Windows,2022-08-04,1 +Windows,2022-08-05,1 +Windows,2022-08-06,1 +Windows,2022-08-09,1 +Windows,2022-08-17,1 +Windows,2022-08-21,1 +Windows,2022-08-22,1 +Windows,2022-08-29,1 +null,2022-02-21,60 +null,2022-02-22,40 +null,2022-03-02,38 +null,2022-03-01,23 +null,2022-02-20,20 +null,2022-02-27,19 +null,2022-02-26,11 +Windows,2022-02-07,9 +null,2022-02-06,7 +Linux,2022-03-02,6 +null,2022-02-16,6 +null,2022-02-14,5 +Linux,2022-02-23,4 +null,2022-02-13,4 +null,2022-02-15,4 +Windows,2022-02-15,4 +Linux,2022-02-28,3 +null,2022-02-12,3 +null,2022-02-25,3 +null,2022-03-03,3 +Windows,2022-02-03,3 +Windows,2022-02-10,3 +Darwin,2022-02-01,2 +Linux,2022-02-03,2 +Linux,2022-02-05,2 +Linux,2022-02-08,2 +Linux,2022-02-14,2 +null,2022-02-01,2 +null,2022-02-04,2 +null,2022-02-09,2 +null,2022-02-11,2 +null,2022-02-17,2 +null,2022-02-19,2 +null,2022-02-28,2 +Windows,2022-02-04,2 +Windows,2022-02-05,2 +Windows,2022-02-28,2 +Windows,2022-03-02,2 +Darwin,2022-02-07,1 +Darwin,2022-02-18,1 +Darwin,2022-02-21,1 +Linux,2022-02-01,1 +Linux,2022-02-04,1 +Linux,2022-02-06,1 +Linux,2022-02-09,1 +Linux,2022-02-10,1 +Linux,2022-02-13,1 +Linux,2022-02-18,1 +Linux,2022-02-21,1 +Linux,2022-02-22,1 +Linux,2022-02-24,1 +Linux,2022-02-25,1 +Linux,2022-03-03,1 +null,2022-02-05,1 +null,2022-02-08,1 +null,2022-02-10,1 +null,2022-02-23,1 +null,2022-02-24,1 +Windows,2022-02-02,1 +Windows,2022-02-08,1 +Windows,2022-02-09,1 +Windows,2022-02-11,1 +Windows,2022-02-14,1 +Windows,2022-02-22,1 +Windows,2022-02-23,1 +Windows,2022-02-24,1 +Windows,2022-02-25,1 +Windows,2022-02-26,1 +Windows,2022-03-01,1 +Windows,2022-03-03,1 null,2022-01-10,20 null,2022-01-21,13 Linux,2022-01-21,10 diff --git a/doc/source/tracking/traffic/clones.csv b/doc/source/tracking/traffic/clones.csv index adbed85be..0ac239872 100644 --- a/doc/source/tracking/traffic/clones.csv +++ b/doc/source/tracking/traffic/clones.csv @@ -323,7 +323,6 @@ _date,total_clones,unique_clones 2021-12-16,23,12 2021-12-17,1,1 2021-12-18,1,1 -2021-12-20,1,1 2021-12-20,49,18 2021-12-21,52,24 2021-12-22,2,2 @@ -386,45 +385,37 @@ _date,total_clones,unique_clones 2022-03-05,13,8 2022-03-06,15,9 2022-03-07,58,22 -2022-03-07,57,22 2022-03-08,22,10 2022-03-09,12,8 2022-03-10,2,1 2022-03-11,6,4 2022-03-12,2,1 -2022-03-14,10,4 2022-03-14,11,5 2022-03-16,90,21 2022-03-17,129,43 2022-03-18,34,15 2022-03-19,2,2 2022-03-20,17,1 -2022-03-21,3,3 2022-03-21,4,4 2022-03-22,3,3 2022-03-23,1,1 2022-03-24,1,1 2022-03-25,2,2 2022-03-27,2,1 -2022-03-28,1,1 2022-03-28,2,2 2022-04-01,1,1 2022-04-02,1,1 -2022-04-04,1,1 2022-04-04,3,3 2022-04-05,3,2 2022-04-06,1,1 2022-04-08,1,1 2022-04-09,2,2 2022-04-11,2,2 -2022-04-11,1,1 2022-04-15,1,1 2022-04-16,2,2 2022-04-17,4,2 -2022-04-18,1,1 2022-04-18,2,2 2022-04-24,1,1 -2022-04-25,1,1 2022-04-25,3,3 2022-04-26,3,2 2022-04-28,5,4 @@ -432,77 +423,64 @@ _date,total_clones,unique_clones 2022-04-30,5,3 2022-05-01,2,2 2022-05-02,3,3 -2022-05-02,1,1 2022-05-04,9,5 2022-05-05,18,7 2022-05-06,1,1 -2022-05-09,1,1 2022-05-09,2,2 2022-05-11,1,1 2022-05-12,1,1 2022-05-13,13,5 2022-05-14,1,1 -2022-05-16,11,7 2022-05-16,13,8 2022-05-17,1,1 2022-05-18,2,1 2022-05-20,29,12 2022-05-21,2,1 2022-05-23,43,19 -2022-05-23,42,19 2022-05-24,12,8 2022-05-25,99,29 2022-05-26,42,17 2022-05-27,5,3 2022-05-30,2,2 -2022-05-30,1,1 2022-05-31,3,2 2022-06-01,2,2 2022-06-03,46,2 2022-06-04,4,2 2022-06-05,1,1 -2022-06-06,1,1 2022-06-06,2,2 2022-06-07,18,2 2022-06-09,1,1 2022-06-10,1,1 2022-06-11,1,1 -2022-06-13,7,5 2022-06-13,8,6 2022-06-14,36,19 2022-06-16,1,1 2022-06-17,4,3 2022-06-20,25,6 -2022-06-20,5,4 2022-06-21,29,13 2022-06-22,1,1 2022-06-25,4,3 2022-06-26,3,2 -2022-06-27,10,6 2022-06-27,11,6 2022-06-29,3,2 2022-06-30,6,3 2022-07-01,2,2 2022-07-03,1,1 -2022-07-04,4,3 2022-07-04,5,4 2022-07-05,7,4 2022-07-06,4,2 2022-07-07,41,19 2022-07-08,3,3 -2022-07-11,30,14 2022-07-11,31,15 2022-07-12,1,1 2022-07-13,7,4 2022-07-15,18,9 2022-07-17,1,1 2022-07-18,3,3 -2022-07-18,2,2 2022-07-20,2,2 2022-07-21,69,24 2022-07-22,7,5 2022-07-24,1,1 -2022-07-25,1,1 2022-07-25,2,2 2022-07-26,28,11 2022-07-27,17,10 @@ -516,14 +494,12 @@ _date,total_clones,unique_clones 2022-08-05,3,3 2022-08-06,2,1 2022-08-08,2,2 -2022-08-08,1,1 2022-08-09,4,2 2022-08-10,13,7 2022-08-11,17,2 2022-08-12,16,1 2022-08-13,2,1 2022-08-14,2,1 -2022-08-15,31,14 2022-08-15,32,15 2022-08-16,60,25 2022-08-17,1,1 @@ -535,3 +511,9 @@ _date,total_clones,unique_clones 2022-08-25,1,1 2022-08-26,315,44 2022-08-28,7,4 +2022-08-29,14,7 +2022-08-30,104,37 +2022-08-31,18,9 +2022-09-01,2,2 +2022-09-03,9,5 +2022-09-04,1,1 diff --git a/doc/source/tracking/traffic/plots.svg b/doc/source/tracking/traffic/plots.svg index 1eb547e9a..3af918811 100644 --- a/doc/source/tracking/traffic/plots.svg +++ b/doc/source/tracking/traffic/plots.svg @@ -6,7 +6,7 @@ - 2022-08-29T01:00:16.160434 + 2022-09-05T01:06:05.224981 image/svg+xml @@ -41,12 +41,12 @@ z - - + @@ -136,12 +136,12 @@ z - + - + - + - + @@ -224,12 +224,12 @@ z - + - + - + - - + + + + + @@ -302,29 +323,29 @@ z - + - + - - + + - + - - + + @@ -457,12 +478,12 @@ z - - + @@ -475,7 +496,7 @@ L -3.5 0 - + @@ -490,7 +511,7 @@ L -3.5 0 - + @@ -505,7 +526,7 @@ L -3.5 0 - + @@ -520,1005 +541,970 @@ L -3.5 0 +L 116.344822 129.61084 +L 117.326007 130.778182 +L 118.307192 130.778182 +L 119.288377 130.194511 +L 120.269562 130.194511 +L 121.250747 126.108813 +L 122.231932 126.108813 +L 123.213118 130.778182 +L 124.194303 130.778182 +L 125.175488 127.859826 +L 126.156673 128.735333 +L 127.137858 130.778182 +L 128.119043 129.319004 +L 129.100229 129.902675 +L 130.081414 129.902675 +L 131.062599 130.778182 +L 133.024969 129.61084 +L 134.006154 130.486346 +L 134.98734 130.778182 +L 135.968525 130.486346 +L 136.94971 130.486346 +L 137.930895 130.194511 +L 138.91208 130.486346 +L 139.893265 130.486346 +L 140.874451 129.902675 +L 141.855636 130.486346 +L 142.836821 130.486346 +L 143.818006 126.98432 +L 144.799191 129.319004 +L 145.780376 130.486346 +L 146.761561 123.774129 +L 147.742747 130.778182 +L 155.592228 130.778182 +L 156.573413 130.486346 +L 157.554598 130.778182 +L 164.422894 130.778182 +L 165.404079 129.902675 +L 166.385265 130.194511 +L 167.36645 130.778182 +L 168.347635 130.194511 +L 169.32882 129.319004 +L 170.310005 130.486346 +L 171.29119 130.486346 +L 172.272376 129.902675 +L 173.253561 126.108813 +L 174.234746 130.486346 +L 175.215931 130.778182 +L 176.197116 130.486346 +L 177.178301 129.027169 +L 178.159487 130.486346 +L 179.140672 130.194511 +L 180.121857 128.151662 +L 181.103042 129.902675 +L 182.084227 129.027169 +L 183.065412 130.486346 +L 184.046598 130.194511 +L 185.027783 130.486346 +L 186.008968 130.194511 +L 187.971338 130.194511 +L 188.952523 129.61084 +L 189.933708 130.778182 +L 190.914894 130.778182 +L 191.896079 129.61084 +L 192.877264 129.61084 +L 193.858449 128.151662 +L 194.839634 130.194511 +L 195.820819 129.319004 +L 196.802005 130.778182 +L 197.78319 128.443497 +L 198.764375 129.902675 +L 199.74556 130.194511 +L 200.726745 129.902675 +L 201.70793 128.735333 +L 202.689116 130.486346 +L 203.670301 129.61084 +L 204.651486 126.400649 +L 205.632671 128.735333 +L 206.613856 126.108813 +L 207.595041 110.349693 +L 208.576226 129.319004 +L 209.557412 130.778182 +L 210.538597 129.902675 +L 211.519782 127.276155 +L 212.500967 127.859826 +L 213.482152 129.319004 +L 214.463337 125.525142 +L 215.444523 129.902675 +L 216.425708 129.902675 +L 217.406893 130.486346 +L 218.388078 126.98432 +L 219.369263 127.859826 +L 220.350448 130.778182 +L 221.331634 130.194511 +L 222.312819 130.778182 +L 223.294004 129.61084 +L 224.275189 116.47824 +L 225.256374 124.941471 +L 226.237559 126.400649 +L 227.218745 129.319004 +L 228.19993 130.778182 +L 229.181115 128.735333 +L 230.1623 129.902675 +L 231.143485 126.692484 +L 232.12467 129.902675 +L 233.105855 127.276155 +L 234.087041 123.774129 +L 235.068226 126.98432 +L 236.049411 129.319004 +L 237.030596 123.482293 +L 238.011781 123.482293 +L 238.992966 124.065964 +L 239.974152 112.684378 +L 240.955337 119.688431 +L 241.936522 119.688431 +L 242.917707 125.525142 +L 243.898892 121.147609 +L 244.880077 125.233306 +L 245.861263 130.194511 +L 246.842448 130.486346 +L 247.823633 124.065964 +L 248.804818 123.190457 +L 249.786003 123.774129 +L 250.767188 121.73128 +L 251.748373 119.10476 +L 252.729559 129.61084 +L 253.710744 130.486346 +L 254.691929 124.065964 +L 255.673114 124.649635 +L 256.654299 116.47824 +L 257.635484 123.774129 +L 258.61667 124.065964 +L 259.597855 130.486346 +L 260.57904 129.902675 +L 261.560225 123.190457 +L 262.54141 117.353746 +L 263.522595 124.3578 +L 264.503781 122.606786 +L 265.484966 114.143555 +L 266.466151 124.3578 +L 267.447336 130.486346 +L 268.428521 123.190457 +L 269.409706 119.10476 +L 270.390892 117.645582 +L 271.372077 120.563937 +L 272.353262 121.73128 +L 273.334447 130.194511 +L 274.315632 123.482293 +L 275.296817 120.272102 +L 276.278002 123.774129 +L 277.259188 123.482293 +L 278.240373 122.898622 +L 279.221558 128.443497 +L 280.202743 123.774129 +L 281.183928 122.606786 +L 282.165113 123.774129 +L 283.146299 124.065964 +L 284.127484 124.065964 +L 285.108669 130.778182 +L 286.089854 130.778182 +L 287.071039 123.482293 +L 288.052224 122.023115 +L 289.03341 123.482293 +L 290.014595 117.645582 +L 290.99578 119.10476 +L 291.976965 130.778182 +L 292.95815 123.774129 +L 293.939335 122.898622 +L 294.92052 122.606786 +L 295.901706 122.023115 +L 296.882891 124.3578 +L 297.864076 130.486346 +L 298.845261 123.190457 +L 299.826446 121.439444 +L 300.807631 118.812924 +L 301.788817 118.521089 +L 302.770002 87.878356 +L 304.732372 130.778182 +L 305.713557 124.941471 +L 306.694742 124.3578 +L 307.675928 127.859826 +L 308.657113 130.778182 +L 309.638298 130.486346 +L 310.619483 127.276155 +L 311.600668 128.151662 +L 312.581853 130.486346 +L 313.563039 129.902675 +L 314.544224 130.486346 +L 315.525409 130.778182 +L 316.506594 130.486346 +L 317.487779 130.778182 +L 318.468964 129.902675 +L 319.450149 130.194511 +L 320.431335 130.778182 +L 323.37489 130.778182 +L 324.356075 129.61084 +L 325.33726 130.486346 +L 326.318446 130.778182 +L 327.299631 130.486346 +L 328.280816 129.027169 +L 329.262001 130.778182 +L 330.243186 124.3578 +L 331.224371 130.194511 +L 332.205557 130.778182 +L 334.167927 130.194511 +L 335.149112 130.778182 +L 336.130297 130.486346 +L 337.111482 130.778182 +L 338.092667 129.902675 +L 339.073853 130.486346 +L 340.055038 130.194511 +L 341.036223 130.778182 +L 342.998593 130.778182 +L 344.960964 130.194511 +L 345.942149 129.027169 +L 346.923334 130.486346 +L 347.904519 130.486346 +L 348.885704 127.859826 +L 349.866889 126.692484 +L 350.848075 130.778182 +L 352.810445 130.778182 +L 354.772815 130.194511 +L 355.754 130.486346 +L 356.735186 128.151662 +L 357.716371 122.606786 +L 358.697556 129.319004 +L 359.678741 121.147609 +L 360.659926 128.735333 +L 361.641111 130.486346 +L 362.622296 130.778182 +L 364.584667 130.778182 +L 365.565852 130.486346 +L 366.547037 130.778182 +L 367.528222 130.778182 +L 368.509407 129.61084 +L 369.490593 115.602733 +L 370.471778 124.3578 +L 371.452963 130.194511 +L 372.434148 126.98432 +L 373.415333 115.894569 +L 374.396518 114.727226 +L 375.377704 112.100706 +L 376.358889 118.229253 +L 377.340074 126.108813 +L 378.321259 126.98432 +L 379.302444 130.778182 +L 380.283629 128.443497 +L 381.264814 130.778182 +L 382.246 130.778182 +L 383.227185 126.692484 +L 384.20837 130.194511 +L 385.189555 115.310898 +L 386.17074 126.98432 +L 387.151925 114.435391 +L 388.133111 127.276155 +L 389.114296 129.61084 +L 390.095481 126.400649 +L 391.076666 113.559884 +L 392.057851 126.108813 +L 393.039036 126.98432 +L 394.020222 130.194511 +L 395.001407 130.778182 +L 395.982592 130.778182 +L 396.963777 130.194511 +L 397.944962 128.735333 +L 398.926147 127.567991 +L 399.907333 126.98432 +L 400.888518 130.778182 +L 401.869703 130.778182 +L 402.850888 125.816977 +L 403.832073 123.774129 +L 404.813258 130.778182 +L 405.794443 130.194511 +L 406.775629 130.778182 +L 407.756814 128.151662 +L 408.737999 130.194511 +L 409.719184 130.778182 +L 410.700369 130.486346 +L 411.681554 129.902675 +L 412.66274 129.902675 +L 413.643925 119.396595 +L 414.62511 129.902675 +L 415.606295 129.902675 +L 416.58748 126.108813 +L 417.568665 118.812924 +L 418.549851 127.276155 +L 419.531036 127.276155 +L 420.512221 130.194511 +L 421.493406 125.816977 +L 422.474591 117.937417 +L 423.455776 99.259942 +L 424.436961 127.276155 +L 425.418147 122.606786 +L 426.399332 130.778182 +L 427.380517 118.521089 +L 428.361702 116.186404 +L 429.342887 129.027169 +L 430.324072 124.3578 +L 431.305258 130.778182 +L 432.286443 130.778182 +L 433.267628 116.770075 +L 434.248813 115.894569 +L 435.229998 130.486346 +L 436.211183 126.108813 +L 437.192369 130.778182 +L 438.173554 130.778182 +L 439.154739 130.194511 +L 440.135924 130.486346 +L 441.117109 129.902675 +L 442.098294 130.778182 +L 443.07948 126.692484 +L 444.060665 124.3578 +L 445.04185 113.559884 +L 446.023035 127.859826 +L 447.00422 130.486346 +L 447.985405 123.482293 +L 448.96659 130.486346 +L 449.947776 128.443497 +L 450.928961 125.816977 +L 451.910146 126.98432 +L 452.891331 129.319004 +L 453.872516 130.486346 +L 454.853701 129.027169 +L 455.834887 123.774129 +L 456.816072 129.61084 +L 457.797257 126.98432 +L 458.778442 128.151662 +L 459.759627 130.778182 +L 460.740812 104.804818 +L 461.721998 124.649635 +L 462.703183 115.019062 +L 463.684368 126.692484 +L 464.665553 106.263995 +L 465.646738 130.778182 +L 466.627923 125.233306 +L 468.590294 116.186404 +L 469.571479 120.563937 +L 470.552664 128.443497 +L 471.533849 130.778182 +L 473.496219 110.641529 +L 474.477405 112.100706 +L 475.45859 130.778182 +L 476.439775 126.98432 +L 477.42096 129.902675 +L 478.402145 113.85172 +L 479.38333 129.902675 +L 480.364516 130.778182 +L 482.326886 130.778182 +L 483.308071 129.61084 +L 484.289256 129.902675 +L 485.270441 127.859826 +L 486.251627 129.027169 +L 487.232812 127.567991 +L 488.213997 122.314951 +L 489.195182 130.486346 +L 490.176367 106.555831 +L 491.157552 127.276155 +L 492.138737 126.692484 +L 493.119923 114.143555 +L 494.101108 124.649635 +L 496.063478 130.486346 +L 497.044663 129.319004 +L 498.025848 130.486346 +L 499.007034 127.859826 +L 499.988219 104.804818 +L 500.969404 93.423231 +L 501.950589 121.147609 +L 502.931774 130.486346 +L 503.912959 126.108813 +L 504.894145 129.902675 +L 505.87533 130.194511 +L 506.856515 130.778182 +L 507.8377 130.778182 +L 508.818885 130.486346 +L 510.781255 130.486346 +L 511.762441 130.778182 +L 512.743626 130.778182 +L 513.724811 130.194511 +L 514.705996 130.194511 +L 515.687181 130.778182 +L 516.668366 130.778182 +L 517.649552 130.486346 +L 518.630737 130.486346 +L 519.611922 130.778182 +L 520.593107 130.486346 +L 521.574292 129.902675 +L 522.555477 130.486346 +L 523.536663 130.778182 +L 524.517848 130.194511 +L 525.499033 130.194511 +L 526.480218 129.61084 +L 527.461403 127.276155 +L 528.442588 129.61084 +L 529.423774 130.486346 +L 530.404959 130.194511 +L 531.386144 128.443497 +L 532.367329 125.816977 +L 533.348514 130.778182 +L 534.329699 130.486346 +L 535.310884 130.778182 +L 536.29207 130.778182 +L 537.273255 127.276155 +L 538.25444 130.778182 +L 539.235625 127.276155 +L 540.21681 130.778182 +L 541.197995 130.486346 +L 542.179181 122.606786 +L 543.160366 130.486346 +L 544.141551 118.521089 +L 545.122736 127.567991 +L 546.103921 102.178298 +L 547.085106 118.812924 +L 548.066292 129.61084 +L 549.047477 130.486346 +L 550.028662 130.194511 +L 551.009847 130.486346 +L 551.991032 117.645582 +L 552.972217 129.902675 +L 553.953402 130.778182 +L 554.934588 130.486346 +L 555.915773 125.816977 +L 556.896958 130.778182 +L 558.859328 130.778182 +L 559.840513 128.735333 +L 560.821699 120.563937 +L 561.802884 130.778182 +L 562.784069 129.902675 +L 563.765254 123.774129 +L 564.746439 122.606786 +L 565.727624 130.778182 +L 566.70881 129.902675 +L 567.689995 130.194511 +L 568.67118 127.859826 +L 569.652365 130.194511 +L 570.63355 129.319004 +L 571.614735 130.486346 +L 572.595921 130.778182 +L 573.577106 129.61084 +L 574.558291 129.027169 +L 575.539476 129.902675 +L 576.520661 119.10476 +L 577.501846 130.194511 +L 578.483031 122.023115 +L 579.464217 130.778182 +L 580.445402 129.027169 +L 581.426587 125.816977 +L 582.407772 130.778182 +L 583.388957 130.194511 +L 584.370142 130.486346 +L 585.351328 110.933364 +L 586.332513 129.027169 +L 587.313698 130.778182 +L 588.294883 130.486346 +L 589.276068 122.898622 +L 590.257253 126.108813 +L 591.238439 130.486346 +L 592.219624 124.3578 +L 593.200809 130.778182 +L 594.181994 130.778182 +L 595.163179 129.61084 +L 596.144364 130.778182 +L 597.125549 127.276155 +L 598.106735 130.194511 +L 599.08792 130.486346 +L 600.069105 130.486346 +L 601.05029 129.902675 +L 602.031475 127.276155 +L 603.01266 126.108813 +L 603.993846 126.400649 +L 604.975031 130.486346 +L 605.956216 130.486346 +L 607.918586 113.559884 +L 608.899771 130.778182 +L 609.880957 121.147609 +L 610.862142 129.902675 +L 611.843327 130.778182 +L 612.824512 129.319004 +L 613.805697 129.61084 +L 614.786882 130.778182 +L 615.768068 39.141818 +L 616.749253 129.027169 +L 617.730438 126.98432 +L 618.711623 100.71912 +L 619.692808 125.816977 +L 620.673993 130.486346 +L 621.655178 128.443497 +L 622.636364 130.778182 +L 622.636364 130.778182 +" clip-path="url(#p4f3e87b386)" style="fill: none; stroke: #1f77b4; stroke-width: 1.5; stroke-linecap: square"/> +L 116.344822 129.61084 +L 117.326007 130.778182 +L 118.307192 130.778182 +L 119.288377 130.194511 +L 120.269562 130.194511 +L 121.250747 130.486346 +L 122.231932 129.61084 +L 123.213118 130.778182 +L 124.194303 130.778182 +L 125.175488 127.859826 +L 126.156673 130.194511 +L 127.137858 130.778182 +L 128.119043 129.902675 +L 129.100229 129.902675 +L 130.081414 130.194511 +L 131.062599 130.778182 +L 132.043784 130.194511 +L 133.024969 129.902675 +L 134.006154 130.486346 +L 134.98734 130.778182 +L 135.968525 130.486346 +L 136.94971 130.778182 +L 137.930895 130.194511 +L 139.893265 130.778182 +L 140.874451 130.486346 +L 141.855636 130.778182 +L 142.836821 130.486346 +L 143.818006 128.443497 +L 144.799191 129.319004 +L 145.780376 130.486346 +L 146.761561 128.151662 +L 147.742747 130.778182 +L 155.592228 130.778182 +L 156.573413 130.486346 +L 157.554598 130.778182 +L 164.422894 130.778182 +L 165.404079 130.194511 +L 166.385265 130.778182 +L 167.36645 130.778182 +L 169.32882 130.194511 +L 170.310005 130.778182 +L 172.272376 130.778182 +L 173.253561 127.859826 +L 174.234746 130.778182 +L 175.215931 130.778182 +L 176.197116 130.486346 +L 177.178301 129.902675 +L 178.159487 130.486346 +L 179.140672 130.194511 +L 180.121857 129.027169 +L 181.103042 130.194511 +L 182.084227 130.778182 +L 183.065412 130.486346 +L 184.046598 130.778182 +L 185.027783 130.486346 +L 186.008968 130.778182 +L 186.990153 130.194511 +L 188.952523 130.194511 +L 189.933708 130.778182 +L 190.914894 130.778182 +L 193.858449 129.027169 +L 194.839634 130.194511 +L 195.820819 129.61084 +L 196.802005 130.778182 +L 197.78319 129.027169 +L 198.764375 129.902675 +L 199.74556 130.194511 +L 200.726745 129.902675 +L 201.70793 128.735333 +L 202.689116 130.486346 +L 203.670301 129.61084 +L 204.651486 127.859826 +L 205.632671 129.027169 +L 206.613856 127.276155 +L 207.595041 120.563937 +L 208.576226 129.319004 +L 209.557412 130.778182 +L 210.538597 130.194511 +L 211.519782 127.567991 +L 213.482152 129.319004 +L 214.463337 126.692484 +L 215.444523 129.902675 +L 216.425708 129.902675 +L 217.406893 130.486346 +L 218.388078 127.859826 +L 219.369263 127.859826 +L 220.350448 130.778182 +L 221.331634 130.194511 +L 222.312819 130.778182 +L 223.294004 129.902675 +L 224.275189 124.065964 +L 225.256374 126.98432 +L 226.237559 127.859826 +L 227.218745 129.61084 +L 228.19993 130.778182 +L 229.181115 129.319004 +L 230.1623 130.486346 +L 231.143485 127.567991 +L 232.12467 130.194511 +L 233.105855 127.567991 +L 234.087041 125.816977 +L 235.068226 127.276155 +L 236.049411 129.61084 +L 237.030596 126.108813 +L 238.011781 128.151662 +L 238.992966 130.486346 +L 239.974152 126.400649 +L 240.955337 129.902675 +L 241.936522 128.443497 +L 242.917707 126.400649 +L 243.898892 128.151662 +L 244.880077 130.778182 +L 245.861263 130.486346 +L 246.842448 130.486346 +L 247.823633 130.778182 +L 248.804818 129.902675 +L 249.786003 130.194511 +L 251.748373 126.108813 +L 252.729559 129.61084 +L 253.710744 130.486346 +L 254.691929 130.778182 +L 255.673114 129.902675 +L 256.654299 124.649635 +L 257.635484 130.778182 +L 258.61667 130.194511 +L 259.597855 130.486346 +L 261.560225 130.486346 +L 262.54141 125.233306 +L 263.522595 129.902675 +L 264.503781 129.027169 +L 265.484966 123.774129 +L 266.466151 125.816977 +L 267.447336 130.486346 +L 268.428521 130.778182 +L 269.409706 128.443497 +L 270.390892 130.194511 +L 271.372077 129.902675 +L 272.353262 130.486346 +L 273.334447 130.486346 +L 274.315632 130.778182 +L 275.296817 127.567991 +L 276.278002 130.778182 +L 277.259188 130.486346 +L 278.240373 129.902675 +L 279.221558 129.027169 +L 280.202743 130.778182 +L 281.183928 129.902675 +L 282.165113 130.778182 +L 283.146299 130.194511 +L 284.127484 130.194511 +L 285.108669 130.778182 +L 287.071039 130.778182 +L 288.052224 129.319004 +L 289.03341 130.778182 +L 290.014595 129.902675 +L 290.99578 128.443497 +L 291.976965 130.778182 +L 292.95815 130.778182 +L 293.939335 130.486346 +L 294.92052 129.902675 +L 297.864076 130.778182 +L 298.845261 130.486346 +L 299.826446 128.735333 +L 300.807631 128.735333 +L 301.788817 129.319004 +L 302.770002 130.778182 +L 303.751187 126.400649 +L 304.732372 130.778182 +L 305.713557 130.486346 +L 306.694742 128.735333 +L 307.675928 128.443497 +L 308.657113 130.778182 +L 309.638298 130.486346 +L 310.619483 127.276155 +L 311.600668 128.735333 +L 312.581853 130.486346 +L 313.563039 129.902675 +L 314.544224 130.778182 +L 315.525409 130.778182 +L 316.506594 130.486346 +L 317.487779 130.778182 +L 318.468964 129.902675 +L 319.450149 130.194511 +L 320.431335 130.778182 +L 323.37489 130.778182 +L 324.356075 129.61084 +L 325.33726 130.486346 +L 326.318446 130.778182 +L 327.299631 130.486346 +L 328.280816 129.319004 +L 329.262001 130.778182 +L 330.243186 130.778182 +L 331.224371 130.194511 +L 332.205557 130.778182 +L 334.167927 130.194511 +L 335.149112 130.778182 +L 336.130297 130.486346 +L 337.111482 130.778182 +L 338.092667 129.902675 +L 339.073853 130.486346 +L 340.055038 130.194511 +L 341.036223 130.778182 +L 342.998593 130.778182 +L 344.960964 130.194511 +L 345.942149 129.027169 +L 346.923334 130.486346 +L 347.904519 130.778182 +L 348.885704 127.859826 +L 349.866889 127.567991 +L 350.848075 130.778182 +L 352.810445 130.778182 +L 354.772815 130.194511 +L 355.754 130.778182 +L 356.735186 128.443497 +L 357.716371 126.692484 +L 358.697556 130.486346 +L 359.678741 126.400649 +L 360.659926 129.319004 +L 361.641111 130.778182 +L 364.584667 130.778182 +L 365.565852 130.486346 +L 366.547037 130.778182 +L 367.528222 130.778182 +L 368.509407 129.61084 +L 369.490593 123.190457 +L 370.471778 125.525142 +L 371.452963 130.194511 +L 372.434148 127.567991 +L 373.415333 123.190457 +L 374.396518 122.023115 +L 375.377704 122.023115 +L 376.358889 125.525142 +L 377.340074 126.400649 +L 378.321259 127.859826 +L 379.302444 130.778182 +L 380.283629 128.735333 +L 381.264814 130.778182 +L 382.246 130.778182 +L 383.227185 127.276155 +L 384.20837 130.194511 +L 385.189555 126.98432 +L 386.17074 129.61084 +L 387.151925 128.735333 +L 388.133111 130.486346 +L 389.114296 130.778182 +L 390.095481 129.61084 +L 391.076666 126.400649 +L 392.057851 128.443497 +L 393.039036 128.735333 +L 394.020222 130.486346 +L 395.001407 130.778182 +L 395.982592 130.778182 +L 396.963777 130.194511 +L 397.944962 129.902675 +L 398.926147 129.027169 +L 399.907333 129.027169 +L 400.888518 130.778182 +L 401.869703 130.778182 +L 402.850888 128.151662 +L 403.832073 127.567991 +L 404.813258 130.778182 +L 405.794443 130.194511 +L 406.775629 130.778182 +L 407.756814 129.319004 +L 408.737999 130.194511 +L 409.719184 130.778182 +L 410.700369 130.486346 +L 411.681554 129.902675 +L 412.66274 129.902675 +L 413.643925 126.692484 +L 414.62511 129.902675 +L 415.606295 130.194511 +L 416.58748 128.735333 +L 417.568665 125.816977 +L 418.549851 128.735333 +L 419.531036 129.027169 +L 420.512221 130.486346 +L 421.493406 128.735333 +L 423.455776 122.314951 +L 424.436961 129.319004 +L 425.418147 127.567991 +L 426.399332 130.778182 +L 427.380517 126.108813 +L 428.361702 124.3578 +L 429.342887 129.61084 +L 430.324072 127.567991 +L 431.305258 130.778182 +L 432.286443 130.778182 +L 433.267628 125.816977 +L 434.248813 124.065964 +L 435.229998 130.486346 +L 436.211183 128.443497 +L 437.192369 130.778182 +L 438.173554 130.778182 +L 439.154739 130.486346 +L 440.135924 130.778182 +L 441.117109 130.486346 +L 442.098294 130.778182 +L 443.07948 128.735333 +L 444.060665 127.859826 +L 445.04185 124.3578 +L 446.023035 129.319004 +L 447.00422 130.778182 +L 447.985405 126.98432 +L 448.96659 130.486346 +L 450.928961 128.735333 +L 451.910146 129.319004 +L 452.891331 129.61084 +L 453.872516 130.778182 +L 454.853701 129.319004 +L 455.834887 126.98432 +L 456.816072 130.194511 +L 457.797257 129.027169 +L 458.778442 129.319004 +L 459.759627 130.778182 +L 460.740812 121.147609 +L 461.721998 127.567991 +L 462.703183 124.941471 +L 463.684368 128.735333 +L 464.665553 122.023115 +L 465.646738 130.778182 +L 466.627923 130.486346 +L 467.609108 125.233306 +L 468.590294 124.3578 +L 469.571479 125.233306 +L 470.552664 129.61084 +L 471.533849 130.778182 +L 472.515034 126.400649 +L 473.496219 122.898622 +L 474.477405 122.606786 +L 475.45859 130.778182 +L 476.439775 129.027169 +L 477.42096 130.778182 +L 478.402145 124.3578 +L 479.38333 130.194511 +L 480.364516 130.778182 +L 482.326886 130.778182 +L 483.308071 129.902675 +L 484.289256 130.486346 +L 485.270441 129.319004 +L 486.251627 129.902675 +L 487.232812 129.319004 +L 488.213997 126.400649 +L 489.195182 130.486346 +L 490.176367 122.023115 +L 491.157552 128.735333 +L 492.138737 128.443497 +L 493.119923 124.649635 +L 494.101108 128.151662 +L 495.082293 128.735333 +L 496.063478 130.778182 +L 497.044663 129.902675 +L 498.025848 130.778182 +L 499.007034 129.61084 +L 499.988219 124.941471 +L 500.969404 118.521089 +L 501.950589 126.692484 +L 502.931774 130.486346 +L 503.912959 130.778182 +L 504.894145 129.902675 +L 505.87533 130.194511 +L 506.856515 130.778182 +L 507.8377 130.778182 +L 508.818885 130.486346 +L 509.80007 130.778182 +L 510.781255 130.486346 +L 511.762441 130.778182 +L 512.743626 130.778182 +L 513.724811 130.194511 +L 515.687181 130.778182 +L 516.668366 130.778182 +L 517.649552 130.486346 +L 518.630737 130.486346 +L 519.611922 130.778182 +L 520.593107 130.486346 +L 522.555477 130.486346 +L 523.536663 130.778182 +L 524.517848 130.194511 +L 525.499033 130.486346 +L 526.480218 129.902675 +L 527.461403 129.027169 +L 528.442588 130.194511 +L 529.423774 130.486346 +L 530.404959 130.194511 +L 532.367329 129.027169 +L 533.348514 130.778182 +L 534.329699 130.486346 +L 535.310884 130.778182 +L 536.29207 130.778182 +L 537.273255 129.61084 +L 538.25444 130.778182 +L 539.235625 128.735333 +L 540.21681 130.778182 +L 541.197995 130.778182 +L 542.179181 127.567991 +L 543.160366 130.778182 +L 544.141551 125.525142 +L 545.122736 128.735333 +L 546.103921 122.606786 +L 547.085106 126.108813 +L 548.066292 130.194511 +L 549.047477 130.486346 +L 552.972217 130.486346 +L 553.953402 130.778182 +L 554.934588 130.486346 +L 555.915773 130.486346 +L 556.896958 130.778182 +L 558.859328 130.778182 +L 559.840513 129.319004 +L 560.821699 125.525142 +L 561.802884 130.778182 +L 562.784069 130.194511 +L 563.765254 129.319004 +L 564.746439 127.276155 +L 565.727624 130.778182 +L 566.70881 130.194511 +L 567.689995 130.486346 +L 568.67118 129.319004 +L 569.652365 130.486346 +L 570.63355 130.194511 +L 572.595921 130.778182 +L 573.577106 129.902675 +L 574.558291 129.902675 +L 575.539476 130.486346 +L 576.520661 125.525142 +L 577.501846 130.194511 +L 578.483031 126.692484 +L 579.464217 130.778182 +L 580.445402 129.902675 +L 581.426587 128.443497 +L 582.407772 130.778182 +L 583.388957 130.194511 +L 584.370142 130.486346 +L 585.351328 124.065964 +L 586.332513 129.61084 +L 587.313698 130.778182 +L 588.294883 130.486346 +L 589.276068 127.859826 +L 590.257253 128.151662 +L 591.238439 130.486346 +L 592.219624 127.276155 +L 593.200809 130.778182 +L 594.181994 130.778182 +L 595.163179 129.902675 +L 596.144364 130.778182 +L 597.125549 129.319004 +L 598.106735 130.194511 +L 599.08792 130.778182 +L 600.069105 130.486346 +L 601.05029 130.486346 +L 602.031475 129.027169 +L 603.01266 130.486346 +L 603.993846 130.778182 +L 605.956216 130.778182 +L 606.937401 126.692484 +L 607.918586 123.774129 +L 608.899771 130.778182 +L 609.880957 126.400649 +L 610.862142 130.486346 +L 611.843327 130.778182 +L 612.824512 130.194511 +L 613.805697 130.194511 +L 614.786882 130.778182 +L 615.768068 118.229253 +L 616.749253 129.902675 +L 617.730438 129.027169 +L 618.711623 120.272102 +L 619.692808 128.443497 +L 620.673993 130.486346 +L 621.655178 129.61084 +L 622.636364 130.778182 +L 622.636364 130.778182 +" clip-path="url(#p4f3e87b386)" style="fill: none; stroke: #ff7f0e; stroke-width: 1.5; stroke-linecap: square"/> - + @@ -1911,12 +1897,12 @@ z - + - + @@ -1933,12 +1919,12 @@ z - + - + - + - + - + - + @@ -2058,12 +2044,12 @@ z - + - + @@ -2080,12 +2066,12 @@ z - + - + - + @@ -2153,7 +2139,7 @@ z - + @@ -2166,7 +2152,7 @@ z - + @@ -2181,7 +2167,7 @@ z - + @@ -2196,7 +2182,7 @@ z - + @@ -2211,1319 +2197,1325 @@ z +L 369.750403 249.862584 +L 370.500807 239.948708 +L 371.25121 189.575502 +L 372.001614 229.498947 +L 372.752017 242.628134 +L 373.502421 241.020478 +L 374.252824 230.83866 +L 375.003228 230.83866 +L 375.753631 220.924785 +L 376.504034 198.417608 +L 377.254438 217.441531 +L 378.004841 246.37933 +L 378.755245 250.666411 +L 379.505648 224.675981 +L 380.256052 228.159234 +L 381.006455 212.618565 +L 381.756859 240.216651 +L 382.507262 236.197512 +L 383.257665 246.111388 +L 384.008069 248.254928 +L 384.758472 215.565933 +L 385.508876 238.608995 +L 386.259279 249.594641 +L 387.009683 223.604211 +L 387.760086 164.924785 +L 388.51049 240.484593 +L 389.260893 235.929569 +L 390.011296 227.891292 +L 390.7617 228.963062 +L 391.512103 242.896077 +L 392.262507 232.446316 +L 393.01291 238.876938 +L 393.763314 246.915215 +L 394.513717 245.843445 +L 395.26412 235.929569 +L 396.014524 249.058756 +L 396.764927 243.431962 +L 397.515331 229.498947 +L 399.016138 250.934354 +L 399.766541 250.130526 +L 400.516945 245.039617 +L 401.267348 231.642488 +L 402.017751 240.752536 +L 402.768155 247.183158 +L 403.518558 247.986986 +L 404.268962 247.986986 +L 405.019365 248.790813 +L 405.769769 239.412823 +L 406.520172 235.661627 +L 407.270576 243.967847 +L 408.771382 237.537225 +L 409.521786 250.130526 +L 410.272189 249.862584 +L 411.022593 234.589856 +L 411.772996 232.982201 +L 412.5234 245.575502 +L 414.024207 250.934354 +L 414.77461 248.522871 +L 415.525013 247.719043 +L 416.275417 244.503732 +L 417.02582 228.69512 +L 417.776224 238.341053 +L 418.526627 238.876938 +L 419.277031 226.819522 +L 420.027434 249.862584 +L 420.777838 228.159234 +L 421.528241 237.269282 +L 422.278644 202.972632 +L 423.029048 239.948708 +L 423.779451 221.996555 +L 424.529855 247.4511 +L 425.280258 248.254928 +L 426.030662 230.034833 +L 426.781065 208.599426 +L 427.531469 234.589856 +L 428.281872 237.269282 +L 429.032275 243.431962 +L 429.782679 233.250144 +L 430.533082 249.058756 +L 431.283486 217.173589 +L 432.033889 235.929569 +L 432.784293 239.948708 +L 433.534696 242.628134 +L 434.2851 242.896077 +L 435.035503 246.915215 +L 435.785906 249.058756 +L 436.53631 245.843445 +L 437.286713 248.790813 +L 438.037117 250.934354 +L 438.78752 249.594641 +L 439.537924 249.326699 +L 440.288327 246.915215 +L 441.038731 217.709474 +L 442.539537 242.092249 +L 443.289941 243.164019 +L 444.040344 249.862584 +L 444.790748 250.934354 +L 445.541151 251.738182 +L 447.041958 236.733397 +L 447.792361 241.288421 +L 448.542765 219.585072 +L 449.293168 246.915215 +L 450.043572 246.111388 +L 450.793975 250.934354 +L 451.544379 247.719043 +L 452.294782 239.412823 +L 453.045186 244.771675 +L 453.795589 242.092249 +L 454.545992 245.843445 +L 455.296396 250.666411 +L 456.046799 250.130526 +L 456.797203 219.585072 +L 457.547606 220.120957 +L 458.29801 235.929569 +L 459.048413 247.719043 +L 459.798817 217.441531 +L 460.54922 246.915215 +L 461.299623 235.929569 +L 462.050027 212.886507 +L 462.80043 238.07311 +L 463.550834 209.939139 +L 464.301237 198.68555 +L 465.051641 232.714258 +L 465.802044 250.666411 +L 466.552448 249.862584 +L 467.302851 196.809952 +L 468.053254 208.867368 +L 468.803658 223.872153 +L 469.554061 224.675981 +L 470.304465 179.125742 +L 471.054868 243.967847 +L 471.805272 245.575502 +L 472.555675 217.441531 +L 473.306079 226.015694 +L 474.056482 242.628134 +L 474.806885 240.752536 +L 475.557289 226.283636 +L 476.307692 247.719043 +L 477.058096 249.862584 +L 477.808499 225.747751 +L 478.558903 235.929569 +L 479.309306 223.336268 +L 480.05971 232.178373 +L 480.810113 216.369761 +L 481.560516 239.680766 +L 482.31092 248.254928 +L 483.061323 222.264498 +L 483.811727 228.427177 +L 484.56213 231.910431 +L 485.312534 227.623349 +L 486.062937 185.824306 +L 486.813341 223.872153 +L 487.563744 241.288421 +L 488.314147 160.101818 +L 489.064551 200.829091 +L 489.814954 224.943923 +L 490.565358 241.288421 +L 491.315761 239.680766 +L 492.066165 243.967847 +L 492.816568 247.4511 +L 493.566971 211.814737 +L 494.317375 223.068325 +L 495.067778 209.671196 +L 495.818182 213.15445 +L 496.568585 225.211866 +L 497.318989 250.130526 +L 498.069392 249.594641 +L 498.819796 213.422392 +L 499.570199 235.661627 +L 500.320602 222.53244 +L 501.071006 230.570718 +L 501.821409 235.393684 +L 502.571813 242.896077 +L 503.322216 247.719043 +L 504.07262 229.76689 +L 504.823023 236.197512 +L 505.573427 216.637703 +L 506.32383 214.22622 +L 507.074233 242.896077 +L 507.824637 249.058756 +L 508.57504 251.738182 +L 509.325444 239.680766 +L 510.075847 237.805167 +L 510.826251 243.699904 +L 511.576654 235.661627 +L 512.327058 244.235789 +L 513.077461 249.326699 +L 513.827864 250.130526 +L 515.328671 234.589856 +L 516.079075 247.986986 +L 516.829478 247.986986 +L 517.579882 243.967847 +L 518.330285 240.752536 +L 519.080689 229.498947 +L 519.831092 239.14488 +L 520.581495 238.608995 +L 521.331899 246.37933 +L 522.832706 247.4511 +L 523.583109 250.398469 +L 524.333513 248.790813 +L 525.83432 232.178373 +L 526.584723 234.857799 +L 527.335126 242.896077 +L 528.08553 235.661627 +L 528.835933 249.862584 +L 529.586337 251.470239 +L 530.33674 243.699904 +L 531.087144 246.37933 +L 531.837547 233.786029 +L 532.587951 213.15445 +L 533.338354 244.235789 +L 534.088757 250.666411 +L 534.839161 249.326699 +L 535.589564 240.484593 +L 536.339968 236.733397 +L 537.090371 239.412823 +L 537.840775 238.341053 +L 538.591178 234.857799 +L 539.341581 250.934354 +L 540.091985 241.288421 +L 540.842388 228.159234 +L 541.592792 226.819522 +L 542.343195 245.575502 +L 543.093599 248.254928 +L 543.844002 211.278852 +L 544.594406 247.986986 +L 545.344809 250.666411 +L 546.095212 227.891292 +L 546.845616 246.111388 +L 547.596019 221.192727 +L 548.346423 229.498947 +L 549.096826 246.111388 +L 549.84723 251.470239 +L 550.597633 251.470239 +L 551.348037 249.862584 +L 552.09844 244.503732 +L 552.848843 245.843445 +L 553.599247 243.431962 +L 554.34965 251.470239 +L 555.100054 249.862584 +L 555.850457 251.738182 +L 556.600861 245.575502 +L 557.351264 247.986986 +L 558.101668 244.771675 +L 558.852071 243.164019 +L 559.602474 250.666411 +L 560.352878 251.202297 +L 561.103281 241.020478 +L 561.853685 220.656842 +L 562.604088 245.843445 +L 563.354492 246.111388 +L 564.104895 240.484593 +L 564.855299 248.254928 +L 565.605702 251.470239 +L 566.356105 247.4511 +L 567.106509 241.556364 +L 567.856912 243.699904 +L 568.607316 244.235789 +L 569.357719 249.326699 +L 570.108123 251.470239 +L 570.858526 251.202297 +L 571.60893 243.164019 +L 572.359333 243.967847 +L 573.109736 247.4511 +L 573.86014 237.537225 +L 574.610543 249.058756 +L 575.360947 250.934354 +L 576.11135 248.790813 +L 576.861754 250.934354 +L 577.612157 239.14488 +L 579.112964 227.623349 +L 579.863367 228.427177 +L 580.613771 247.719043 +L 581.364174 249.594641 +L 582.114578 221.728612 +L 582.864981 238.07311 +L 583.615385 246.647273 +L 584.365788 243.699904 +L 585.116192 234.589856 +L 585.866595 251.202297 +L 586.616998 246.111388 +L 587.367402 238.876938 +L 588.117805 247.4511 +L 588.868209 228.159234 +L 589.618612 234.321914 +L 590.369016 250.934354 +L 591.119419 251.470239 +L 591.869822 250.130526 +L 592.620226 239.948708 +L 593.370629 241.556364 +L 594.121033 248.790813 +L 594.871436 231.106603 +L 595.62184 249.594641 +L 596.372243 251.470239 +L 597.122647 249.058756 +L 597.87305 249.058756 +L 598.623453 241.020478 +L 599.373857 247.183158 +L 600.12426 241.288421 +L 600.874664 249.326699 +L 601.625067 251.738182 +L 602.375471 248.254928 +L 603.125874 227.087464 +L 603.876278 246.915215 +L 604.626681 241.824306 +L 605.377084 247.719043 +L 606.127488 249.862584 +L 606.877891 251.470239 +L 607.628295 244.771675 +L 608.378698 215.833876 +L 609.129102 249.862584 +L 609.879505 226.551579 +L 610.629909 243.164019 +L 611.380312 251.738182 +L 612.130715 251.470239 +L 612.881119 250.130526 +L 613.631522 248.254928 +L 614.381926 238.876938 +L 615.132329 242.092249 +L 615.882733 203.240574 +L 616.633136 249.862584 +L 617.38354 249.326699 +L 618.884346 212.082679 +L 619.63475 237.805167 +L 620.385153 246.647273 +L 621.135557 247.4511 +L 621.88596 250.666411 +L 622.636364 250.934354 +L 622.636364 250.934354 +" clip-path="url(#p10d438fcf7)" style="fill: none; stroke: #1f77b4; stroke-width: 1.5; stroke-linecap: square"/> +L 116.11404 249.594641 +L 116.864443 248.522871 +L 117.614847 249.594641 +L 118.36525 251.738182 +L 119.115654 250.130526 +L 119.866057 249.326699 +L 120.61646 249.326699 +L 121.366864 249.058756 +L 122.117267 249.594641 +L 122.867671 251.470239 +L 125.869285 249.326699 +L 126.619688 249.058756 +L 127.370091 250.130526 +L 128.870898 251.738182 +L 129.621302 249.058756 +L 130.371705 249.594641 +L 131.122109 250.666411 +L 131.872512 250.934354 +L 132.622916 250.666411 +L 133.373319 251.470239 +L 134.123722 251.202297 +L 134.874126 250.130526 +L 135.624529 251.202297 +L 136.374933 249.058756 +L 137.125336 249.862584 +L 137.87574 250.398469 +L 138.626143 251.202297 +L 139.376547 251.202297 +L 140.12695 247.719043 +L 140.877353 251.470239 +L 141.627757 251.470239 +L 142.37816 251.202297 +L 143.878967 251.738182 +L 144.629371 251.470239 +L 145.379774 249.594641 +L 146.130178 247.183158 +L 146.880581 248.790813 +L 147.630984 250.130526 +L 148.381388 250.130526 +L 149.131791 251.470239 +L 149.882195 250.398469 +L 150.632598 250.130526 +L 151.383002 250.934354 +L 152.133405 247.986986 +L 152.883808 249.594641 +L 153.634212 251.470239 +L 154.384615 251.738182 +L 155.135019 249.326699 +L 156.635826 249.326699 +L 157.386229 250.130526 +L 158.136633 250.398469 +L 158.887036 251.202297 +L 159.637439 251.470239 +L 160.387843 250.934354 +L 161.138246 250.666411 +L 161.88865 251.202297 +L 163.389457 251.202297 +L 164.13986 251.470239 +L 164.890264 250.934354 +L 166.39107 250.934354 +L 167.141474 251.738182 +L 167.891877 251.202297 +L 168.642281 251.202297 +L 169.392684 250.934354 +L 170.143088 249.862584 +L 170.893491 248.254928 +L 171.643895 250.130526 +L 172.394298 251.202297 +L 173.144701 250.934354 +L 173.895105 250.934354 +L 174.645508 251.202297 +L 175.395912 249.594641 +L 176.146315 248.790813 +L 176.896719 249.862584 +L 177.647122 247.183158 +L 178.397526 249.862584 +L 179.147929 250.398469 +L 179.898332 251.202297 +L 180.648736 250.666411 +L 181.399139 250.666411 +L 182.149543 248.522871 +L 182.899946 249.594641 +L 183.65035 249.326699 +L 184.400753 249.326699 +L 185.151157 250.398469 +L 185.90156 246.37933 +L 186.651963 247.986986 +L 187.402367 249.326699 +L 188.15277 247.719043 +L 188.903174 246.647273 +L 189.653577 250.934354 +L 190.403981 250.666411 +L 191.154384 248.790813 +L 191.904788 250.130526 +L 192.655191 248.254928 +L 193.405594 249.594641 +L 194.155998 249.594641 +L 194.906401 250.934354 +L 195.656805 251.202297 +L 196.407208 249.058756 +L 197.157612 248.254928 +L 197.908015 248.522871 +L 198.658419 250.934354 +L 199.408822 251.470239 +L 200.909629 250.934354 +L 201.660032 250.934354 +L 202.410436 249.594641 +L 203.160839 250.398469 +L 203.911243 249.058756 +L 204.661646 250.934354 +L 205.412049 250.398469 +L 206.162453 250.934354 +L 206.912856 249.326699 +L 207.66326 249.058756 +L 208.413663 249.058756 +L 209.164067 248.254928 +L 209.91447 250.398469 +L 210.664874 250.934354 +L 211.415277 250.934354 +L 212.16568 242.896077 +L 212.916084 249.058756 +L 213.666487 249.058756 +L 214.416891 247.719043 +L 215.167294 249.326699 +L 215.917698 250.666411 +L 216.668101 250.666411 +L 217.418505 246.647273 +L 218.168908 246.915215 +L 218.919311 248.522871 +L 219.669715 246.915215 +L 220.420118 247.719043 +L 221.170522 250.130526 +L 221.920925 250.934354 +L 222.671329 247.719043 +L 223.421732 246.37933 +L 224.172136 247.4511 +L 224.922539 247.719043 +L 226.423346 251.202297 +L 227.173749 250.130526 +L 227.924153 247.986986 +L 228.674556 247.986986 +L 229.42496 248.790813 +L 230.175363 250.666411 +L 231.67617 251.202297 +L 232.426573 250.130526 +L 233.176977 246.647273 +L 233.92738 247.4511 +L 234.677784 248.790813 +L 235.428187 247.183158 +L 236.178591 249.862584 +L 236.928994 251.202297 +L 238.429801 249.594641 +L 239.180204 248.522871 +L 239.930608 248.790813 +L 240.681011 247.719043 +L 241.431415 249.326699 +L 242.181818 249.594641 +L 242.932222 250.934354 +L 243.682625 245.843445 +L 244.433029 248.254928 +L 245.183432 249.058756 +L 245.933835 249.326699 +L 246.684239 249.326699 +L 247.434642 250.934354 +L 248.185046 250.398469 +L 248.935449 246.111388 +L 249.685853 244.771675 +L 250.436256 247.183158 +L 251.186659 249.058756 +L 251.937063 250.398469 +L 252.687466 249.326699 +L 253.43787 250.398469 +L 254.188273 246.647273 +L 254.938677 246.915215 +L 255.68908 230.302775 +L 256.439484 248.254928 +L 257.189887 246.915215 +L 257.94029 250.666411 +L 258.690694 251.738182 +L 259.441097 249.862584 +L 260.191501 248.522871 +L 260.941904 248.522871 +L 261.692308 248.790813 +L 262.442711 247.986986 +L 263.943518 251.202297 +L 264.693921 249.326699 +L 265.444325 248.522871 +L 266.194728 247.183158 +L 266.945132 247.4511 +L 267.695535 246.111388 +L 268.445939 250.666411 +L 269.196342 251.738182 +L 269.946746 246.111388 +L 270.697149 247.4511 +L 271.447552 249.594641 +L 272.197956 247.719043 +L 272.948359 248.522871 +L 273.698763 251.470239 +L 274.449166 250.398469 +L 275.19957 248.522871 +L 275.949973 249.594641 +L 276.700377 248.254928 +L 277.45078 246.647273 +L 278.951587 250.934354 +L 279.70199 251.202297 +L 280.452394 249.326699 +L 281.202797 247.986986 +L 281.953201 250.130526 +L 282.703604 249.594641 +L 283.454008 249.594641 +L 284.954814 250.130526 +L 285.705218 247.183158 +L 286.455621 249.058756 +L 287.206025 249.058756 +L 287.956428 250.130526 +L 288.706832 249.326699 +L 289.457235 251.202297 +L 290.207639 250.398469 +L 290.958042 248.522871 +L 291.708445 249.326699 +L 292.458849 249.058756 +L 293.209252 248.522871 +L 293.959656 249.326699 +L 294.710059 251.202297 +L 295.460463 250.934354 +L 296.210866 247.719043 +L 296.961269 250.666411 +L 297.711673 249.862584 +L 298.462076 249.326699 +L 299.21248 246.111388 +L 299.962883 251.202297 +L 300.713287 250.666411 +L 301.46369 249.862584 +L 302.214094 250.398469 +L 302.964497 249.058756 +L 303.7149 248.254928 +L 304.465304 249.326699 +L 305.215707 250.934354 +L 305.966111 250.934354 +L 306.716514 249.594641 +L 307.466918 247.4511 +L 308.217321 247.4511 +L 308.967725 250.398469 +L 309.718128 248.790813 +L 310.468531 250.666411 +L 311.218935 249.594641 +L 311.969338 247.986986 +L 312.719742 248.790813 +L 313.470145 248.790813 +L 314.220549 247.986986 +L 314.970952 248.254928 +L 315.721356 251.202297 +L 316.471759 251.738182 +L 317.222162 250.130526 +L 317.972566 250.130526 +L 318.722969 250.398469 +L 319.473373 250.398469 +L 320.223776 250.666411 +L 321.724583 251.738182 +L 322.474987 250.398469 +L 323.22539 249.594641 +L 323.975793 249.862584 +L 324.726197 248.790813 +L 325.4766 251.202297 +L 326.227004 250.398469 +L 326.977407 251.738182 +L 327.727811 250.398469 +L 328.478214 250.398469 +L 329.228618 248.522871 +L 329.979021 247.986986 +L 330.729424 249.594641 +L 331.479828 250.666411 +L 332.230231 250.666411 +L 332.980635 248.790813 +L 333.731038 249.594641 +L 334.481442 249.862584 +L 335.231845 249.862584 +L 335.982249 249.058756 +L 336.732652 249.326699 +L 337.483055 250.666411 +L 338.233459 248.522871 +L 338.983862 251.470239 +L 339.734266 249.862584 +L 340.484669 249.862584 +L 341.235073 251.202297 +L 341.985476 250.934354 +L 342.73588 250.130526 +L 343.486283 250.130526 +L 344.236686 249.326699 +L 344.98709 249.594641 +L 345.737493 251.202297 +L 346.487897 250.934354 +L 347.2383 251.470239 +L 347.988704 250.398469 +L 348.739107 250.130526 +L 349.48951 248.790813 +L 350.239914 249.326699 +L 350.990317 250.398469 +L 351.740721 250.934354 +L 352.491124 250.398469 +L 353.241528 251.470239 +L 353.991931 250.934354 +L 354.742335 249.326699 +L 355.492738 250.130526 +L 356.243141 251.202297 +L 356.993545 248.522871 +L 357.743948 251.470239 +L 358.494352 251.202297 +L 359.244755 248.254928 +L 360.745562 249.326699 +L 361.495966 250.398469 +L 362.246369 249.862584 +L 362.996772 251.202297 +L 363.747176 250.666411 +L 364.497579 247.986986 +L 365.247983 249.862584 +L 365.998386 249.326699 +L 366.74879 249.862584 +L 367.499193 249.862584 +L 368.249597 251.470239 +L 369 251.470239 +L 369.750403 250.934354 +L 370.500807 248.522871 +L 372.001614 248.522871 +L 372.752017 249.862584 +L 373.502421 249.862584 +L 374.252824 249.058756 +L 375.003228 248.790813 +L 375.753631 247.4511 +L 376.504034 249.594641 +L 377.254438 247.719043 +L 378.004841 250.130526 +L 378.755245 251.202297 +L 379.505648 250.398469 +L 380.256052 249.862584 +L 381.006455 248.254928 +L 381.756859 248.522871 +L 382.507262 249.326699 +L 383.257665 249.862584 +L 384.008069 250.130526 +L 384.758472 247.719043 +L 385.508876 248.522871 +L 386.259279 250.666411 +L 387.009683 249.594641 +L 388.51049 249.058756 +L 389.260893 249.594641 +L 390.011296 247.719043 +L 390.7617 250.130526 +L 391.512103 250.398469 +L 392.262507 248.522871 +L 393.01291 249.058756 +L 393.763314 250.934354 +L 394.513717 250.398469 +L 395.26412 249.594641 +L 396.014524 250.934354 +L 396.764927 249.326699 +L 397.515331 248.790813 +L 398.265734 249.058756 +L 399.016138 251.202297 +L 399.766541 251.202297 +L 400.516945 249.326699 +L 401.267348 250.398469 +L 402.017751 247.986986 +L 403.518558 250.130526 +L 404.268962 250.666411 +L 405.019365 250.130526 +L 405.769769 249.058756 +L 406.520172 247.4511 +L 407.270576 248.522871 +L 408.020979 247.986986 +L 408.771382 249.058756 +L 409.521786 250.666411 +L 410.272189 250.934354 +L 411.022593 249.326699 +L 411.772996 250.666411 +L 412.5234 249.862584 +L 413.273803 250.130526 +L 414.024207 251.470239 +L 414.77461 250.934354 +L 415.525013 250.934354 +L 416.275417 251.470239 +L 417.02582 249.594641 +L 417.776224 250.398469 +L 418.526627 249.058756 +L 419.277031 250.666411 +L 420.027434 251.202297 +L 420.777838 249.058756 +L 421.528241 249.594641 +L 422.278644 249.594641 +L 423.029048 246.915215 +L 423.779451 246.647273 +L 424.529855 250.398469 +L 425.280258 250.398469 +L 426.030662 248.790813 +L 426.781065 248.790813 +L 427.531469 249.862584 +L 428.281872 249.326699 +L 429.032275 250.398469 +L 429.782679 250.666411 +L 430.533082 250.666411 +L 431.283486 248.254928 +L 432.033889 249.862584 +L 432.784293 250.666411 +L 433.534696 250.934354 +L 434.2851 249.594641 +L 435.035503 251.738182 +L 435.785906 251.470239 +L 436.53631 250.934354 +L 437.286713 250.934354 +L 438.037117 251.202297 +L 438.78752 250.666411 +L 439.537924 251.202297 +L 440.288327 250.398469 +L 441.038731 244.771675 +L 441.789134 247.4511 +L 442.539537 249.326699 +L 444.790748 250.934354 +L 445.541151 251.738182 +L 446.291555 249.594641 +L 447.041958 249.594641 +L 447.792361 249.058756 +L 448.542765 246.111388 +L 449.293168 250.666411 +L 450.043572 251.738182 +L 450.793975 251.470239 +L 451.544379 250.666411 +L 452.294782 248.254928 +L 453.045186 250.934354 +L 453.795589 250.130526 +L 454.545992 248.522871 +L 455.296396 251.202297 +L 456.046799 251.202297 +L 456.797203 250.130526 +L 457.547606 247.986986 +L 458.29801 248.790813 +L 459.048413 249.862584 +L 459.798817 249.326699 +L 460.54922 250.934354 +L 461.299623 250.666411 +L 462.050027 248.254928 +L 462.80043 249.326699 +L 463.550834 247.183158 +L 464.301237 246.647273 +L 465.051641 247.183158 +L 465.802044 251.202297 +L 466.552448 251.738182 +L 467.302851 247.986986 +L 468.053254 246.111388 +L 468.803658 247.986986 +L 469.554061 246.647273 +L 470.304465 243.431962 +L 471.054868 249.594641 +L 471.805272 249.326699 +L 472.555675 247.4511 +L 473.306079 247.183158 +L 474.056482 248.254928 +L 474.806885 248.790813 +L 475.557289 247.986986 +L 476.307692 249.862584 +L 477.058096 250.934354 +L 477.808499 247.719043 +L 479.309306 248.254928 +L 480.05971 246.915215 +L 480.810113 247.4511 +L 481.560516 247.719043 +L 482.31092 250.666411 +L 483.061323 245.843445 +L 483.811727 245.843445 +L 484.56213 243.967847 +L 485.312534 247.183158 +L 486.062937 247.183158 +L 486.813341 249.862584 +L 487.563744 249.058756 +L 488.314147 247.986986 +L 489.064551 245.843445 +L 489.814954 248.522871 +L 490.565358 249.058756 +L 491.315761 249.326699 +L 492.066165 249.326699 +L 492.816568 249.862584 +L 493.566971 246.647273 +L 494.317375 247.183158 +L 495.067778 245.039617 +L 495.818182 247.986986 +L 496.568585 247.183158 +L 497.318989 250.934354 +L 498.069392 251.202297 +L 498.819796 243.967847 +L 499.570199 247.4511 +L 500.320602 245.575502 +L 501.071006 246.37933 +L 501.821409 249.594641 +L 502.571813 250.398469 +L 503.322216 250.398469 +L 504.07262 248.522871 +L 504.823023 249.326699 +L 505.573427 247.183158 +L 506.32383 246.915215 +L 507.074233 249.594641 +L 507.824637 249.862584 +L 508.57504 251.738182 +L 509.325444 248.522871 +L 510.075847 248.254928 +L 510.826251 249.058756 +L 511.576654 244.771675 +L 512.327058 249.326699 +L 513.077461 251.470239 +L 513.827864 250.934354 +L 514.578268 249.058756 +L 515.328671 249.594641 +L 516.079075 249.594641 +L 516.829478 250.666411 +L 517.579882 250.666411 +L 518.330285 251.202297 +L 519.080689 250.666411 +L 519.831092 249.326699 +L 520.581495 249.058756 +L 521.331899 249.326699 +L 522.082302 250.130526 +L 522.832706 249.594641 +L 523.583109 250.666411 +L 524.333513 249.594641 +L 525.083916 248.790813 +L 525.83432 248.522871 +L 526.584723 248.522871 +L 527.335126 249.862584 +L 528.08553 246.915215 +L 528.835933 251.470239 +L 529.586337 251.470239 +L 530.33674 249.058756 +L 531.087144 250.398469 +L 531.837547 250.398469 +L 532.587951 248.254928 +L 533.338354 249.862584 +L 534.088757 251.202297 +L 534.839161 250.398469 +L 535.589564 249.326699 +L 536.339968 248.522871 +L 537.090371 249.058756 +L 537.840775 247.4511 +L 538.591178 249.594641 +L 539.341581 250.934354 +L 540.091985 250.130526 +L 540.842388 246.647273 +L 541.592792 247.986986 +L 542.343195 250.666411 +L 543.093599 250.130526 +L 543.844002 248.522871 +L 544.594406 250.130526 +L 545.344809 251.470239 +L 546.095212 249.594641 +L 546.845616 250.130526 +L 547.596019 249.594641 +L 548.346423 248.790813 +L 549.096826 250.398469 +L 549.84723 251.470239 +L 550.597633 251.470239 +L 551.348037 250.666411 +L 552.09844 250.130526 +L 552.848843 250.130526 +L 553.599247 249.058756 +L 554.34965 251.470239 +L 555.100054 250.934354 +L 555.850457 251.738182 +L 556.600861 250.398469 +L 557.351264 249.862584 +L 558.101668 249.594641 +L 558.852071 248.522871 +L 559.602474 251.202297 +L 560.352878 251.470239 +L 561.103281 249.326699 +L 561.853685 249.594641 +L 562.604088 250.130526 +L 563.354492 250.398469 +L 564.104895 249.862584 +L 564.855299 251.470239 +L 565.605702 251.738182 +L 566.356105 250.934354 +L 567.106509 250.398469 +L 567.856912 249.058756 +L 568.607316 251.202297 +L 569.357719 250.666411 +L 570.108123 251.470239 +L 570.858526 251.202297 +L 571.60893 250.130526 +L 572.359333 249.594641 +L 573.109736 250.130526 +L 573.86014 249.058756 +L 574.610543 250.666411 +L 575.360947 251.470239 +L 576.11135 250.130526 +L 576.861754 251.202297 +L 577.612157 250.666411 +L 578.362561 250.666411 +L 579.112964 248.522871 +L 579.863367 249.594641 +L 580.613771 250.934354 +L 581.364174 251.202297 +L 582.114578 249.594641 +L 582.864981 249.594641 +L 583.615385 250.666411 +L 584.365788 249.594641 +L 585.116192 249.594641 +L 585.866595 251.470239 +L 586.616998 249.594641 +L 587.367402 249.326699 +L 588.117805 250.666411 +L 588.868209 249.594641 +L 589.618612 249.326699 +L 590.369016 251.202297 +L 591.119419 251.738182 +L 591.869822 250.130526 +L 592.620226 249.594641 +L 593.370629 250.666411 +L 594.871436 250.130526 +L 595.62184 250.666411 +L 596.372243 251.470239 +L 597.122647 250.130526 +L 597.87305 250.130526 +L 598.623453 249.326699 +L 599.373857 249.862584 +L 600.12426 249.862584 +L 600.874664 250.934354 +L 601.625067 251.738182 +L 602.375471 251.202297 +L 603.125874 250.398469 +L 603.876278 250.398469 +L 604.626681 250.934354 +L 605.377084 250.130526 +L 606.127488 250.934354 +L 606.877891 251.470239 +L 607.628295 250.398469 +L 608.378698 249.862584 +L 609.129102 250.130526 +L 609.879505 249.058756 +L 610.629909 249.594641 +L 611.380312 251.738182 +L 612.130715 251.470239 +L 612.881119 250.398469 +L 613.631522 249.862584 +L 614.381926 249.058756 +L 615.132329 249.594641 +L 615.882733 245.039617 +L 616.633136 251.202297 +L 617.38354 250.666411 +L 618.133943 249.058756 +L 618.884346 247.183158 +L 619.63475 248.790813 +L 620.385153 249.862584 +L 621.135557 250.398469 +L 621.88596 251.202297 +L 622.636364 251.202297 +L 622.636364 251.202297 +" clip-path="url(#p10d438fcf7)" style="fill: none; stroke: #ff7f0e; stroke-width: 1.5; stroke-linecap: square"/> + - + diff --git a/doc/source/tracking/traffic/views.csv b/doc/source/tracking/traffic/views.csv index b8e022c63..fa966903b 100644 --- a/doc/source/tracking/traffic/views.csv +++ b/doc/source/tracking/traffic/views.csv @@ -601,7 +601,6 @@ _date,total_views,unique_views 2022-06-18,14,2 2022-06-19,2,1 2022-06-20,17,4 -2022-06-20,15,3 2022-06-21,39,6 2022-06-22,31,11 2022-06-23,29,3 @@ -622,7 +621,6 @@ _date,total_views,unique_views 2022-07-08,88,9 2022-07-09,16,4 2022-07-10,9,3 -2022-07-11,109,8 2022-07-11,113,9 2022-07-12,52,9 2022-07-13,20,5 @@ -644,7 +642,6 @@ _date,total_views,unique_views 2022-07-30,9,5 2022-07-31,2,2 2022-08-01,11,7 -2022-08-01,10,6 2022-08-02,11,7 2022-08-03,41,10 2022-08-04,18,8 @@ -672,3 +669,10 @@ _date,total_views,unique_views 2022-08-26,182,26 2022-08-27,8,3 2022-08-28,10,5 +2022-08-29,78,11 +2022-08-30,149,18 +2022-08-31,53,12 +2022-09-01,20,8 +2022-09-02,17,6 +2022-09-03,5,3 +2022-09-04,4,3 From 56487ec29e7a82abcee50865433ccb8e11c48cb9 Mon Sep 17 00:00:00 2001 From: Jessica Scheick Date: Mon, 17 Oct 2022 18:15:12 -0400 Subject: [PATCH 38/44] add provider flag to CMR request (#380) * add provider flag to CMR request to remove duplicates (on prem + cloud versions of granules) Co-authored-by: Tyler Sutterley --- .../documentation/classes_dev_uml.svg | 6 +- .../documentation/classes_user_uml.svg | 318 +++++++++--------- icepyx/core/granules.py | 11 +- 3 files changed, 171 insertions(+), 164 deletions(-) diff --git a/doc/source/user_guide/documentation/classes_dev_uml.svg b/doc/source/user_guide/documentation/classes_dev_uml.svg index 465dd2464..5f5ac38e4 100644 --- a/doc/source/user_guide/documentation/classes_dev_uml.svg +++ b/doc/source/user_guide/documentation/classes_dev_uml.svg @@ -18,7 +18,7 @@ capability_url email netrc : NoneType -pswd : NoneType, str +pswd : str, NoneType session : Session uid @@ -50,7 +50,7 @@ __init__() download(verbose, path, session, restart) -get_avail(CMRparams, reqparams) +get_avail(CMRparams, reqparams, cloud) place_order(CMRparams, reqparams, subsetparams, verbose, subset, session, geom_filepath) @@ -221,7 +221,7 @@ _is2catalog : Catalog _out_obj : Dataset _pattern : str -_prod : NoneType, str +_prod : str, NoneType _read_vars _source_type : str data_source : NoneType diff --git a/doc/source/user_guide/documentation/classes_user_uml.svg b/doc/source/user_guide/documentation/classes_user_uml.svg index f13a38c9c..a5c4376d7 100644 --- a/doc/source/user_guide/documentation/classes_user_uml.svg +++ b/doc/source/user_guide/documentation/classes_user_uml.svg @@ -4,272 +4,272 @@ - + classes_user_uml - + icepyx.core.Earthdata.Earthdata - -Earthdata - + +Earthdata + capability_url email netrc : NoneType -pswd : NoneType, str +pswd : str, NoneType session : Session uid - + login(attempts) icepyx.core.query.GenQuery - -GenQuery - - - + +GenQuery + + + icepyx.core.granules.Granules - -Granules - -avail : list -orderIDs : list - -download(verbose, path, session, restart) -get_avail(CMRparams, reqparams) -place_order(CMRparams, reqparams, subsetparams, verbose, subset, session, geom_filepath) + +Granules + +avail : list +orderIDs : list + +download(verbose, path, session, restart) +get_avail(CMRparams, reqparams, cloud) +place_order(CMRparams, reqparams, subsetparams, verbose, subset, session, geom_filepath) icepyx.core.query.Query - -Query - -CMRparams -cycles -dataset -dates -end_time -file_vars -granules -order_vars -product -product_version -reqparams -spatial -spatial_extent -start_time -tracks - -avail_granules(ids, cycles, tracks, s3urls) -download_granules(path, verbose, subset, restart) -earthdata_login(uid, email, s3token) -latest_version() -order_granules(verbose, subset, email) -product_all_info() -product_summary_info() -show_custom_options(dictview) -subsetparams() -visualize_elevation() -visualize_spatial_extent() + +Query + +CMRparams +cycles +dataset +dates +end_time +file_vars +granules +order_vars +product +product_version +reqparams +spatial +spatial_extent +start_time +tracks + +avail_granules(ids, cycles, tracks, s3urls) +download_granules(path, verbose, subset, restart) +earthdata_login(uid, email, s3token) +latest_version() +order_granules(verbose, subset, email) +product_all_info() +product_summary_info() +show_custom_options(dictview) +subsetparams() +visualize_elevation() +visualize_spatial_extent() icepyx.core.granules.Granules->icepyx.core.query.Query - - -_granules + + +_granules icepyx.core.granules.Granules->icepyx.core.query.Query - - -_granules + + +_granules icepyx.core.icesat2data.Icesat2Data - -Icesat2Data - - - + +Icesat2Data + + + icepyx.core.exceptions.NsidcQueryError - -NsidcQueryError - -errmsg -msgtxt : str - - + +NsidcQueryError + +errmsg +msgtxt : str + + icepyx.core.exceptions.QueryError - -QueryError - - - + +QueryError + + + icepyx.core.exceptions.NsidcQueryError->icepyx.core.exceptions.QueryError - - + + icepyx.core.APIformatting.Parameters - -Parameters - -fmted_keys -partype -poss_keys - -build_params() -check_req_values() -check_values() + +Parameters + +fmted_keys +partype +poss_keys + +build_params() +check_req_values() +check_values() icepyx.core.APIformatting.Parameters->icepyx.core.query.Query - - -_CMRparams + + +_CMRparams icepyx.core.APIformatting.Parameters->icepyx.core.query.Query - - -_reqparams + + +_reqparams icepyx.core.APIformatting.Parameters->icepyx.core.query.Query - - -_subsetparams + + +_subsetparams icepyx.core.APIformatting.Parameters->icepyx.core.query.Query - - -_subsetparams + + +_subsetparams icepyx.core.query.Query->icepyx.core.query.GenQuery - - + + icepyx.core.read.Read - -Read - -data_source : NoneType -is2catalog -vars - -load() + +Read + +data_source : NoneType +is2catalog +vars + +load() icepyx.core.spatial.Spatial - -Spatial - -extent_file -extent_type -spatial_extent - - + +Spatial + +extent_file +extent_type +spatial_extent + + icepyx.core.spatial.Spatial->icepyx.core.query.GenQuery - - -_sp_extent + + +_sp_extent icepyx.core.variables.Variables - -Variables - -path : NoneType -product : NoneType -wanted : NoneType, dict - -append(defaults, var_list, beam_list, keyword_list) -avail(options, internal) -parse_var_list(varlist, tiered, tiered_vars) -remove(all, var_list, beam_list, keyword_list) + +Variables + +path : NoneType +product : NoneType +wanted : NoneType, dict + +append(defaults, var_list, beam_list, keyword_list) +avail(options, internal) +parse_var_list(varlist, tiered, tiered_vars) +remove(all, var_list, beam_list, keyword_list) icepyx.core.variables.Variables->icepyx.core.query.Query - - -_order_vars + + +_order_vars icepyx.core.variables.Variables->icepyx.core.query.Query - - -_order_vars + + +_order_vars icepyx.core.variables.Variables->icepyx.core.query.Query - - -_file_vars + + +_file_vars icepyx.core.variables.Variables->icepyx.core.read.Read - - -_read_vars + + +_read_vars icepyx.core.visualization.Visualize - -Visualize - -bbox : list -cycles : NoneType -date_range : NoneType -product : str, NoneType -tracks : NoneType - -generate_OA_parameters(): list -grid_bbox(binsize): list -make_request(base_url, payload) -parallel_request_OA(): da.array -query_icesat2_filelist(): tuple -request_OA_data(paras): da.array -viz_elevation(): (hv.DynamicMap, hv.Layout) + +Visualize + +bbox : list +cycles : NoneType +date_range : NoneType +product : NoneType, str +tracks : NoneType + +generate_OA_parameters(): list +grid_bbox(binsize): list +make_request(base_url, payload) +parallel_request_OA(): da.array +query_icesat2_filelist(): tuple +request_OA_data(paras): da.array +viz_elevation(): (hv.DynamicMap, hv.Layout) diff --git a/icepyx/core/granules.py b/icepyx/core/granules.py index d3a9adac0..7a58df789 100644 --- a/icepyx/core/granules.py +++ b/icepyx/core/granules.py @@ -171,7 +171,7 @@ def __init__( # ---------------------------------------------------------------------- # Methods - def get_avail(self, CMRparams, reqparams): + def get_avail(self, CMRparams, reqparams, cloud=False): """ Get a list of available granules for the query object's parameters. Generates the `avail` attribute of the granules object. @@ -183,6 +183,8 @@ def get_avail(self, CMRparams, reqparams): reqparams : dictionary Dictionary of properly formatted parameters required for searching, ordering, or downloading from NSIDC. + cloud : boolean, default False + Whether or not you want data available in the cloud (versus on premises). Notes ----- @@ -207,8 +209,13 @@ def get_avail(self, CMRparams, reqparams): headers = {"Accept": "application/json", "Client-Id": "icepyx"} # note we should also check for errors whenever we ping NSIDC-API - make a function to check for errors + if cloud: + prov_flag = "NSIDC_CPRD" + else: + prov_flag = "NSIDC_ECS" + params = apifmt.combine_params( - CMRparams, {k: reqparams[k] for k in ["page_size"]} + CMRparams, {k: reqparams[k] for k in ["page_size"]}, {"provider": prov_flag} ) cmr_search_after = None From 870e944e716da69b2e92f43044db46f226c98eac Mon Sep 17 00:00:00 2001 From: Wei Ji <23487320+weiji14@users.noreply.github.com> Date: Wed, 19 Oct 2022 14:03:35 -0400 Subject: [PATCH 39/44] Support Python 3.10 and 3.11 (#372) * Support Python 3.10 Set upper pin of Python to be 3.10. * Update PyPI classifiers and set development status from planning to beta Ref: https://pypi.org/classifiers/ * Run readthedocs build on Python 3.10 and ubuntu 22.04 * Set upper Python version to 3.11 * Remove upper pin for python_requires * GitHub action UML generation auto-update Co-authored-by: GitHub Action --- .../user_guide/documentation/classes_dev_uml.svg | 14 +++++++------- readthedocs.yml | 4 ++-- setup.py | 15 ++++++++++++--- 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/doc/source/user_guide/documentation/classes_dev_uml.svg b/doc/source/user_guide/documentation/classes_dev_uml.svg index 5f5ac38e4..d2a64f001 100644 --- a/doc/source/user_guide/documentation/classes_dev_uml.svg +++ b/doc/source/user_guide/documentation/classes_dev_uml.svg @@ -68,7 +68,7 @@ _file_vars _granules _order_vars -_prod : str, NoneType +_prod : NoneType, str _readable_granule_name : list _reqparams _s3login_credentials @@ -162,9 +162,9 @@ Parameters -_fmted_keys : NoneType, dict +_fmted_keys : dict, NoneType _poss_keys : dict -_reqtype : str, NoneType +_reqtype : NoneType, str fmted_keys partype poss_keys @@ -221,7 +221,7 @@ _is2catalog : Catalog _out_obj : Dataset _pattern : str -_prod : str, NoneType +_prod : NoneType, str _read_vars _source_type : str data_source : NoneType @@ -266,13 +266,13 @@ Variables -_avail : list, NoneType +_avail : NoneType, list _session : NoneType _vartype _version : NoneType path : NoneType product : NoneType -wanted : dict, NoneType +wanted : NoneType, dict __init__(vartype, avail, wanted, session, product, version, path) _check_valid_lists(vgrp, allpaths, var_list, beam_list, keyword_list) @@ -322,7 +322,7 @@ bbox : list cycles : NoneType date_range : NoneType -product : str, NoneType +product : NoneType, str tracks : NoneType __init__(query_obj, product, spatial_extent, date_range, cycles, tracks) diff --git a/readthedocs.yml b/readthedocs.yml index a36602990..503321bde 100644 --- a/readthedocs.yml +++ b/readthedocs.yml @@ -7,9 +7,9 @@ version: 2 # Set the version of Python and other tools you might need build: - os: ubuntu-20.04 + os: ubuntu-22.04 tools: - python: "3.9" + python: "3.10" # Build documentation in the docs/ directory with Sphinx sphinx: diff --git a/setup.py b/setup.py index 5873d9474..f41b565c4 100644 --- a/setup.py +++ b/setup.py @@ -26,12 +26,21 @@ packages=setuptools.find_packages(exclude=["*tests"]), install_requires=INSTALL_REQUIRES, extras_require=EXTRAS_REQUIRE, - python_requires=">=3, <3.10", + python_requires=">=3", classifiers=[ - "Programming Language :: Python :: 3", + "Development Status :: 4 - Beta", + "Intended Audience :: Science/Research", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", - "Development Status :: 1 - Planning", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Topic :: Scientific/Engineering", + "Topic :: Scientific/Engineering :: GIS", + "Topic :: Software Development :: Libraries", ], py_modules=["_icepyx_version"], use_scm_version={ From 3e38c5c32b0d507a39725c58fbaf1d33f3e924e9 Mon Sep 17 00:00:00 2001 From: Jessica Scheick Date: Thu, 27 Oct 2022 20:45:58 -0400 Subject: [PATCH 40/44] add cross-dateline handling and work on new spatial class (#331) * add cross-dateline flag; check for dateline crossing and handling in geodataframe function * move cmr and egi spatial formatting to spatial class to leverage class object info * make use of private variables consistent * clean up test failures due to properties/var naming * add multi-feature handling in CMR * add more edge cases and update accepted dateline check inputs Co-authored-by: Wei Ji <23487320+weiji14@users.noreply.github.com> --- .../example_notebooks/IS2_data_access.ipynb | 14 +- .../documentation/classes_dev_uml.svg | 156 +- .../documentation/classes_user_uml.svg | 335 +++-- icepyx/core/APIformatting.py | 60 +- icepyx/core/query.py | 130 +- icepyx/core/spatial.py | 373 +++-- icepyx/core/visualization.py | 10 +- icepyx/tests/test_APIformatting.py | 1006 +------------ icepyx/tests/test_query.py | 2 +- icepyx/tests/test_spatial.py | 1330 +++++++++++++++-- 10 files changed, 1847 insertions(+), 1569 deletions(-) diff --git a/doc/source/example_notebooks/IS2_data_access.ipynb b/doc/source/example_notebooks/IS2_data_access.ipynb index a8941eca3..fbac1b664 100644 --- a/doc/source/example_notebooks/IS2_data_access.ipynb +++ b/doc/source/example_notebooks/IS2_data_access.ipynb @@ -83,6 +83,9 @@ "*NOTE: The input keyword for `short_name` was updated in the code from `dataset` to `product` to match common usage.\n", "This should not affect users providing positional inputs as demonstrated in this tutorial.*\n", "\n", + "*NOTE: You can submit at most one bounding box or a list of lonlat polygon coordinates per object instance.\n", + "Per NSIDC requirements, geospatial polygon files may only contain one feature (polygon).*\n", + "\n", "Then, for all non-gridded products (ATL<=13), you must include AT LEAST one of the following inputs (temporal or orbital constraints):\n", "- `date_range` = the date range for which you would like to search for results. Must be formatted as a set of 'YYYY-MM-DD' strings separated by a comma.\n", "- `cycles` = Which orbital cycle to use, input as a numerical string or a list of strings. If no input is given, this value defaults to all available cycles within the search parameters. An orbital cycle refers to the 91-day repeat period of the ICESat-2 orbit.\n", @@ -443,15 +446,6 @@ "region_a.subsetparams()" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "region_a._geom_filepath" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -525,7 +519,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.4" + "version": "3.9.13" } }, "nbformat": 4, diff --git a/doc/source/user_guide/documentation/classes_dev_uml.svg b/doc/source/user_guide/documentation/classes_dev_uml.svg index d2a64f001..54a9daa7f 100644 --- a/doc/source/user_guide/documentation/classes_dev_uml.svg +++ b/doc/source/user_guide/documentation/classes_dev_uml.svg @@ -4,11 +4,11 @@ - + classes_dev_uml - + icepyx.core.Earthdata.Earthdata @@ -29,15 +29,15 @@ icepyx.core.query.GenQuery - -GenQuery - -_end : datetime -_sp_extent -_start : datetime - -__init__(spatial_extent, date_range, start_time, end_time) -__str__() + +GenQuery + +_end : datetime +_spatial +_start : datetime + +__init__(spatial_extent, date_range, start_time, end_time) +__str__() @@ -68,7 +68,7 @@ _file_vars _granules _order_vars -_prod : NoneType, str +_prod : str, NoneType _readable_granule_name : list _reqparams _s3login_credentials @@ -123,38 +123,38 @@ icepyx.core.icesat2data.Icesat2Data - -Icesat2Data - - -__init__() + +Icesat2Data + + +__init__() icepyx.core.exceptions.NsidcQueryError - -NsidcQueryError - -errmsg -msgtxt : str - -__init__(errmsg, msgtxt) -__str__() + +NsidcQueryError + +errmsg +msgtxt : str + +__init__(errmsg, msgtxt) +__str__() icepyx.core.exceptions.QueryError - -QueryError - - - + +QueryError + + + icepyx.core.exceptions.NsidcQueryError->icepyx.core.exceptions.QueryError - - + + @@ -164,7 +164,7 @@ _fmted_keys : dict, NoneType _poss_keys : dict -_reqtype : NoneType, str +_reqtype : str, NoneType fmted_keys partype poss_keys @@ -207,8 +207,8 @@ icepyx.core.query.Query->icepyx.core.query.GenQuery - - + + @@ -240,25 +240,37 @@ icepyx.core.spatial.Spatial - -Spatial - -_ext_type : str -_geom_file : NoneType -_spatial_ext -extent_file -extent_type -spatial_extent - -__init__(spatial_extent) -__str__() + +Spatial + +_ext_type : str +_gdf_spat : GeoDataFrame, DataFrame +_geom_file : NoneType +_spatial_ext +_xdateln +extent +extent_as_gdf +extent_file +extent_type + +__init__(spatial_extent) +__str__() +fmt_for_CMR() +fmt_for_EGI() icepyx.core.spatial.Spatial->icepyx.core.query.GenQuery - - -_sp_extent + + +_spatial + + + +icepyx.core.spatial.Spatial->icepyx.core.query.GenQuery + + +_spatial @@ -286,28 +298,28 @@ remove(all, var_list, beam_list, keyword_list) - + icepyx.core.variables.Variables->icepyx.core.query.Query _order_vars - + icepyx.core.variables.Variables->icepyx.core.query.Query _order_vars - + icepyx.core.variables.Variables->icepyx.core.query.Query _file_vars - + icepyx.core.variables.Variables->icepyx.core.read.Read @@ -316,23 +328,23 @@ icepyx.core.visualization.Visualize - -Visualize - -bbox : list -cycles : NoneType -date_range : NoneType -product : NoneType, str -tracks : NoneType - -__init__(query_obj, product, spatial_extent, date_range, cycles, tracks) -generate_OA_parameters(): list -grid_bbox(binsize): list -make_request(base_url, payload) -parallel_request_OA(): da.array -query_icesat2_filelist(): tuple -request_OA_data(paras): da.array -viz_elevation(): (hv.DynamicMap, hv.Layout) + +Visualize + +bbox : list +cycles : NoneType +date_range : NoneType +product : str, NoneType +tracks : NoneType + +__init__(query_obj, product, spatial_extent, date_range, cycles, tracks) +generate_OA_parameters(): list +grid_bbox(binsize): list +make_request(base_url, payload) +parallel_request_OA(): da.array +query_icesat2_filelist(): tuple +request_OA_data(paras): da.array +viz_elevation(): (hv.DynamicMap, hv.Layout) diff --git a/doc/source/user_guide/documentation/classes_user_uml.svg b/doc/source/user_guide/documentation/classes_user_uml.svg index a5c4376d7..2498f2cfe 100644 --- a/doc/source/user_guide/documentation/classes_user_uml.svg +++ b/doc/source/user_guide/documentation/classes_user_uml.svg @@ -4,272 +4,281 @@ - + classes_user_uml - + icepyx.core.Earthdata.Earthdata - -Earthdata - + +Earthdata + capability_url email netrc : NoneType -pswd : str, NoneType +pswd : NoneType, str session : Session uid - + login(attempts) icepyx.core.query.GenQuery - -GenQuery - - - + +GenQuery + + + icepyx.core.granules.Granules - -Granules - -avail : list -orderIDs : list - -download(verbose, path, session, restart) -get_avail(CMRparams, reqparams, cloud) -place_order(CMRparams, reqparams, subsetparams, verbose, subset, session, geom_filepath) + +Granules + +avail : list +orderIDs : list + +download(verbose, path, session, restart) +get_avail(CMRparams, reqparams, cloud) +place_order(CMRparams, reqparams, subsetparams, verbose, subset, session, geom_filepath) icepyx.core.query.Query - -Query - -CMRparams -cycles -dataset -dates -end_time -file_vars -granules -order_vars -product -product_version -reqparams -spatial -spatial_extent -start_time -tracks - -avail_granules(ids, cycles, tracks, s3urls) -download_granules(path, verbose, subset, restart) -earthdata_login(uid, email, s3token) -latest_version() -order_granules(verbose, subset, email) -product_all_info() -product_summary_info() -show_custom_options(dictview) -subsetparams() -visualize_elevation() -visualize_spatial_extent() + +Query + +CMRparams +cycles +dataset +dates +end_time +file_vars +granules +order_vars +product +product_version +reqparams +spatial +spatial_extent +start_time +tracks + +avail_granules(ids, cycles, tracks, s3urls) +download_granules(path, verbose, subset, restart) +earthdata_login(uid, email, s3token) +latest_version() +order_granules(verbose, subset, email) +product_all_info() +product_summary_info() +show_custom_options(dictview) +subsetparams() +visualize_elevation() +visualize_spatial_extent() icepyx.core.granules.Granules->icepyx.core.query.Query - - -_granules + + +_granules icepyx.core.granules.Granules->icepyx.core.query.Query - - -_granules + + +_granules icepyx.core.icesat2data.Icesat2Data - -Icesat2Data - - - + +Icesat2Data + + + icepyx.core.exceptions.NsidcQueryError - -NsidcQueryError - -errmsg -msgtxt : str - - + +NsidcQueryError + +errmsg +msgtxt : str + + icepyx.core.exceptions.QueryError - -QueryError - - - + +QueryError + + + icepyx.core.exceptions.NsidcQueryError->icepyx.core.exceptions.QueryError - - + + icepyx.core.APIformatting.Parameters - -Parameters - -fmted_keys -partype -poss_keys - -build_params() -check_req_values() -check_values() + +Parameters + +fmted_keys +partype +poss_keys + +build_params() +check_req_values() +check_values() icepyx.core.APIformatting.Parameters->icepyx.core.query.Query - - -_CMRparams + + +_CMRparams icepyx.core.APIformatting.Parameters->icepyx.core.query.Query - - -_reqparams + + +_reqparams icepyx.core.APIformatting.Parameters->icepyx.core.query.Query - - -_subsetparams + + +_subsetparams icepyx.core.APIformatting.Parameters->icepyx.core.query.Query - - -_subsetparams + + +_subsetparams icepyx.core.query.Query->icepyx.core.query.GenQuery - - + + icepyx.core.read.Read - -Read - -data_source : NoneType -is2catalog -vars - -load() + +Read + +data_source : NoneType +is2catalog +vars + +load() icepyx.core.spatial.Spatial - -Spatial - -extent_file -extent_type -spatial_extent - - + +Spatial + +extent +extent_as_gdf +extent_file +extent_type + +fmt_for_CMR() +fmt_for_EGI() icepyx.core.spatial.Spatial->icepyx.core.query.GenQuery - - -_sp_extent + + +_spatial + + + +icepyx.core.spatial.Spatial->icepyx.core.query.GenQuery + + +_spatial icepyx.core.variables.Variables - -Variables - -path : NoneType -product : NoneType -wanted : NoneType, dict - -append(defaults, var_list, beam_list, keyword_list) -avail(options, internal) -parse_var_list(varlist, tiered, tiered_vars) -remove(all, var_list, beam_list, keyword_list) + +Variables + +path : NoneType +product : NoneType +wanted : NoneType, dict + +append(defaults, var_list, beam_list, keyword_list) +avail(options, internal) +parse_var_list(varlist, tiered, tiered_vars) +remove(all, var_list, beam_list, keyword_list) - + icepyx.core.variables.Variables->icepyx.core.query.Query - - -_order_vars + + +_order_vars - + icepyx.core.variables.Variables->icepyx.core.query.Query - - -_order_vars + + +_order_vars - + icepyx.core.variables.Variables->icepyx.core.query.Query - - -_file_vars + + +_file_vars - + icepyx.core.variables.Variables->icepyx.core.read.Read - - -_read_vars + + +_read_vars icepyx.core.visualization.Visualize - -Visualize - -bbox : list -cycles : NoneType -date_range : NoneType -product : NoneType, str -tracks : NoneType - -generate_OA_parameters(): list -grid_bbox(binsize): list -make_request(base_url, payload) -parallel_request_OA(): da.array -query_icesat2_filelist(): tuple -request_OA_data(paras): da.array -viz_elevation(): (hv.DynamicMap, hv.Layout) + +Visualize + +bbox : list +cycles : NoneType +date_range : NoneType +product : str, NoneType +tracks : NoneType + +generate_OA_parameters(): list +grid_bbox(binsize): list +make_request(base_url, payload) +parallel_request_OA(): da.array +query_icesat2_filelist(): tuple +request_OA_data(paras): da.array +viz_elevation(): (hv.DynamicMap, hv.Layout) diff --git a/icepyx/core/APIformatting.py b/icepyx/core/APIformatting.py index d7aaf5613..55d49f84c 100644 --- a/icepyx/core/APIformatting.py +++ b/icepyx/core/APIformatting.py @@ -1,13 +1,8 @@ # Generate and format information for submitting to API (CMR and NSIDC) import datetime as dt -import geopandas as gpd import pprint -from shapely.geometry import Polygon -from shapely.geometry.polygon import orient -import fiona -fiona.drvsupport.supported_drivers["LIBKML"] = "rw" # ---------------------------------------------------------------------- # parameter-specific formatting for display @@ -57,59 +52,6 @@ def _fmt_temporal(start, end, key): return {key: fmt_timerange} -def _fmt_spatial(ext_type, extent): - """ - Format the spatial extent input into a spatial CMR search or subsetting key value. - - Parameters - ---------- - ext_type : string - Spatial extent type. Must be one of ['bounding_box', 'polygon'] for data searching - or one of ['bbox, 'Boundingshape'] for subsetting. - extent : list - Spatial extent, with input format dependent on the extent type and search. - Bounding box (bounding_box, bbox) coordinates should be provided in decimal degrees as - [lower-left-longitude, lower-left-latitute, upper-right-longitude, upper-right-latitude]. - Polygon (polygon, Boundingshape) coordinates should be provided in decimal degrees as - [longitude, latitude, longitude2, latitude2... longituden, latituden]. - - Returns - ------- - dictionary with properly formatted spatial parameter for CMR search or subsetting - - """ - - # CMR keywords: ['bounding_box', 'polygon'] - # subsetting keywords: ['bbox','Boundingshape'] - assert ext_type in ["bounding_box", "polygon"] or ext_type in [ - "bbox", - "Boundingshape", - ], "Invalid spatial extent type." - - if ext_type in ["bounding_box", "bbox"]: - fmt_extent = ",".join(map(str, extent)) - - elif ext_type == "polygon": - # Simplify polygon. The larger the tolerance value, the more simplified the polygon. See Bruce Wallin's function to do this - poly = extent.simplify(0.05, preserve_topology=False) - poly = orient(poly, sign=1.0) - - # Format dictionary to polygon coordinate pairs for API submission - polygon = ( - ",".join([str(c) for xy in zip(*poly.exterior.coords.xy) for c in xy]) - ).split(",") - extent = [float(i) for i in polygon] - fmt_extent = ",".join(map(str, extent)) - - # DevNote: this elif currently does not have a test (seems like it would just be testing geopandas?) - elif ext_type == "Boundingshape": - poly = orient(extent, sign=1.0) - fmt_extent = gpd.GeoSeries(poly).to_json() - fmt_extent = fmt_extent.replace(" ", "") # remove spaces for API call - - return {ext_type: fmt_extent} - - def _fmt_readable_granules(dset, **kwds): """ Create list of readable granule names for CMR queries @@ -500,4 +442,4 @@ def build_params(self, **kwargs): elif kwargs["extent_type"] == "polygon": k = "Boundingshape" - self._fmted_keys.update(_fmt_spatial(k, kwargs["spatial_extent"])) + self._fmted_keys.update({k: kwargs["spatial_extent"]}) diff --git a/icepyx/core/query.py b/icepyx/core/query.py index d7c9abede..1020d1a0b 100644 --- a/icepyx/core/query.py +++ b/icepyx/core/query.py @@ -37,6 +37,10 @@ class GenQuery: spatial_extent : list of coordinates or string (i.e. file name) Spatial extent of interest, provided as a bounding box, list of polygon coordinates, or geospatial polygon file. + NOTE: Longitude values are assumed to be in the range -180 to +180, + with 0 being the Prime Meridian (Greenwich). See xdateline for regions crossing the date line. + You can submit at most one bounding box or list of polygon coordinates. + Per NSIDC requirements, geospatial polygon files may only contain one feature (polygon). Bounding box coordinates should be provided in decimal degrees as [lower-left-longitude, lower-left-latitute, upper-right-longitude, upper-right-latitude]. Polygon coordinates should be provided as coordinate pairs in decimal degrees as @@ -60,10 +64,17 @@ class GenQuery: end_time : HH:mm:ss, default 23:59:59 End time in UTC/Zulu (24 hour clock). If None, use default. TODO: check for time in date-range date-time object, if that's used for input. + xdateline : boolean, default None + Keyword argument to enforce spatial inputs that cross the International Date Line. + Internally, this will translate your longitudes to 0 to 360 to construct the + correct, valid Shapely geometry. + + WARNING: This will allow your request to be properly submitted and visualized. + However, this flag WILL NOT automatically correct for incorrectly ordered spatial inputs. Examples -------- - Init with bounding box + Initializing Query with a bounding box >>> reg_a_bbox = [-55, 68, -48, 71] >>> reg_a_dates = ['2019-02-20','2019-02-28'] @@ -80,7 +91,7 @@ class GenQuery: >>> reg_a = GenQuery(reg_a_poly, reg_a_dates) >>> print(reg_a) Extent type: polygon - Coordinates: POLYGON ((-55 68, -55 71, -48 71, -48 68, -55 68)) + Coordinates: [-55.0, 68.0, -55.0, 71.0, -48.0, 71.0, -48.0, 68.0, -55.0, 68.0] Date range: (2019-02-20 00:00:00, 2019-02-28 23:59:59) Initializing Query with a geospatial polygon file. @@ -90,7 +101,7 @@ class GenQuery: >>> reg_a = GenQuery(aoi, reg_a_dates) >>> print(reg_a) Extent type: polygon - Coordinates: POLYGON ((-55 68, -55 71, -48 71, -48 68, -55 68)) + Coordinates: [-55.0, 68.0, -55.0, 71.0, -48.0, 71.0, -48.0, 68.0, -55.0, 68.0] Date range: (2019-02-22 00:00:00, 2019-02-28 23:59:59) See Also @@ -100,11 +111,18 @@ class GenQuery: """ def __init__( - self, spatial_extent=None, date_range=None, start_time=None, end_time=None + self, + spatial_extent=None, + date_range=None, + start_time=None, + end_time=None, + **kwargs, ): # validate & init spatial extent - - self._sp_extent = spat.Spatial(spatial_extent) + if "xdateline" in kwargs.keys(): + self._spatial = spat.Spatial(spatial_extent, xdateline=kwargs["xdateline"]) + else: + self._spatial = spat.Spatial(spatial_extent) # valiidate and init temporal constraints # TODO: Update this to use Temporal class when completed @@ -113,8 +131,8 @@ def __init__( def __str__(self): str = "Extent type: {0} \nCoordinates: {1}\nDate range: ({2}, {3})".format( - self._sp_extent.extent_type, - self._sp_extent.spatial_extent, + self._spatial._ext_type, + self._spatial._spatial_ext, self._start, self._end, ) @@ -166,7 +184,7 @@ class Query(GenQuery): >>> reg_a = Query('ATL06', reg_a_bbox, reg_a_dates) >>> print(reg_a) Product ATL06 v005 - ('bounding box', [-55.0, 68.0, -48.0, 71.0]) + ('bounding_box', [-55.0, 68.0, -48.0, 71.0]) Date range ['2019-02-20', '2019-02-28'] Initializing Query with a list of polygon vertex coordinate pairs. @@ -175,9 +193,7 @@ class Query(GenQuery): >>> reg_a_dates = ['2019-02-20','2019-02-28'] >>> reg_a = Query('ATL06', reg_a_poly, reg_a_dates) >>> reg_a.spatial_extent - ('polygon', - (array('d', [-55.0, -55.0, -48.0, -48.0, -55.0]), - array('d', [68.0, 71.0, 71.0, 68.0, 68.0]))) + ('polygon', [-55.0, 68.0, -55.0, 71.0, -48.0, 71.0, -48.0, 68.0, -55.0, 68.0]) Initializing Query with a geospatial polygon file. @@ -186,7 +202,7 @@ class Query(GenQuery): >>> reg_a = Query('ATL06', aoi, reg_a_dates) >>> print(reg_a) Product ATL06 v005 - ('polygon', (array('d', [-55.0, -55.0, -48.0, -48.0, -55.0]), array('d', [68.0, 71.0, 71.0, 68.0, 68.0]))) + ('polygon', [-55.0, 68.0, -55.0, 71.0, -48.0, 71.0, -48.0, 68.0, -55.0, 68.0]) Date range ['2019-02-22', '2019-02-28'] See Also @@ -208,6 +224,7 @@ def __init__( cycles=None, tracks=None, files=None, # NOTE: if you end up implemeting this feature here, use a better variable name than "files" + **kwargs, ): # Check necessary combination of input has been specified @@ -233,7 +250,7 @@ def __init__( self._prod = is2ref._validate_product(product) - super().__init__(spatial_extent, date_range, start_time, end_time) + super().__init__(spatial_extent, date_range, start_time, end_time, **kwargs) self._version = val.prod_version(self.latest_version(), version) @@ -306,38 +323,29 @@ def product_version(self): @property def spatial(self): """ - Return the Spatial object containing spatial extent information for the query object. + Return the spatial object, which provides the underlying functionality for validating + and formatting geospatial objects. The spatial object has several properties to enable + user access to the stored spatial extent in multiple formats. See Also -------- - icepyx.core.Spatial + spatial.Spatial.spatial_extent + spatial.Spatial.extent_type + spatial.Spatial.extent_file + spatial.Spatial Examples -------- - >>> reg_a = Query('ATL06',[-55, 68, -48, 71],['2019-02-20','2019-02-28']) + >>> reg_a = ipx.Query('ATL06',[-55, 68, -48, 71],['2019-02-20','2019-02-28']) + >>> reg_a.spatial # doctest: +SKIP + + >>> print(reg_a.spatial) Extent type: bounding_box Coordinates: [-55.0, 68.0, -48.0, 71.0] - >>> reg_a_poly = [(-55, 68), (-55, 71), (-48, 71), (-48, 68), (-55, 68)] - >>> reg_a_dates = ['2019-02-20','2019-02-28'] - >>> reg_a = ipx.Query('ATL06', reg_a_poly, reg_a_dates) - >>> print(reg_a.spatial) - Extent type: polygon - Coordinates: POLYGON ((-55 68, -55 71, -48 71, -48 68, -55 68)) - - - >>> aoi = str(Path('./doc/source/example_notebooks/supporting_files/simple_test_poly.gpkg').resolve()) - >>> reg_a_dates = ['2019-02-22','2019-02-28'] - >>> reg_a = ipx.Query('ATL06', aoi, reg_a_dates) - >>> print(reg_a.spatial) # doctest: +SKIP - Extent type: polygon - Source file: ./doc/source/example_notebooks/supporting_files/simple_test_poly.gpkg - Coordinates: POLYGON ((-55 68, -55 71, -48 71, -48 68, -55 68)) - - """ - return self._sp_extent + return self._spatial @property def spatial_extent(self): @@ -346,7 +354,14 @@ def spatial_extent(self): Spatial extent is returned as an input type (which depends on how you initially entered your spatial data) followed by the geometry data. Bounding box data is [lower-left-longitude, lower-left-latitute, upper-right-longitude, upper-right-latitude]. - Polygon data is [[array of longitudes],[array of corresponding latitudes]]. + Polygon data is [longitude1, latitude1, longitude2, latitude2, + ... longitude_n,latitude_n, longitude1,latitude1]. + + Returns + ------- + tuple of length 2 + First tuple element is the spatial type ("bounding box" or "polygon"). + Second tuple element is the spatial extent as a list of coordinates. Examples -------- @@ -354,25 +369,24 @@ def spatial_extent(self): # Note: coordinates returned as float, not int >>> reg_a = Query('ATL06',[-55, 68, -48, 71],['2019-02-20','2019-02-28']) >>> reg_a.spatial_extent - ('bounding box', [-55.0, 68.0, -48.0, 71.0]) + ('bounding_box', [-55.0, 68.0, -48.0, 71.0]) >>> reg_a = Query('ATL06',[(-55, 68), (-55, 71), (-48, 71), (-48, 68), (-55, 68)],['2019-02-20','2019-02-28']) >>> reg_a.spatial_extent - ('polygon', (array('d', [-55.0, -55.0, -48.0, -48.0, -55.0]), array('d', [68.0, 71.0, 71.0, 68.0, 68.0]))) + ('polygon', [-55.0, 68.0, -55.0, 71.0, -48.0, 71.0, -48.0, 68.0, -55.0, 68.0]) # NOTE Is this where we wanted to put the file-based test/example? # The test file path is: examples/supporting_files/simple_test_poly.gpkg + See Also + -------- + Spatial.extent + Spatial.extent_type + Spatial.extent_as_gdf + """ - if self._sp_extent.extent_type == "bounding_box": - return ("bounding box", self._sp_extent.spatial_extent) - elif self._sp_extent.extent_type == "polygon": - # return ['polygon', self._spat_extent] - # Note: self._sp_extent._spat_extent is a shapely geometry object - return ("polygon", self._sp_extent.spatial_extent.exterior.coords.xy) - else: - return ("unknown spatial type", None) + return (self._spatial._ext_type, self._spatial._spatial_ext) @property def dates(self): @@ -511,8 +525,8 @@ def CMRparams(self): self._CMRparams.build_params( product=self.product, version=self._version, - extent_type=self._sp_extent.extent_type, - spatial_extent=self._sp_extent.spatial_extent, + extent_type=self._spatial._ext_type, + spatial_extent=self._spatial.fmt_for_CMR(), **kwargs, ) @@ -582,17 +596,17 @@ def subsetparams(self, **kwargs): else: if self._subsetparams == None: self._subsetparams = apifmt.Parameters("subset") - if self._sp_extent.extent_file is not None: + if self._spatial._geom_file is not None: self._subsetparams.build_params( - geom_filepath=self._sp_extent.extent_file, - extent_type=self._sp_extent.extent_type, - spatial_extent=self._sp_extent.spatial_extent, + geom_filepath=self._spatial._geom_file, + extent_type=self._spatial._ext_type, + spatial_extent=self._spatial.fmt_for_EGI(), **kwargs, ) else: self._subsetparams.build_params( - extent_type=self._sp_extent.extent_type, - spatial_extent=self._sp_extent.spatial_extent, + extent_type=self._spatial._ext_type, + spatial_extent=self._spatial.fmt_for_EGI(), **kwargs, ) @@ -1138,9 +1152,8 @@ def visualize_spatial_extent( >>> reg_a.visualize_spatial_extent # doctest: +SKIP [visual map output] """ - gdf = spat.geodataframe( - self._sp_extent.extent_type, self._sp_extent.spatial_extent - ) + + gdf = self._spatial.extent_as_gdf try: from shapely.geometry import Polygon @@ -1148,8 +1161,7 @@ def visualize_spatial_extent( gv.extension("bokeh") - line_geoms = Polygon(gdf["geometry"][0]).boundary - bbox_poly = gv.Path(line_geoms).opts(color="red", line_color="red") + bbox_poly = gv.Path(gdf["geometry"]).opts(color="red", line_color="red") tile = gv.tile_sources.EsriImagery.opts(width=500, height=500) return tile * bbox_poly diff --git a/icepyx/core/spatial.py b/icepyx/core/spatial.py index eebc09a83..a0c09fd95 100644 --- a/icepyx/core/spatial.py +++ b/icepyx/core/spatial.py @@ -2,7 +2,8 @@ import numpy as np import os from pathlib import Path -from shapely.geometry import Polygon +from shapely.geometry import box, Polygon +from shapely.geometry.polygon import orient import warnings import icepyx.core.APIformatting as apifmt @@ -10,7 +11,7 @@ # DevGoal: need to update the spatial_extent docstring to describe coordinate order for input -def geodataframe(extent_type, spatial_extent, file=False): +def geodataframe(extent_type, spatial_extent, file=False, xdateline=None): """ Return a geodataframe of the spatial extent @@ -32,6 +33,13 @@ def geodataframe(extent_type, spatial_extent, file=False): file : boolean, default False Indication for whether the spatial_extent string is a filename or coordinate list + Returns + ------- + gdf : GeoDataFrame + Returns a GeoPandas GeoDataFrame containing the spatial extent. + The GeoDataFrame will have only one entry unless a geospatial file + was submitted. + See Also -------- icepyx.Query @@ -39,31 +47,34 @@ def geodataframe(extent_type, spatial_extent, file=False): Examples -------- >>> reg_a = ipx.Query('ATL06',[-55, 68, -48, 71],['2019-02-20','2019-02-28']) - >>> gdf = geodataframe(reg_a.spatial.extent_type, reg_a.spatial.spatial_extent) + >>> gdf = geodataframe(reg_a.spatial.extent_type, reg_a.spatial.extent) >>> gdf.geometry - 0 POLYGON ((-55.00000 68.00000, -55.00000 71.000... + 0 POLYGON ((-48.00000 68.00000, -48.00000 71.000... Name: geometry, dtype: geometry """ + if xdateline is not None: + xdateline = xdateline + elif file: + pass + else: + xdateline = check_dateline(extent_type, spatial_extent) + # print("this should cross the dateline:" + str(xdateline)) + if extent_type == "bounding_box": - boxx = [ - spatial_extent[0], - spatial_extent[0], - spatial_extent[2], - spatial_extent[2], - spatial_extent[0], - ] - boxy = [ - spatial_extent[1], - spatial_extent[3], - spatial_extent[3], - spatial_extent[1], - spatial_extent[1], - ] - # DevGoal: check to see that the box is actually correctly constructed; - # have not checked actual location of test coordinates + if xdateline == True: + cartesian_lons = [i if i > 0 else i + 360 for i in spatial_extent[0:-1:2]] + cartesian_spatial_extent = [ + item + for pair in zip(cartesian_lons, spatial_extent[1::2]) + for item in pair + ] + bbox = box(*cartesian_spatial_extent) + else: + bbox = box(*spatial_extent) + # TODO: test case that ensures gdf is constructed as expected (correct coords, order, etc.) - gdf = gpd.GeoDataFrame(geometry=[Polygon(list(zip(boxx, boxy)))]) + gdf = gpd.GeoDataFrame(geometry=[bbox], crs="epsg:4326") # DevGoal: Currently this if/else within this elif are not tested... # DevGoal: the crs setting and management needs to be improved @@ -76,6 +87,16 @@ def geodataframe(extent_type, spatial_extent, file=False): # else, spatial_extent must be a list of floats (or list of tuples of floats) else: + if xdateline == True: + cartesian_lons = [ + i if i > 0 else i + 360 for i in spatial_extent[0:-1:2] + ] + spatial_extent = [ + item + for pair in zip(cartesian_lons, spatial_extent[1::2]) + for item in pair + ] + spatial_extent_geom = Polygon( # syntax of dbl colon is- "start:stop:steps" # 0::2 = start at 0, grab every other coord after @@ -94,15 +115,66 @@ def geodataframe(extent_type, spatial_extent, file=False): else: raise TypeError( - "Your spatial extent type is not an accepted input and a geodataframe cannot be constructed" + f"Your spatial extent type ({extent_type}) is not an accepted " + "input and a geodataframe cannot be constructed" ) - # TODO: Get this working again - # DevNote: can't get test for this else to pass if print the extent_type in the string... - # raise TypeError("Your spatial extent type (" + extent_type + ") is not an accepted input and a geodataframe cannot be constructed") return gdf +def check_dateline(extent_type, spatial_extent): + """ + Check if a bounding box or polygon input cross the dateline. + + Parameters + ---------- + extent_type : string + One of 'bounding_box' or 'polygon', indicating what type of input the spatial extent is + + spatial_extent : list + A list containing the spatial extent as + coordinates in decimal degrees of + [longitude1, latitude1, longitude2, latitude2, ... longitude_n,latitude_n, longitude1,latitude1]. + + + Returns + ------- + boolean + indicating whether or not the spatial extent crosses the dateline. + """ + + if extent_type == "bounding_box": + if spatial_extent[0] > spatial_extent[2]: + # if lower left lon is larger then upper right lon, verify the values are crossing the dateline + assert spatial_extent[0] - 360 <= spatial_extent[2] + + warnings.warn( + "Your bounding box was identified as crossing the dateline." + "If this is not correct, please add `xdateline=False` to your `ipx.Query`" + ) + return True + + else: + return False + + # this works properly, but limits the user to at most 270 deg longitude... + elif extent_type == "polygon": + assert not isinstance( + spatial_extent[0], (list, tuple) + ), "Your polygon list is the wrong format for this function." + lonlist = spatial_extent[0:-1:2] + if np.any( + [abs(lonlist[i] - lonlist[i + 1]) > 270 for i in range(len(lonlist) - 1)] + ): + warnings.warn( + "Your polygon was identified as crossing the dateline." + "If this is not correct, please add `xdateline=False` to your `ipx.Query`" + ) + return True + else: + return False + + def validate_bounding_box(spatial_extent): """ Validates the spatial_extent parameter as a bounding box. @@ -129,8 +201,6 @@ def validate_bounding_box(spatial_extent): -90 <= spatial_extent[3] <= 90 ), "Invalid latitude value (must be between -90 and 90, inclusive)" - # tighten these ranges depending on actual allowed inputs - # TODO: inquire about this; see if we know the "actual allowed inputs" and if this can be fixed assert ( -180 <= spatial_extent[0] <= 180 ), "Invalid longitude value (must be between -180 and 180, inclusive)" @@ -138,18 +208,9 @@ def validate_bounding_box(spatial_extent): -180 <= spatial_extent[2] <= 180 ), "Invalid longitude value (must be between -180 and 180, inclusive)" - # If the longitude's signs differ... - if np.sign(spatial_extent[0]) != np.sign(spatial_extent[2]): - # If the lower left longitude is less than the upper right longitude, throw an error - assert spatial_extent[0] >= spatial_extent[2], "Invalid bounding box longitudes" - - # Else, if longitude signs are the same... - else: - # If the lower left longitude is greater than the upper right longitude, throw an error - assert spatial_extent[0] <= spatial_extent[2], "Invalid bounding box longitudes" - # If the lower left latitude is greater than the upper right latitude, throw an error assert spatial_extent[1] <= spatial_extent[3], "Invalid bounding box latitudes" + spatial_extent = [float(x) for x in spatial_extent] return "bounding_box", spatial_extent, None @@ -209,17 +270,7 @@ def validate_polygon_pairs(spatial_extent): # make all elements of polygon floats polygon = [float(i) for i in polygon] - # create a geodataframe object from polygon - gdf = geodataframe("polygon", polygon, file=False) - spatial_extent = gdf.iloc[0].geometry - - # TODO: Check if this DevGoal is still ongoing - - # #DevGoal: properly format this input type (and any polygon type) - # so that it is clockwise (and only contains 1 pole)!! - # warnings.warn("this type of input is not yet well handled and you may not be able to find data") - - return "polygon", spatial_extent, None + return "polygon", polygon, None def validate_polygon_list(spatial_extent): @@ -272,33 +323,29 @@ def validate_polygon_list(spatial_extent): spatial_extent, len(spatial_extent), spatial_extent[1] ) - extent_type = "polygon" polygon = [float(i) for i in spatial_extent] - gdf = geodataframe(extent_type, polygon, file=False) - spatial_extent = gdf.iloc[0].geometry - - return "polygon", spatial_extent, None + return "polygon", polygon, None def validate_polygon_file(spatial_extent): """ - Validates the spatial_extent parameter as a polygon from a file. + Validates the spatial_extent parameter as a polygon from a file. - If the spatial_extent parameter contains a valid polygon, - returns a tuple containing the Spatial object parameters for the polygon; + If the spatial_extent parameter contains a valid polygon, + returns a tuple containing the Spatial object parameters for the polygon; - otherwise, throw an error containing the reason the polygon/polygon file is invalid. + otherwise, throw an error containing the reason the polygon/polygon file is invalid. - Parameters - ---------- - spatial_extent: string - A string representing a geospatial polygon file (kml, shp, gpkg) - * must provide full file path - * recommended for file to only contain 1 polygon. - * if multiple polygons, only the first polygon is selected at this time. + Parameters + ---------- + spatial_extent: string + A string representing a geospatial polygon file (kml, shp, gpkg) + * must provide full file path + * recommended for file to only contain 1 polygon. + * if multiple polygons, only the first polygon is selected at this time. - """ + """ # Check if the filename path exists; if not, throw an error # print("print statements work \n") @@ -314,26 +361,14 @@ def validate_polygon_file(spatial_extent): extent_type = "polygon" gdf = geodataframe(extent_type, spatial_extent, file=True) - # DevGoal: does the below line mandate that only the first polygon will be read? - # Perhaps we should require files containing only one polygon? - - # RAPHAEL - It only selects the first polygon if there are multiple. - # Unless we can supply the CMR params with muliple polygon inputs - # we should probably req a single polygon. - - # TODO: Require a single polygon OR throw a warning that only the first polygon will be selected? - - gdf_result = gdf.iloc[0].geometry - - # _spat_extent = apifmt._fmt_polygon(spatial_extent) - return "polygon", gdf_result, spatial_extent + return "polygon", gdf, spatial_extent else: raise TypeError("Input spatial extent file must be a kml, shp, or gpkg") class Spatial: - def __init__(self, spatial_extent): + def __init__(self, spatial_extent, **kwarg): """ Validates input from "spatial_extent" argument, then creates a Spatial object with validated inputs as properties of the object. @@ -342,7 +377,7 @@ def __init__(self, spatial_extent): Parameters ---------- - spatial_extent : expects one of the following: + spatial_extent : list or string * list of coordinates (stored in a list of strings, list of numerics, list of tuples, OR np.ndarray) as one of: * bounding box @@ -360,13 +395,9 @@ def __init__(self, spatial_extent): * full file path * recommended for file to only contain 1 polygon; if multiple, only selects first polygon rn - Properties - ---------- - * _spat_ext: The validated/formatted input from spatial_extent, - represents coordinates of a polygon or bounding box. - * _ext_type: The extent type of spatial_extent, one of: polygon, bounding_box - * _geom_file: If spatial_extent was NOT a filename, this is None. - Else, it is the name of the file that _spat_ext is retrieved/validated from. + xdateline : boolean, default None + Optional keyword argument to let user specify whether the spatial input crosses the dateline or not. + See Also -------- @@ -389,7 +420,7 @@ def __init__(self, spatial_extent): >>> reg_a = Spatial(reg_a_poly) >>> print(reg_a) Extent type: polygon - Coordinates: POLYGON ((-55 68, -55 71, -48 71, -48 68, -55 68)) + Coordinates: [-55.0, 68.0, -55.0, 71.0, -48.0, 71.0, -48.0, 68.0, -55.0, 68.0] Initializing Query with a geospatial polygon file. @@ -398,8 +429,7 @@ def __init__(self, spatial_extent): >>> print(reg_a) # doctest: +SKIP Extent Type: polygon Source file: ./doc/source/example_notebooks/supporting_files/simple_test_poly.gpkg - Coordinates: POLYGON ((-55 68, -55 71, -48 71, -48 68, -55 68)) - + Coordinates: [-55.0, 68.0, -55.0, 71.0, -48.0, 71.0, -48.0, 68.0, -55.0, 68.0] """ scalar_types = (int, float, np.int64) @@ -445,12 +475,40 @@ def __init__(self, spatial_extent): # Check if spatial_extent is a string (i.e. a (potential) filename) elif isinstance(spatial_extent, str): - self._ext_type, self._spatial_ext, self._geom_file = validate_polygon_file( + self._ext_type, self._gdf_spat, self._geom_file = validate_polygon_file( spatial_extent ) + # TODO: assess if it's necessary to have a value for _spatial_extent if the input is a file (since it can be plotted from the gdf) + extpoly = self._gdf_spat.geometry.unary_union.boundary + + try: + arrpoly = ( + ",".join([str(c) for xy in zip(*extpoly.coords.xy) for c in xy]) + ).split(",") + except NotImplementedError: + arrpoly = ( + ",".join( + [ + str(c) + for xy in zip(*extpoly.envelope.boundary.coords.xy) + for c in xy + ] + ) + ).split(",") + + self._spatial_ext = [float(i) for i in arrpoly] + + # check for cross dateline keyword submission + if "xdateline" in kwarg.keys(): + self._xdateln = kwarg["xdateline"] + assert self._xdateln in [ + True, + False, + ], "Your 'xdateline' value is invalid. It must be boolean." + def __str__(self): - if self.extent_file is not None: + if self._geom_file is not None: return "Extent type: {0}\nSource file: {1}\nCoordinates: {2}".format( self._ext_type, self._geom_file, self._spatial_ext ) @@ -460,22 +518,51 @@ def __str__(self): ) @property - def spatial_extent(self): + def extent(self): """ Return the coordinates of the spatial extent of the Spatial object. - Examples - -------- - >>> reg_a = Spatial([-55, 68, -48, 71]) - >>> reg_a.spatial_extent - [-55.0, 68.0, -48.0, 71.0] + The result will be returned as an array. + For input geometry files with multiple features, the boundary of the + the unary union of all features is returned. - >>> reg_a = Spatial([(-55, 68), (-55, 71), (-48, 71), (-48, 68), (-55, 68)]) - >>> reg_a.spatial_extent.exterior.coords.xy - (array('d', [-55.0, -55.0, -48.0, -48.0, -55.0]), array('d', [68.0, 71.0, 71.0, 68.0, 68.0])) + Returns + ------- + spatial extent : array + An array of bounding coordinates. """ + return self._spatial_ext + @property + def extent_as_gdf(self): + """ + Return the spatial extent of the query object as a GeoPandas GeoDataframe. + + Returns + ------- + extent_gdf : GeoDataframe + A GeoDataframe containing the spatial region of interest. + """ + + # TODO: test this + if hasattr(self, "_xdateln"): + xdateln = self._xdateln + else: + xdateln = None + + if not hasattr(self, "_gdf_spat"): + if self._geom_file is not None: + self._gdf_spat = geodataframe( + self._ext_type, self._spatial_ext, file=True, xdateline=xdateln + ) + else: + self._gdf_spat = geodataframe( + self._ext_type, self._spatial_ext, xdateline=xdateln + ) + + return self._gdf_spat + @property def extent_type(self): """ @@ -491,6 +578,7 @@ def extent_type(self): >>> reg_a.extent_type 'polygon' """ + return self._ext_type @property @@ -510,3 +598,86 @@ def extent_file(self): ./doc/source/example_notebooks/supporting_files/simple_test_poly.gpkg """ return self._geom_file + + # ---------------------------------------------------------------------- + # Methods + + # TODO: can use this docstring as a todo list + def fmt_for_CMR(self): + """ + Format the spatial extent for NASA's Common Metadata Repository (CMR) API. + + CMR spatial inputs must be formatted a specific way. + This method formats the given spatial extent to be a valid submission. + For large/complex polygons, this includes simplifying the polygon (NOTE: currently not all polygons are simplified enough). + Coordinates will be properly ordered, and the required string formatting applied. + For small regions, a buffer may be added. + + Returns + ------- + string + Properly formatted string of spatial data for submission to CMR API. + + + """ + # CMR keywords: ['bounding_box', 'polygon'] + if self._ext_type == "bounding_box": + cmr_extent = ",".join(map(str, self._spatial_ext)) + + elif self._ext_type == "polygon": + poly = self.extent_as_gdf.geometry + + if any( + geomtype in ["MultiPoint", "MultiLineString", "MultiPolygon"] + for geomtype in poly.geom_type + ): + poly = poly.convex_hull + + poly = poly.unary_union + + # Simplify polygon. The larger the tolerance value, the more simplified the polygon. See Bruce Wallin's function to do this + poly = poly.simplify(0.05, preserve_topology=False) + poly = orient(poly, sign=1.0) + + # Format dictionary to polygon coordinate pairs for API submission + polygon = ( + ",".join([str(c) for xy in zip(*poly.exterior.coords.xy) for c in xy]) + ).split(",") + extent = [float(i) for i in polygon] + + # TODO: explore how this will be impacted if the polygon is read in from a shapefile and crosses the dateline + if hasattr(self, "_xdateln") and self._xdateln == True: + neg_lons = [i if i < 181.0 else i - 360 for i in extent[0:-1:2]] + extent = [item for pair in zip(neg_lons, extent[1::2]) for item in pair] + + cmr_extent = ",".join(map(str, extent)) + + return cmr_extent + + def fmt_for_EGI(self): + """ + Format the spatial extent input into a subsetting key value for submission to EGI (the NSIDC DAAC API). + + EGI spatial inputs must be formatted a specific way. + This method formats the given spatial extent to be a valid submission. + DevGoal: For large/complex polygons, this includes simplifying the polygon. + Coordinates will be properly ordered, and the required string formatting applied. + + Returns + ------- + string + Properly formatted json string for submission to EGI (NSIDC API). + """ + + # subsetting keywords: ['bbox','Boundingshape'] - these are set in APIformatting + if self._ext_type == "bounding_box": + egi_extent = ",".join(map(str, self._spatial_ext)) + + # TODO: add handling for polygons that cross the dateline + elif self._ext_type == "polygon": + poly = self.extent_as_gdf.geometry[0] + poly = orient(poly, sign=1.0) + egi_extent = gpd.GeoSeries(poly).to_json() + egi_extent = egi_extent.replace(" ", "") # remove spaces for API call + + return egi_extent diff --git a/icepyx/core/visualization.py b/icepyx/core/visualization.py index a3876a832..c98593585 100644 --- a/icepyx/core/visualization.py +++ b/icepyx/core/visualization.py @@ -155,11 +155,11 @@ def __init__( self.product = is2ref._validate_OA_product(query_obj.product) - if query_obj.spatial.extent_type == "bounding_box": - self.bbox = query_obj.spatial.spatial_extent + if query_obj._spatial._ext_type == "bounding_box": + self.bbox = query_obj.spatial.extent else: - mrc_bound = query_obj.spatial.spatial_extent.minimum_rotated_rectangle + mrc_bound = query_obj.spatial.extent.minimum_rotated_rectangle # generate bounding box lonmin = min(mrc_bound.exterior.coords.xy[0]) lonmax = max(mrc_bound.exterior.coords.xy[0]) @@ -411,7 +411,9 @@ def parallel_request_OA(self) -> da.array: # generate parameter lists for OA requesting OA_para_list = self.generate_OA_parameters() - assert OA_para_list, "Your search returned no results; try different search parameters" + assert ( + OA_para_list + ), "Your search returned no results; try different search parameters" url_number = len(OA_para_list) diff --git a/icepyx/tests/test_APIformatting.py b/icepyx/tests/test_APIformatting.py index 137582c63..83e88a131 100644 --- a/icepyx/tests/test_APIformatting.py +++ b/icepyx/tests/test_APIformatting.py @@ -30,974 +30,6 @@ def test_temporal_fmt(): assert obs == exp -########## _fmt_spatial ########## -def test_bounding_box_fmt(): - obs = apifmt._fmt_spatial("bounding_box", [-55, 68, -48, 71]) - exp = {"bounding_box": "-55,68,-48,71"} - assert obs == exp - - -def test_bbox_fmt(): - obs = apifmt._fmt_spatial("bbox", [-55, 68, -48, 71]) - exp = {"bbox": "-55,68,-48,71"} - assert obs == exp - - -def test_polygon_fmt(): - poly = Polygon( - [ - [-86.622742, -74.908126, 0.0], - [-86.602149, -74.998483, 0.0], - [-86.671945, -74.999545, 0.0], - [-86.667881, -75.01762, 0.0], - [-86.737771, -75.018662, 0.0], - [-86.717729, -75.109052, 0.0], - [-86.788057, -75.110077, 0.0], - [-86.780144, -75.14624, 0.0], - [-86.850654, -75.147247, 0.0], - [-86.835058, -75.219586, 0.0], - [-86.905925, -75.220574, 0.0], - [-86.894389, -75.274839, 0.0], - [-86.965529, -75.27581, 0.0], - [-86.950368, -75.348177, 0.0], - [-87.021872, -75.349129, 0.0], - [-87.003154, -75.439609, 0.0], - [-87.075115, -75.440545, 0.0], - [-87.052886, -75.549149, 0.0], - [-86.98038, -75.548205, 0.0], - [-86.965004, -75.620616, 0.0], - [-87.037878, -75.621564, 0.0], - [-87.034102, -75.63967, 0.0], - [-86.961136, -75.63872, 0.0], - [-86.957257, -75.656825, 0.0], - [-86.884208, -75.655851, 0.0], - [-86.872234, -75.710165, 0.0], - [-86.945563, -75.711143, 0.0], - [-86.925871, -75.801686, 0.0], - [-86.999681, -75.802647, 0.0], - [-86.988029, -75.856983, 0.0], - [-87.062135, -75.857925, 0.0], - [-87.058326, -75.87604, 0.0], - [-87.132537, -75.876959, 0.0], - [-87.128815, -75.895075, 0.0], - [-87.203132, -75.895972, 0.0], - [-87.199496, -75.914091, 0.0], - [-87.273919, -75.914965, 0.0], - [-87.27037, -75.933086, 0.0], - [-87.344899, -75.933938, 0.0], - [-87.341438, -75.95206, 0.0], - [-87.490715, -75.953695, 0.0], - [-87.487439, -75.97182, 0.0], - [-87.562188, -75.972604, 0.0], - [-87.559001, -75.99073, 0.0], - [-87.633856, -75.991491, 0.0], - [-87.627653, -76.027748, 0.0], - [-87.777778, -76.029203, 0.0], - [-87.774861, -76.047334, 0.0], - [-87.925213, -76.048696, 0.0], - [-87.922485, -76.06683, 0.0], - [-87.997771, -76.067476, 0.0], - [-87.995135, -76.085611, 0.0], - [-88.070527, -76.086234, 0.0], - [-88.067983, -76.104371, 0.0], - [-88.143481, -76.104971, 0.0], - [-88.14103, -76.123109, 0.0], - [-88.216633, -76.123686, 0.0], - [-88.214276, -76.141826, 0.0], - [-88.365701, -76.142909, 0.0], - [-88.363537, -76.161051, 0.0], - [-88.439359, -76.161557, 0.0], - [-88.43729, -76.1797, 0.0], - [-88.513217, -76.180183, 0.0], - [-88.511244, -76.198328, 0.0], - [-88.587276, -76.198787, 0.0], - [-88.585399, -76.216933, 0.0], - [-88.737681, -76.217781, 0.0], - [-88.736001, -76.235929, 0.0], - [-88.81225, -76.236317, 0.0], - [-88.810667, -76.254466, 0.0], - [-88.887022, -76.254831, 0.0], - [-88.885537, -76.272981, 0.0], - [-88.961998, -76.273321, 0.0], - [-88.960611, -76.291473, 0.0], - [-89.037177, -76.29179, 0.0], - [-89.035889, -76.309942, 0.0], - [-89.112561, -76.310235, 0.0], - [-89.111372, -76.328389, 0.0], - [-89.264932, -76.328903, 0.0], - [-89.263946, -76.347058, 0.0], - [-89.340833, -76.347279, 0.0], - [-89.339947, -76.365434, 0.0], - [-89.41694, -76.365631, 0.0], - [-89.416155, -76.383788, 0.0], - [-89.493254, -76.383961, 0.0], - [-89.492571, -76.402118, 0.0], - [-89.569775, -76.402267, 0.0], - [-89.569195, -76.420425, 0.0], - [-89.723816, -76.420649, 0.0], - [-89.723443, -76.438808, 0.0], - [-89.800859, -76.438884, 0.0], - [-89.80059, -76.457044, 0.0], - [-89.878112, -76.457095, 0.0], - [-89.877947, -76.475255, 0.0], - [-89.955575, -76.475282, 0.0], - [-89.955514, -76.493443, 0.0], - [-90.033248, -76.493445, 0.0], - [-90.033293, -76.511607, 0.0], - [-90.111131, -76.511584, 0.0], - [-90.111283, -76.529747, 0.0], - [-90.345113, -76.52953, 0.0], - [-90.345583, -76.547693, 0.0], - [-90.42363, -76.547571, 0.0], - [-90.424208, -76.565734, 0.0], - [-90.50236, -76.565588, 0.0], - [-90.503734, -76.601916, 0.0], - [-90.582098, -76.601744, 0.0], - [-90.583695, -76.638075, 0.0], - [-90.662272, -76.637877, 0.0], - [-90.664093, -76.67421, 0.0], - [-90.742884, -76.673987, 0.0], - [-90.743907, -76.692154, 0.0], - [-90.822803, -76.691906, 0.0], - [-90.823937, -76.710073, 0.0], - [-91.060932, -76.709176, 0.0], - [-91.062397, -76.727343, 0.0], - [-91.536922, -76.72487, 0.0], - [-91.539047, -76.743034, 0.0], - [-91.697397, -76.742008, 0.0], - [-91.699746, -76.760171, 0.0], - [-91.779021, -76.759619, 0.0], - [-91.783959, -76.795946, 0.0], - [-91.863446, -76.795367, 0.0], - [-91.873848, -76.868024, 0.0], - [-91.793917, -76.868605, 0.0], - [-91.796424, -76.886772, 0.0], - [-91.716375, -76.887329, 0.0], - [-91.721186, -76.923666, 0.0], - [-91.640906, -76.924199, 0.0], - [-91.647835, -76.97871, 0.0], - [-91.325297, -76.980597, 0.0], - [-91.327166, -76.998771, 0.0], - [-91.165637, -76.999562, 0.0], - [-91.167283, -77.017738, 0.0], - [-91.086397, -77.018096, 0.0], - [-91.089474, -77.054451, 0.0], - [-91.008355, -77.054784, 0.0], - [-91.015545, -77.145686, 0.0], - [-91.178934, -77.144989, 0.0], - [-91.180618, -77.16317, 0.0], - [-91.426015, -77.16193, 0.0], - [-91.434206, -77.234653, 0.0], - [-92.092069, -77.230176, 0.0], - [-92.08907, -77.212001, 0.0], - [-92.335283, -77.209895, 0.0], - [-92.352136, -77.300761, 0.0], - [-92.269483, -77.301495, 0.0], - [-92.276054, -77.337847, 0.0], - [-92.193152, -77.338557, 0.0], - [-92.199521, -77.374914, 0.0], - [-92.282662, -77.374202, 0.0], - [-92.285981, -77.392381, 0.0], - [-92.369233, -77.391642, 0.0], - [-92.383091, -77.464357, 0.0], - [-92.466819, -77.463587, 0.0], - [-92.470431, -77.481766, 0.0], - [-92.386581, -77.482537, 0.0], - [-92.390081, -77.500717, 0.0], - [-92.138102, -77.502874, 0.0], - [-92.141243, -77.521058, 0.0], - [-91.972963, -77.522365, 0.0], - [-91.984627, -77.595116, 0.0], - [-91.899978, -77.595733, 0.0], - [-91.90279, -77.613923, 0.0], - [-91.4788, -77.616608, 0.0], - [-91.480993, -77.634803, 0.0], - [-91.14118, -77.636469, 0.0], - [-91.14799, -77.709264, 0.0], - [-91.062516, -77.709615, 0.0], - [-91.070502, -77.800626, 0.0], - [-90.812128, -77.801523, 0.0], - [-90.81335, -77.819728, 0.0], - [-90.727088, -77.819973, 0.0], - [-90.732603, -77.911009, 0.0], - [-90.81952, -77.910763, 0.0], - [-90.820765, -77.928971, 0.0], - [-90.90781, -77.928697, 0.0], - [-90.909191, -77.946905, 0.0], - [-90.822014, -77.94718, 0.0], - [-90.823267, -77.96539, 0.0], - [-90.735953, -77.965638, 0.0], - [-90.737076, -77.983849, 0.0], - [-90.824523, -77.983601, 0.0], - [-90.825784, -78.001812, 0.0], - [-90.91336, -78.001535, 0.0], - [-90.914759, -78.019746, 0.0], - [-91.090167, -78.019109, 0.0], - [-91.093515, -78.055531, 0.0], - [-91.181481, -78.05517, 0.0], - [-91.188783, -78.128018, 0.0], - [-91.365784, -78.127206, 0.0], - [-91.370017, -78.163631, 0.0], - [-91.458782, -78.163181, 0.0], - [-91.463317, -78.199607, 0.0], - [-91.552351, -78.199128, 0.0], - [-91.554767, -78.217341, 0.0], - [-91.643932, -78.216832, 0.0], - [-91.651645, -78.271472, 0.0], - [-91.830785, -78.270365, 0.0], - [-91.833652, -78.288578, 0.0], - [-92.013037, -78.287355, 0.0], - [-92.016194, -78.305566, 0.0], - [-92.106013, -78.30491, 0.0], - [-92.115968, -78.359544, 0.0], - [-92.025726, -78.360203, 0.0], - [-92.035347, -78.414844, 0.0], - [-91.944667, -78.415477, 0.0], - [-91.947751, -78.433693, 0.0], - [-91.856918, -78.434298, 0.0], - [-91.859867, -78.452516, 0.0], - [-91.76888, -78.453093, 0.0], - [-91.771695, -78.471312, 0.0], - [-91.680555, -78.471861, 0.0], - [-91.683233, -78.490081, 0.0], - [-91.591939, -78.490602, 0.0], - [-91.59703, -78.527046, 0.0], - [-91.505436, -78.52754, 0.0], - [-91.507847, -78.545764, 0.0], - [-91.324343, -78.546665, 0.0], - [-91.330738, -78.601343, 0.0], - [-91.238533, -78.601752, 0.0], - [-91.24053, -78.61998, 0.0], - [-91.14817, -78.62036, 0.0], - [-91.150024, -78.638589, 0.0], - [-90.872462, -78.639554, 0.0], - [-90.873874, -78.657786, 0.0], - [-90.781194, -78.658049, 0.0], - [-90.78246, -78.676281, 0.0], - [-90.689626, -78.676516, 0.0], - [-90.691868, -78.712982, 0.0], - [-90.598728, -78.713188, 0.0], - [-90.599703, -78.731422, 0.0], - [-90.506409, -78.731598, 0.0], - [-90.508064, -78.76807, 0.0], - [-90.414462, -78.768217, 0.0], - [-90.41582, -78.804691, 0.0], - [-90.32191, -78.804808, 0.0], - [-90.324034, -78.877764, 0.0], - [-90.229502, -78.877852, 0.0], - [-90.230262, -78.914333, 0.0], - [-90.040568, -78.914419, 0.0], - [-90.040635, -78.932661, 0.0], - [-89.94563, -78.932659, 0.0], - [-89.94554, -78.950901, 0.0], - [-89.850378, -78.950868, 0.0], - [-89.850129, -78.969111, 0.0], - [-89.754809, -78.969048, 0.0], - [-89.75399, -79.005535, 0.0], - [-89.562719, -79.005317, 0.0], - [-89.561988, -79.023561, 0.0], - [-89.466196, -79.023406, 0.0], - [-89.465302, -79.04165, 0.0], - [-89.273406, -79.041249, 0.0], - [-89.272187, -79.059493, 0.0], - [-88.983893, -79.05866, 0.0], - [-88.982186, -79.076903, 0.0], - [-89.1747, -79.07749, 0.0], - [-89.173311, -79.095734, 0.0], - [-89.269737, -79.095982, 0.0], - [-89.268506, -79.114228, 0.0], - [-89.365099, -79.114445, 0.0], - [-89.364027, -79.132691, 0.0], - [-89.460787, -79.132879, 0.0], - [-89.458959, -79.169374, 0.0], - [-89.55605, -79.16953, 0.0], - [-89.555296, -79.187779, 0.0], - [-89.652554, -79.187905, 0.0], - [-89.651963, -79.206154, 0.0], - [-89.749389, -79.20625, 0.0], - [-89.748962, -79.2245, 0.0], - [-89.846555, -79.224564, 0.0], - [-89.846293, -79.242815, 0.0], - [-90.041814, -79.24285, 0.0], - [-90.042029, -79.297606, 0.0], - [-90.140292, -79.297577, 0.0], - [-90.140775, -79.334083, 0.0], - [-90.042173, -79.334112, 0.0], - [-90.042319, -79.37062, 0.0], - [-90.141261, -79.370591, 0.0], - [-90.141505, -79.388846, 0.0], - [-90.240618, -79.388785, 0.0], - [-90.241873, -79.443552, 0.0], - [-90.341501, -79.443459, 0.0], - [-90.342693, -79.479973, 0.0], - [-90.442666, -79.479848, 0.0], - [-90.444995, -79.534621, 0.0], - [-90.545492, -79.534464, 0.0], - [-90.546451, -79.552722, 0.0], - [-90.445777, -79.55288, 0.0], - [-90.447349, -79.5894, 0.0], - [-91.053456, -79.587965, 0.0], - [-91.055316, -79.606223, 0.0], - [-91.257663, -79.605486, 0.0], - [-91.259887, -79.623743, 0.0], - [-91.361228, -79.623325, 0.0], - [-91.36364, -79.641582, 0.0], - [-91.465152, -79.641131, 0.0], - [-91.488897, -79.805457, 0.0], - [-91.695178, -79.804442, 0.0], - [-91.698235, -79.822701, 0.0], - [-91.801545, -79.822143, 0.0], - [-91.808067, -79.85866, 0.0], - [-91.704384, -79.85922, 0.0], - [-91.707475, -79.87748, 0.0], - [-91.811346, -79.876919, 0.0], - [-91.814637, -79.895179, 0.0], - [-91.918685, -79.894584, 0.0], - [-91.922176, -79.912843, 0.0], - [-92.026401, -79.912214, 0.0], - [-92.030095, -79.930472, 0.0], - [-92.134495, -79.929808, 0.0], - [-92.138393, -79.948066, 0.0], - [-92.347532, -79.946636, 0.0], - [-92.351826, -79.964891, 0.0], - [-92.456562, -79.964125, 0.0], - [-92.461064, -79.982379, 0.0], - [-92.565975, -79.981578, 0.0], - [-92.570685, -79.999832, 0.0], - [-92.78084, -79.998126, 0.0], - [-92.785952, -80.016376, 0.0], - [-92.891195, -80.015471, 0.0], - [-92.896519, -80.033721, 0.0], - [-93.001935, -80.032781, 0.0], - [-93.007473, -80.051029, 0.0], - [-93.113062, -80.050053, 0.0], - [-93.118814, -80.0683, 0.0], - [-93.224577, -80.067288, 0.0], - [-93.230546, -80.085534, 0.0], - [-93.336481, -80.084487, 0.0], - [-93.324176, -80.048001, 0.0], - [-93.429699, -80.046925, 0.0], - [-93.417099, -80.010444, 0.0], - [-93.522213, -80.009338, 0.0], - [-93.515756, -79.991101, 0.0], - [-93.620655, -79.989964, 0.0], - [-93.61403, -79.971729, 0.0], - [-93.718714, -79.97056, 0.0], - [-93.711924, -79.952328, 0.0], - [-93.816393, -79.951128, 0.0], - [-93.788723, -79.87821, 0.0], - [-93.892414, -79.876987, 0.0], - [-93.864399, -79.804083, 0.0], - [-93.967323, -79.802836, 0.0], - [-93.946026, -79.748169, 0.0], - [-93.843651, -79.749409, 0.0], - [-93.823125, -79.694739, 0.0], - [-93.924956, -79.693505, 0.0], - [-93.90411, -79.638844, 0.0], - [-94.005379, -79.637584, 0.0], - [-93.998302, -79.619367, 0.0], - [-94.099369, -79.618077, 0.0], - [-94.092139, -79.599863, 0.0], - [-94.193003, -79.598544, 0.0], - [-94.185623, -79.580332, 0.0], - [-94.386921, -79.577602, 0.0], - [-94.379215, -79.559395, 0.0], - [-94.680431, -79.555069, 0.0], - [-94.672229, -79.53687, 0.0], - [-94.772403, -79.535367, 0.0], - [-94.747448, -79.48078, 0.0], - [-94.847075, -79.479253, 0.0], - [-94.81352, -79.406486, 0.0], - [-94.912434, -79.404938, 0.0], - [-94.903948, -79.38675, 0.0], - [-95.101351, -79.383566, 0.0], - [-95.092557, -79.365384, 0.0], - [-95.191045, -79.363748, 0.0], - [-95.155505, -79.291032, 0.0], - [-95.253295, -79.289376, 0.0], - [-95.244321, -79.271201, 0.0], - [-95.341915, -79.269517, 0.0], - [-95.332806, -79.251344, 0.0], - [-95.430206, -79.249633, 0.0], - [-95.420964, -79.231464, 0.0], - [-95.323729, -79.233172, 0.0], - [-95.269903, -79.124145, 0.0], - [-95.366167, -79.122454, 0.0], - [-95.357141, -79.104287, 0.0], - [-95.453215, -79.102568, 0.0], - [-95.425842, -79.048076, 0.0], - [-95.616944, -79.044565, 0.0], - [-95.598218, -79.00825, 0.0], - [-95.693408, -79.006456, 0.0], - [-95.683935, -78.988302, 0.0], - [-95.588901, -78.990093, 0.0], - [-95.579615, -78.971937, 0.0], - [-95.484707, -78.973695, 0.0], - [-95.475607, -78.955536, 0.0], - [-95.380824, -78.957262, 0.0], - [-95.37191, -78.9391, 0.0], - [-95.466538, -78.937377, 0.0], - [-95.457498, -78.919218, 0.0], - [-95.551942, -78.917468, 0.0], - [-95.542778, -78.899312, 0.0], - [-95.637038, -78.897535, 0.0], - [-95.609268, -78.843079, 0.0], - [-95.515467, -78.844846, 0.0], - [-95.506423, -78.826692, 0.0], - [-95.412744, -78.828427, 0.0], - [-95.403881, -78.81027, 0.0], - [-95.310325, -78.811973, 0.0], - [-95.301642, -78.793813, 0.0], - [-95.114747, -78.797124, 0.0], - [-95.106394, -78.778959, 0.0], - [-95.013057, -78.780567, 0.0], - [-95.004882, -78.7624, 0.0], - [-94.911669, -78.763976, 0.0], - [-94.895698, -78.727637, 0.0], - [-94.988611, -78.726066, 0.0], - [-94.940425, -78.617072, 0.0], - [-95.032424, -78.615487, 0.0], - [-95.024337, -78.597325, 0.0], - [-95.207964, -78.594073, 0.0], - [-95.191285, -78.557761, 0.0], - [-95.465652, -78.552682, 0.0], - [-95.474413, -78.57083, 0.0], - [-95.748962, -78.565482, 0.0], - [-95.721466, -78.511065, 0.0], - [-95.812493, -78.509234, 0.0], - [-95.803243, -78.491098, 0.0], - [-96.075717, -78.48544, 0.0], - [-96.06607, -78.467314, 0.0], - [-96.156692, -78.465373, 0.0], - [-96.146934, -78.447251, 0.0], - [-96.327803, -78.44329, 0.0], - [-96.297869, -78.388943, 0.0], - [-96.387836, -78.386929, 0.0], - [-96.377781, -78.368817, 0.0], - [-96.467577, -78.366779, 0.0], - [-96.457416, -78.34867, 0.0], - [-96.547041, -78.346606, 0.0], - [-96.536773, -78.328501, 0.0], - [-96.80504, -78.32215, 0.0], - [-96.794392, -78.304055, 0.0], - [-96.883611, -78.301886, 0.0], - [-96.872859, -78.283794, 0.0], - [-96.961909, -78.2816, 0.0], - [-96.940233, -78.245425, 0.0], - [-97.028977, -78.243209, 0.0], - [-97.018054, -78.225125, 0.0], - [-97.19517, -78.220617, 0.0], - [-97.184011, -78.20254, 0.0], - [-97.272383, -78.200248, 0.0], - [-97.238713, -78.14603, 0.0], - [-97.326651, -78.14372, 0.0], - [-97.315364, -78.125651, 0.0], - [-97.403134, -78.123318, 0.0], - [-97.391749, -78.105253, 0.0], - [-97.566921, -78.10051, 0.0], - [-97.555308, -78.082453, 0.0], - [-97.64271, -78.080044, 0.0], - [-97.607693, -78.025883, 0.0], - [-97.520682, -78.02828, 0.0], - [-97.497773, -77.992166, 0.0], - [-97.410987, -77.994529, 0.0], - [-97.399713, -77.976468, 0.0], - [-97.313022, -77.9788, 0.0], - [-97.27979, -77.924608, 0.0], - [-97.193451, -77.926901, 0.0], - [-97.139363, -77.836566, 0.0], - [-96.967859, -77.841038, 0.0], - [-96.946954, -77.804891, 0.0], - [-96.861407, -77.80708, 0.0], - [-96.851127, -77.789004, 0.0], - [-96.765675, -77.791162, 0.0], - [-96.725358, -77.718845, 0.0], - [-96.640377, -77.720964, 0.0], - [-96.620645, -77.6848, 0.0], - [-96.535882, -77.686886, 0.0], - [-96.526184, -77.668801, 0.0], - [-96.441516, -77.670857, 0.0], - [-96.384656, -77.562336, 0.0], - [-96.552494, -77.558236, 0.0], - [-96.514174, -77.485919, 0.0], - [-96.59757, -77.483841, 0.0], - [-96.58794, -77.465766, 0.0], - [-96.671187, -77.463665, 0.0], - [-96.680937, -77.481738, 0.0], - [-97.263693, -77.466276, 0.0], - [-97.253111, -77.448226, 0.0], - [-97.336123, -77.445916, 0.0], - [-97.325453, -77.42787, 0.0], - [-97.491148, -77.423178, 0.0], - [-97.480274, -77.405139, 0.0], - [-97.397559, -77.407495, 0.0], - [-97.376139, -77.371411, 0.0], - [-97.293628, -77.373733, 0.0], - [-97.28308, -77.355688, 0.0], - [-98.433698, -77.320866, 0.0], - [-98.421564, -77.302872, 0.0], - [-98.666926, -77.294764, 0.0], - [-98.642079, -77.2588, 0.0], - [-99.049167, -77.244815, 0.0], - [-99.036233, -77.226854, 0.0], - [-99.522851, -77.209257, 0.0], - [-99.509284, -77.191321, 0.0], - [-99.832489, -77.179101, 0.0], - [-99.818518, -77.161182, 0.0], - [-99.979666, -77.154929, 0.0], - [-99.965515, -77.137019, 0.0], - [-100.447336, -77.117686, 0.0], - [-100.432572, -77.099804, 0.0], - [-100.512625, -77.096499, 0.0], - [-100.483005, -77.060743, 0.0], - [-100.642555, -77.054077, 0.0], - [-100.627593, -77.036208, 0.0], - [-100.707198, -77.032842, 0.0], - [-100.692171, -77.014978, 0.0], - [-100.851044, -77.008182, 0.0], - [-100.835847, -76.990327, 0.0], - [-100.915114, -76.986897, 0.0], - [-100.899853, -76.969047, 0.0], - [-101.058051, -76.962123, 0.0], - [-101.042622, -76.944282, 0.0], - [-101.121553, -76.940788, 0.0], - [-101.090613, -76.905114, 0.0], - [-101.169293, -76.901606, 0.0], - [-101.153783, -76.883774, 0.0], - [-101.232316, -76.880245, 0.0], - [-101.216746, -76.862418, 0.0], - [-101.295133, -76.85887, 0.0], - [-101.217404, -76.769752, 0.0], - [-101.295238, -76.766205, 0.0], - [-101.279717, -76.748385, 0.0], - [-101.357407, -76.744819, 0.0], - [-101.310795, -76.691373, 0.0], - [-101.388141, -76.687797, 0.0], - [-101.372587, -76.669986, 0.0], - [-101.449791, -76.666392, 0.0], - [-101.326063, -76.523929, 0.0], - [-101.402436, -76.52035, 0.0], - [-101.341168, -76.449131, 0.0], - [-101.265184, -76.45269, 0.0], - [-101.175067, -76.345822, 0.0], - [-101.250474, -76.342292, 0.0], - [-101.190803, -76.27106, 0.0], - [-101.265793, -76.267525, 0.0], - [-101.250878, -76.249721, 0.0], - [-101.325735, -76.246168, 0.0], - [-101.280944, -76.192769, 0.0], - [-101.429978, -76.185621, 0.0], - [-101.399941, -76.150039, 0.0], - [-101.474214, -76.14644, 0.0], - [-101.459161, -76.128654, 0.0], - [-101.533304, -76.125037, 0.0], - [-101.518198, -76.107255, 0.0], - [-101.59221, -76.10362, 0.0], - [-101.577051, -76.085842, 0.0], - [-101.650932, -76.082189, 0.0], - [-101.635722, -76.064416, 0.0], - [-101.709473, -76.060745, 0.0], - [-101.694211, -76.042976, 0.0], - [-101.767832, -76.039287, 0.0], - [-101.752518, -76.021523, 0.0], - [-101.899461, -76.014086, 0.0], - [-101.837882, -75.943066, 0.0], - [-101.910936, -75.939333, 0.0], - [-101.89555, -75.921582, 0.0], - [-101.968477, -75.917832, 0.0], - [-101.953041, -75.900085, 0.0], - [-102.02584, -75.896317, 0.0], - [-102.010356, -75.878575, 0.0], - [-102.083027, -75.87479, 0.0], - [-102.067494, -75.857052, 0.0], - [-102.140038, -75.853249, 0.0], - [-102.124457, -75.835516, 0.0], - [-102.196874, -75.831696, 0.0], - [-102.181245, -75.813967, 0.0], - [-102.253535, -75.810129, 0.0], - [-102.237859, -75.792406, 0.0], - [-102.310023, -75.78855, 0.0], - [-102.294299, -75.770832, 0.0], - [-102.366338, -75.766959, 0.0], - [-102.350567, -75.749245, 0.0], - [-102.494353, -75.741443, 0.0], - [-102.478451, -75.723738, 0.0], - [-102.693572, -75.711884, 0.0], - [-102.70973, -75.729573, 0.0], - [-102.853113, -75.72155, 0.0], - [-102.869482, -75.739229, 0.0], - [-102.941198, -75.735179, 0.0], - [-102.957693, -75.752851, 0.0], - [-103.029452, -75.748774, 0.0], - [-103.012872, -75.731107, 0.0], - [-103.227644, -75.718758, 0.0], - [-103.210852, -75.701106, 0.0], - [-103.282275, -75.696951, 0.0], - [-103.265441, -75.679303, 0.0], - [-103.336738, -75.675132, 0.0], - [-103.303027, -75.639846, 0.0], - [-103.445162, -75.631459, 0.0], - [-103.428203, -75.613826, 0.0], - [-103.923762, -75.583823, 0.0], - [-103.90627, -75.566227, 0.0], - [-103.976811, -75.56186, 0.0], - [-103.941793, -75.526678, 0.0], - [-104.012128, -75.5223, 0.0], - [-103.942283, -75.45195, 0.0], - [-103.914847, -75.426057, 0.0], - [-103.846549, -75.420428, 0.0], - [-103.814359, -75.41156, 0.0], - [-103.74731, -75.394972, 0.0], - [-103.643531, -75.376578, 0.0], - [-103.639472, -75.360155, 0.0], - [-103.549124, -75.339049, 0.0], - [-103.509054, -75.329656, 0.0], - [-103.456714, -75.307204, 0.0], - [-103.37484, -75.273725, 0.0], - [-103.284801, -75.264374, 0.0], - [-103.224839, -75.25812, 0.0], - [-103.182394, -75.249825, 0.0], - [-103.086408, -75.237813, 0.0], - [-103.042136, -75.231576, 0.0], - [-102.981295, -75.215486, 0.0], - [-102.956754, -75.210167, 0.0], - [-102.921448, -75.203018, 0.0], - [-102.898283, -75.198106, 0.0], - [-102.873449, -75.192921, 0.0], - [-102.84957, -75.188785, 0.0], - [-102.825705, -75.184646, 0.0], - [-102.789524, -75.181222, 0.0], - [-102.744295, -75.17242, 0.0], - [-102.656346, -75.16239, 0.0], - [-102.607491, -75.160775, 0.0], - [-102.560626, -75.159773, 0.0], - [-102.511333, -75.159268, 0.0], - [-102.378744, -75.152045, 0.0], - [-102.34262, -75.146716, 0.0], - [-102.266406, -75.132957, 0.0], - [-102.223828, -75.128342, 0.0], - [-102.157455, -75.12945, 0.0], - [-102.113853, -75.130386, 0.0], - [-102.068876, -75.13139, 0.0], - [-102.040635, -75.126691, 0.0], - [-102.013199, -75.12121, 0.0], - [-101.969076, -75.11627, 0.0], - [-101.953576, -75.113073, 0.0], - [-101.923326, -75.111044, 0.0], - [-101.896684, -75.109917, 0.0], - [-101.821333, -75.103337, 0.0], - [-101.766389, -75.098945, 0.0], - [-101.726414, -75.090073, 0.0], - [-101.723655, -75.079577, 0.0], - [-101.631989, -75.054005, 0.0], - [-101.564382, -75.02971, 0.0], - [-101.547244, -75.015213, 0.0], - [-101.531499, -75.000643, 0.0], - [-101.549303, -74.990901, 0.0], - [-101.489949, -74.940509, 0.0], - [-101.469959, -74.921526, 0.0], - [-101.455398, -74.908855, 0.0], - [-101.420557, -74.891146, 0.0], - [-101.399072, -74.882138, 0.0], - [-101.391177, -74.870096, 0.0], - [-101.371447, -74.860874, 0.0], - [-101.363063, -74.853621, 0.0], - [-101.338827, -74.838164, 0.0], - [-101.312982, -74.826333, 0.0], - [-101.29282, -74.816401, 0.0], - [-101.276851, -74.808624, 0.0], - [-101.27464, -74.804247, 0.0], - [-101.259243, -74.798558, 0.0], - [-101.251822, -74.792086, 0.0], - [-101.267741, -74.78708, 0.0], - [-101.256493, -74.781809, 0.0], - [-101.257733, -74.779767, 0.0], - [-101.250447, -74.777156, 0.0], - [-101.240613, -74.770054, 0.0], - [-101.222641, -74.763963, 0.0], - [-101.216307, -74.748673, 0.0], - [-101.212936, -74.740259, 0.0], - [-101.200426, -74.734469, 0.0], - [-101.197349, -74.72643, 0.0], - [-101.188725, -74.7179, 0.0], - [-101.207959, -74.716895, 0.0], - [-101.219968, -74.709239, 0.0], - [-101.232933, -74.706803, 0.0], - [-101.230248, -74.703234, 0.0], - [-101.238372, -74.70027, 0.0], - [-101.254074, -74.700252, 0.0], - [-101.275428, -74.693637, 0.0], - [-101.306089, -74.693851, 0.0], - [-101.351676, -74.691805, 0.0], - [-101.364701, -74.681592, 0.0], - [-101.396392, -74.67954, 0.0], - [-101.416381, -74.679976, 0.0], - [-101.462601, -74.674445, 0.0], - [-101.482989, -74.660146, 0.0], - [-101.530932, -74.656493, 0.0], - [-101.545802, -74.657827, 0.0], - [-101.570915, -74.655354, 0.0], - [-101.627933, -74.648117, 0.0], - [-101.647793, -74.639151, 0.0], - [-101.676385, -74.635907, 0.0], - [-101.678978, -74.633321, 0.0], - [-101.695894, -74.628422, 0.0], - [-101.728673, -74.621731, 0.0], - [-101.781287, -74.617603, 0.0], - [-101.794801, -74.615021, 0.0], - [-101.870395, -74.608983, 0.0], - [-101.933735, -74.601768, 0.0], - [-101.986726, -74.595483, 0.0], - [-102.032573, -74.595827, 0.0], - [-102.026749, -74.590285, 0.0], - [-102.010395, -74.580201, 0.0], - [-102.035597, -74.564212, 0.0], - [-102.090552, -74.553133, 0.0], - [-102.264411, -74.519626, 0.0], - [-102.339743, -74.51083, 0.0], - [-102.411915, -74.510518, 0.0], - [-102.424826, -74.497263, 0.0], - [-102.377212, -74.483896, 0.0], - [-102.280808, -74.473374, 0.0], - [-102.236421, -74.463717, 0.0], - [-102.185211, -74.450043, 0.0], - [-102.150282, -74.438359, 0.0], - [-102.110682, -74.429878, 0.0], - [-102.080455, -74.419386, 0.0], - [-102.029215, -74.421347, 0.0], - [-101.986657, -74.414487, 0.0], - [-101.942992, -74.405238, 0.0], - [-101.914922, -74.383364, 0.0], - [-101.795349, -74.369597, 0.0], - [-101.698034, -74.375051, 0.0], - [-101.572267, -74.390817, 0.0], - [-101.433665, -74.404266, 0.0], - [-101.358339, -74.410301, 0.0], - [-101.276679, -74.412744, 0.0], - [-101.200663, -74.403148, 0.0], - [-101.126055, -74.400282, 0.0], - [-101.050277, -74.385754, 0.0], - [-100.925725, -74.378623, 0.0], - [-100.827076, -74.373988, 0.0], - [-100.786332, -74.316362, 0.0], - [-100.72066, -74.319735, 0.0], - [-100.708238, -74.301973, 0.0], - [-100.642611, -74.305321, 0.0], - [-100.617997, -74.26979, 0.0], - [-100.552486, -74.273111, 0.0], - [-100.528129, -74.237572, 0.0], - [-100.462734, -74.240864, 0.0], - [-100.355131, -74.080906, 0.0], - [-100.290352, -74.084143, 0.0], - [-100.278602, -74.066367, 0.0], - [-100.213868, -74.06958, 0.0], - [-100.190588, -74.03402, 0.0], - [-100.125968, -74.037206, 0.0], - [-100.114438, -74.019422, 0.0], - [-100.049863, -74.022585, 0.0], - [-100.061323, -74.040372, 0.0], - [-99.996651, -74.043518, 0.0], - [-100.008066, -74.061309, 0.0], - [-99.943298, -74.064439, 0.0], - [-99.954667, -74.082234, 0.0], - [-99.889802, -74.085347, 0.0], - [-99.878504, -74.067549, 0.0], - [-99.68397, -74.076757, 0.0], - [-99.672911, -74.058947, 0.0], - [-99.218628, -74.079702, 0.0], - [-99.208094, -74.061869, 0.0], - [-98.688058, -74.08435, 0.0], - [-98.678122, -74.06649, 0.0], - [-98.026778, -74.092735, 0.0], - [-98.035988, -74.110626, 0.0], - [-97.774563, -74.120566, 0.0], - [-97.783502, -74.138469, 0.0], - [-97.521457, -74.148094, 0.0], - [-97.512812, -74.13018, 0.0], - [-97.447324, -74.132532, 0.0], - [-97.438772, -74.114615, 0.0], - [-97.242413, -74.121541, 0.0], - [-97.234101, -74.103616, 0.0], - [-97.103247, -74.108126, 0.0], - [-97.095101, -74.090197, 0.0], - [-97.02972, -74.092418, 0.0], - [-97.021665, -74.074486, 0.0], - [-96.825632, -74.08102, 0.0], - [-96.833465, -74.098959, 0.0], - [-96.768011, -74.101099, 0.0], - [-96.775789, -74.119041, 0.0], - [-96.513501, -74.127404, 0.0], - [-96.506019, -74.109452, 0.0], - [-96.374919, -74.113506, 0.0], - [-96.367602, -74.095549, 0.0], - [-96.302101, -74.097543, 0.0], - [-96.294875, -74.079584, 0.0], - [-96.229432, -74.081555, 0.0], - [-96.222295, -74.063595, 0.0], - [-96.156909, -74.065543, 0.0], - [-96.149863, -74.047581, 0.0], - [-95.95383, -74.053295, 0.0], - [-95.947021, -74.035326, 0.0], - [-95.816402, -74.039029, 0.0], - [-95.809755, -74.021057, 0.0], - [-95.679223, -74.024673, 0.0], - [-95.672738, -74.006697, 0.0], - [-95.542294, -74.010228, 0.0], - [-95.535971, -73.992248, 0.0], - [-95.405616, -73.995692, 0.0], - [-95.399454, -73.97771, 0.0], - [-95.26919, -73.981068, 0.0], - [-95.263189, -73.963082, 0.0], - [-95.133017, -73.966355, 0.0], - [-95.121348, -73.930376, 0.0], - [-95.056388, -73.931978, 0.0], - [-95.050646, -73.913988, 0.0], - [-94.985747, -73.915568, 0.0], - [-94.980091, -73.897576, 0.0], - [-94.915251, -73.899134, 0.0], - [-94.909681, -73.881141, 0.0], - [-94.844902, -73.882677, 0.0], - [-94.839417, -73.864683, 0.0], - [-94.774698, -73.866196, 0.0], - [-94.769297, -73.848201, 0.0], - [-94.704639, -73.849692, 0.0], - [-94.699323, -73.831696, 0.0], - [-94.634725, -73.833165, 0.0], - [-94.629493, -73.815168, 0.0], - [-94.564955, -73.816615, 0.0], - [-94.559808, -73.798617, 0.0], - [-94.430842, -73.801447, 0.0], - [-94.420869, -73.765446, 0.0], - [-94.356514, -73.766828, 0.0], - [-94.351616, -73.748827, 0.0], - [-94.287321, -73.750186, 0.0], - [-94.277701, -73.714183, 0.0], - [-94.213539, -73.715519, 0.0], - [-94.223015, -73.751526, 0.0], - [-94.158698, -73.752845, 0.0], - [-94.168073, -73.788858, 0.0], - [-94.103602, -73.79016, 0.0], - [-94.117527, -73.844188, 0.0], - [-94.052828, -73.845474, 0.0], - [-94.057417, -73.863487, 0.0], - [-93.992635, -73.864754, 0.0], - [-93.997163, -73.882768, 0.0], - [-93.5429, -73.89108, 0.0], - [-93.546925, -73.909105, 0.0], - [-93.416904, -73.911299, 0.0], - [-93.420791, -73.929327, 0.0], - [-93.095219, -73.934459, 0.0], - [-93.098746, -73.952494, 0.0], - [-93.033533, -73.95346, 0.0], - [-93.030081, -73.935424, 0.0], - [-92.117389, -73.946779, 0.0], - [-92.114979, -73.92873, 0.0], - [-92.049815, -73.929387, 0.0], - [-92.05215, -73.947436, 0.0], - [-91.921656, -73.948689, 0.0], - [-91.923848, -73.96674, 0.0], - [-91.793186, -73.967912, 0.0], - [-91.795233, -73.985966, 0.0], - [-91.729821, -73.986521, 0.0], - [-91.731798, -74.004576, 0.0], - [-91.666307, -74.005112, 0.0], - [-91.668214, -74.023169, 0.0], - [-91.077936, -74.027065, 0.0], - [-91.076703, -74.009003, 0.0], - [-91.011175, -74.009332, 0.0], - [-91.01002, -73.991272, 0.0], - [-90.879106, -73.991867, 0.0], - [-90.878103, -73.973806, 0.0], - [-90.812717, -73.974073, 0.0], - [-90.811791, -73.956012, 0.0], - [-90.746478, -73.956258, 0.0], - [-90.74733, -73.974319, 0.0], - [-90.551155, -73.974933, 0.0], - [-90.551785, -73.992995, 0.0], - [-90.486316, -73.993159, 0.0], - [-90.486872, -74.011222, 0.0], - [-90.290232, -74.011589, 0.0], - [-90.290565, -74.029653, 0.0], - [-90.159318, -74.029795, 0.0], - [-90.1595, -74.047861, 0.0], - [-90.028101, -74.04792, 0.0], - [-90.028133, -74.065986, 0.0], - [-89.830808, -74.065919, 0.0], - [-89.830418, -74.102053, 0.0], - [-89.764492, -74.10199, 0.0], - [-89.764221, -74.120058, 0.0], - [-89.69822, -74.119973, 0.0], - [-89.697523, -74.156112, 0.0], - [-89.63137, -74.156006, 0.0], - [-89.630517, -74.192147, 0.0], - [-89.564212, -74.19202, 0.0], - [-89.563707, -74.210092, 0.0], - [-89.430947, -74.209775, 0.0], - [-89.430287, -74.227847, 0.0], - [-89.29738, -74.227445, 0.0], - [-89.296564, -74.245518, 0.0], - [-89.230036, -74.245285, 0.0], - [-89.22914, -74.263358, 0.0], - [-89.162537, -74.263104, 0.0], - [-89.161562, -74.281178, 0.0], - [-89.028207, -74.280607, 0.0], - [-89.02594, -74.316754, 0.0], - [-88.892285, -74.316097, 0.0], - [-88.890991, -74.334171, 0.0], - [-88.82409, -74.333811, 0.0], - [-88.822715, -74.351885, 0.0], - [-88.688766, -74.3511, 0.0], - [-88.687231, -74.369174, 0.0], - [-88.620184, -74.368749, 0.0], - [-88.618567, -74.386824, 0.0], - [-88.484327, -74.38591, 0.0], - [-88.482549, -74.403984, 0.0], - [-88.348167, -74.402984, 0.0], - [-88.346228, -74.421057, 0.0], - [-88.278965, -74.420525, 0.0], - [-88.276942, -74.438598, 0.0], - [-88.142273, -74.437468, 0.0], - [-88.140087, -74.455541, 0.0], - [-88.072681, -74.454944, 0.0], - [-88.07041, -74.473017, 0.0], - [-87.935456, -74.471756, 0.0], - [-87.93302, -74.489828, 0.0], - [-87.865472, -74.489165, 0.0], - [-87.862952, -74.507237, 0.0], - [-87.79533, -74.506552, 0.0], - [-87.792724, -74.524624, 0.0], - [-87.65734, -74.523188, 0.0], - [-87.654567, -74.541259, 0.0], - [-87.586805, -74.540508, 0.0], - [-87.583946, -74.558579, 0.0], - [-87.51611, -74.557806, 0.0], - [-87.513164, -74.575876, 0.0], - [-87.241573, -74.572566, 0.0], - [-87.238298, -74.590633, 0.0], - [-87.034444, -74.587922, 0.0], - [-87.03092, -74.605986, 0.0], - [-86.962905, -74.605038, 0.0], - [-86.955671, -74.641167, 0.0], - [-86.887503, -74.640195, 0.0], - [-86.868859, -74.730522, 0.0], - [-86.800293, -74.729523, 0.0], - [-86.792609, -74.765656, 0.0], - [-86.723889, -74.764633, 0.0], - [-86.716003, -74.800766, 0.0], - [-86.647127, -74.799719, 0.0], - [-86.63091, -74.871988, 0.0], - [-86.561712, -74.870913, 0.0], - [-86.553377, -74.907049, 0.0], - [-86.622742, -74.908126, 0.0], - ] - ) - obs = apifmt._fmt_spatial("polygon", poly) - exp = { - "polygon": "-86.622742,-74.908126,-86.561712,-74.870913,-86.868859,-74.730522,-86.962905,-74.605038,-89.02594,-74.316754,-89.630517,-74.192147,-89.830808,-74.065919,-90.746478,-73.956258,-91.668214,-74.023169,-92.049815,-73.929387,-93.420791,-73.929327,-93.997163,-73.882768,-94.277701,-73.714183,-95.133017,-73.966355,-96.513501,-74.127404,-99.889802,-74.085347,-100.114438,-74.019422,-100.355131,-74.080906,-100.462734,-74.240864,-100.827076,-74.373988,-101.795349,-74.369597,-102.424826,-74.497263,-101.188725,-74.7179,-101.564382,-75.02971,-103.37484,-75.273725,-103.914847,-75.426057,-104.012128,-75.5223,-103.029452,-75.748774,-102.350567,-75.749245,-101.837882,-75.943066,-101.899461,-76.014086,-101.280944,-76.192769,-101.325735,-76.246168,-101.190803,-76.27106,-101.250474,-76.342292,-101.175067,-76.345822,-101.402436,-76.52035,-101.326063,-76.523929,-101.449791,-76.666392,-101.310795,-76.691373,-101.357407,-76.744819,-101.217404,-76.769752,-101.295133,-76.85887,-101.058051,-76.962123,-100.447336,-77.117686,-98.433698,-77.320866,-97.28308,-77.355688,-97.491148,-77.423178,-96.514174,-77.485919,-96.552494,-77.558236,-96.384656,-77.562336,-96.441516,-77.670857,-97.139363,-77.836566,-97.193451,-77.926901,-97.64271,-78.080044,-96.297869,-78.388943,-96.327803,-78.44329,-95.721466,-78.511065,-95.748962,-78.565482,-94.940425,-78.617072,-94.988611,-78.726066,-94.911669,-78.763976,-95.609268,-78.843079,-95.637038,-78.897535,-95.37191,-78.9391,-95.693408,-79.006456,-95.269903,-79.124145,-95.323729,-79.233172,-95.430206,-79.249633,-95.155505,-79.291032,-95.191045,-79.363748,-94.81352,-79.406486,-94.847075,-79.479253,-94.747448,-79.48078,-94.772403,-79.535367,-93.90411,-79.638844,-93.843651,-79.749409,-93.967323,-79.802836,-93.788723,-79.87821,-93.816393,-79.951128,-93.230546,-80.085534,-91.707475,-79.87748,-91.801545,-79.822143,-91.488897,-79.805457,-91.465152,-79.641131,-90.447349,-79.5894,-90.545492,-79.534464,-90.042319,-79.37062,-90.140775,-79.334083,-90.041814,-79.24285,-88.982186,-79.076903,-90.230262,-78.914333,-90.32191,-78.804808,-90.689626,-78.676516,-91.150024,-78.638589,-92.035347,-78.414844,-92.106013,-78.30491,-91.651645,-78.271472,-91.365784,-78.127206,-91.188783,-78.128018,-91.090167,-78.019109,-90.737076,-77.983849,-90.909191,-77.946905,-90.732603,-77.911009,-90.727088,-77.819973,-91.070502,-77.800626,-91.14118,-77.636469,-91.90279,-77.613923,-91.984627,-77.595116,-91.972963,-77.522365,-92.466819,-77.463587,-92.199521,-77.374914,-92.352136,-77.300761,-92.335283,-77.209895,-91.434206,-77.234653,-91.426015,-77.16193,-91.015545,-77.145686,-91.008355,-77.054784,-91.086397,-77.018096,-91.647835,-76.97871,-91.640906,-76.924199,-91.873848,-76.868024,-91.779021,-76.759619,-90.823937,-76.710073,-90.345113,-76.52953,-86.988029,-75.856983,-86.945563,-75.711143,-86.872234,-75.710165,-87.034102,-75.63967,-86.965004,-75.620616,-87.075115,-75.440545,-87.003154,-75.439609,-87.021872,-75.349129,-86.835058,-75.219586,-86.850654,-75.147247,-86.717729,-75.109052,-86.737771,-75.018662,-86.602149,-74.998483,-86.622742,-74.908126" - } - assert obs == exp - - ########## _fmt_var_subset_list ########## def test_var_subset_list_fmt(): obs = apifmt._fmt_var_subset_list( @@ -1022,26 +54,28 @@ def test_readable_granules(): obs = apifmt._fmt_readable_granules("ATL06", cycles=["02"], tracks=["1387"]) exp = ["ATL06_??????????????_138702??_*"] assert obs == exp - obs = apifmt._fmt_readable_granules('ATL07',cycles=['02'],tracks=['1387']) - exp = ['ATL07-??_??????????????_138702??_*'] + obs = apifmt._fmt_readable_granules("ATL07", cycles=["02"], tracks=["1387"]) + exp = ["ATL07-??_??????????????_138702??_*"] assert obs == exp - obs = apifmt._fmt_readable_granules('ATL06',tracks=['1387']) - exp = ['ATL06_??????????????_1387????_*'] + obs = apifmt._fmt_readable_granules("ATL06", tracks=["1387"]) + exp = ["ATL06_??????????????_1387????_*"] assert obs == exp - obs = apifmt._fmt_readable_granules('ATL07',tracks=['1387']) - exp = ['ATL07-??_??????????????_1387????_*'] + obs = apifmt._fmt_readable_granules("ATL07", tracks=["1387"]) + exp = ["ATL07-??_??????????????_1387????_*"] assert obs == exp - obs = apifmt._fmt_readable_granules('ATL11',tracks=['1387']) - exp = ['ATL11_1387??_*'] + obs = apifmt._fmt_readable_granules("ATL11", tracks=["1387"]) + exp = ["ATL11_1387??_*"] assert obs == exp - obs = apifmt._fmt_readable_granules('ATL06',cycles=['02']) - exp = ['ATL06_??????????????_????02??_*'] + obs = apifmt._fmt_readable_granules("ATL06", cycles=["02"]) + exp = ["ATL06_??????????????_????02??_*"] assert obs == exp - obs = apifmt._fmt_readable_granules('ATL07',cycles=['02']) - exp = ['ATL07-??_??????????????_????02??_*'] + obs = apifmt._fmt_readable_granules("ATL07", cycles=["02"]) + exp = ["ATL07-??_??????????????_????02??_*"] assert obs == exp - obs = apifmt._fmt_readable_granules('ATL06',files=['ATL06_20190329071316_13870211_003_*']) - exp = ['ATL06_20190329071316_13870211_003_*'] + obs = apifmt._fmt_readable_granules( + "ATL06", files=["ATL06_20190329071316_13870211_003_*"] + ) + exp = ["ATL06_20190329071316_13870211_003_*"] assert obs == exp @@ -1104,17 +138,17 @@ def test_CMRparams_no_other_inputs(): CMRparams.build_params( product="ATL06", - version="003", + version="005", start=dt.datetime(2019, 2, 20, 0, 0), end=dt.datetime(2019, 2, 24, 23, 59, 59), extent_type="bounding_box", - spatial_extent=[-55, 68, -48, 71], + spatial_extent="-55.0,68.0,-48.0,71.0", ) obs_fmted_params = CMRparams.fmted_keys exp_fmted_params = { "short_name": "ATL06", - "version": "003", + "version": "005", "temporal": "2019-02-20T00:00:00Z,2019-02-24T23:59:59Z", - "bounding_box": "-55,68,-48,71", + "bounding_box": "-55.0,68.0,-48.0,71.0", } assert obs_fmted_params == exp_fmted_params diff --git a/icepyx/tests/test_query.py b/icepyx/tests/test_query.py index 7df29914d..8b5d53ffe 100644 --- a/icepyx/tests/test_query.py +++ b/icepyx/tests/test_query.py @@ -33,7 +33,7 @@ def test_icepyx_boundingbox_query(): "03:30:00", "21:30:00", "005", - ("bounding box", [-64.0, 66.0, -55.0, 72.0]), + ("bounding_box", [-64.0, 66.0, -55.0, 72.0]), ) assert obs_tuple == exp_tuple diff --git a/icepyx/tests/test_spatial.py b/icepyx/tests/test_spatial.py index 43dd8f727..c7731152b 100644 --- a/icepyx/tests/test_spatial.py +++ b/icepyx/tests/test_spatial.py @@ -4,6 +4,7 @@ import os from pathlib import Path import pytest +import re from shapely.geometry import Polygon import warnings @@ -18,37 +19,44 @@ def test_intlist_bbox(): """ Bounding box test w/ a List of valid Int inputs. * tests that expected output is correct - * tests that extent_type is correct + * tests that _ext_type is correct """ # initialize Spatial object; # it should call validate_spatial function correctly intlist_bbox = spat.Spatial([-64, 66, -55, 72]) - assert intlist_bbox.extent_type == "bounding_box" - assert intlist_bbox.extent_file is None - assert intlist_bbox.spatial_extent == [-64, 66, -55, 72] + assert intlist_bbox._ext_type == "bounding_box" + assert intlist_bbox._geom_file is None + assert intlist_bbox.extent == [-64, 66, -55, 72] def test_floatlist_bbox(): floatlist_bbox = spat.Spatial([-64.2, 66.2, -55.5, 72.5]) - assert floatlist_bbox.extent_type == "bounding_box" - assert floatlist_bbox.extent_file is None - assert floatlist_bbox.spatial_extent == [-64.2, 66.2, -55.5, 72.5] + assert floatlist_bbox._ext_type == "bounding_box" + assert floatlist_bbox._geom_file is None + assert floatlist_bbox.extent == [-64.2, 66.2, -55.5, 72.5] def test_numpyfloatarray_bbox(): npfloat_bbox = spat.Spatial(np.array([-64.2, 66.2, -55.5, 72.5])) - assert npfloat_bbox.extent_type == "bounding_box" - assert npfloat_bbox.extent_file is None - assert npfloat_bbox.spatial_extent == [-64.2, 66.2, -55.5, 72.5] + assert npfloat_bbox._ext_type == "bounding_box" + assert npfloat_bbox._geom_file is None + assert npfloat_bbox.extent == [-64.2, 66.2, -55.5, 72.5] def test_numpyfloatlist_bbox(): npfloatlist_bbox = spat.Spatial(list(np.array([-64.2, 66.2, -55.5, 72.5]))) - assert npfloatlist_bbox.extent_type == "bounding_box" - assert npfloatlist_bbox.extent_file is None - assert npfloatlist_bbox.spatial_extent == [-64.2, 66.2, -55.5, 72.5] + assert npfloatlist_bbox._ext_type == "bounding_box" + assert npfloatlist_bbox._geom_file is None + assert npfloatlist_bbox.extent == [-64.2, 66.2, -55.5, 72.5] + + +def test_intlist_with0_bbox(): + npfloatlist_bbox = spat.Spatial(list(np.array([0, -80, 90, -60]))) + assert npfloatlist_bbox._ext_type == "bounding_box" + assert npfloatlist_bbox._geom_file is None + assert npfloatlist_bbox.extent == [0, -80, 90, -60] # ########## Bounding Box Assertion Error tests ############################################# @@ -105,16 +113,6 @@ def test_invalid_high_longitude_2_bbox(): high_lon_2_bbox = spat.Spatial([-64.2, 66.2, 180.5, 72.5]) -def test_diff_sign_lowleft_lt_upright_longitude_bbox(): - with pytest.raises(AssertionError): - long_ll_lt_ur_ds_bbox = spat.Spatial([-64.2, 66.2, 55.5, 72.5]) - - -def test_same_sign_lowleft_gt_upright_longitude_bbox(): - with pytest.raises(AssertionError): - long_ll_gt_ur_ss_bbox = spat.Spatial([-55.5, 66.2, -64.2, 72.5]) - - def test_same_sign_lowleft_gt_upright_latitude_bbox(): with pytest.raises(AssertionError): lat_ll_gt_ur_ss_bbox = spat.Spatial([-64.2, 72.5, -55.5, 66.2]) @@ -134,51 +132,86 @@ def test_list_pairs_polygon(): poly_list_pair = spat.Spatial( [[-55, 68], [-55, 71], [-48, 71], [-48, 68], [-55, 68]] ) - expected_poly_list_pair = Polygon( - [[-55, 68], [-55, 71], [-48, 71], [-48, 68], [-55, 68]] - ) - - assert poly_list_pair.extent_type == "polygon" - assert poly_list_pair.extent_file is None - assert poly_list_pair.spatial_extent == expected_poly_list_pair + expected_poly_list_pair = [ + -55.0, + 68.0, + -55.0, + 71.0, + -48.0, + 71.0, + -48.0, + 68.0, + -55.0, + 68.0, + ] + + assert poly_list_pair._ext_type == "polygon" + assert poly_list_pair._geom_file is None + assert poly_list_pair.extent == expected_poly_list_pair def test_tuple_latlon_pairs(): poly_tuple_pair = spat.Spatial( [(-55, 68), (-55, 71), (-48, 71), (-48, 68), (-55, 68)] ) - expected_poly_tuple_pair = Polygon( - [[-55, 68], [-55, 71], [-48, 71], [-48, 68], [-55, 68]] - ) - - assert poly_tuple_pair.extent_type == "polygon" - assert poly_tuple_pair.extent_file is None - assert poly_tuple_pair.spatial_extent == expected_poly_tuple_pair + expected_poly_tuple_pair = [ + -55.0, + 68.0, + -55.0, + 71.0, + -48.0, + 71.0, + -48.0, + 68.0, + -55.0, + 68.0, + ] + + assert poly_tuple_pair._ext_type == "polygon" + assert poly_tuple_pair._geom_file is None + assert poly_tuple_pair.extent == expected_poly_tuple_pair def test_intlist_latlon_coords(): poly_list = spat.Spatial([-55, 68, -55, 71, -48, 71, -48, 68, -55, 68]) - expected_poly_list = Polygon( - [[-55, 68], [-55, 71], [-48, 71], [-48, 68], [-55, 68]] - ) - print(poly_list.spatial_extent) - print(expected_poly_list) - assert poly_list.extent_type == "polygon" - assert poly_list.extent_file is None - assert poly_list.spatial_extent == expected_poly_list + expected_poly_list = [ + -55.0, + 68.0, + -55.0, + 71.0, + -48.0, + 71.0, + -48.0, + 68.0, + -55.0, + 68.0, + ] + + assert poly_list._ext_type == "polygon" + assert poly_list._geom_file is None + assert poly_list.extent == expected_poly_list def test_floatlist_latlon_coords(): poly_float_list = spat.Spatial( [-55.0, 68.7, -55.0, 71, -48, 71, -48, 68.7, -55.0, 68.7] ) - expected_poly_float_list = Polygon( - [[-55.0, 68.7], [-55.0, 71], [-48, 71], [-48, 68.7], [-55.0, 68.7]] - ) - - assert poly_float_list.extent_type == "polygon" - assert poly_float_list.extent_file is None - assert poly_float_list.spatial_extent == expected_poly_float_list + expected_poly_float_list = [ + -55.0, + 68.7, + -55.0, + 71.0, + -48.0, + 71.0, + -48.0, + 68.7, + -55.0, + 68.7, + ] + + assert poly_float_list._ext_type == "polygon" + assert poly_float_list._geom_file is None + assert poly_float_list.extent == expected_poly_float_list # numpy array tests @@ -188,37 +221,64 @@ def test_numpy_list_pairs_polygon(): poly_list_pair = spat.Spatial( np.array([[-55, 68], [-55, 71], [-48, 71], [-48, 68], [-55, 68]]) ) - expected_poly_list_pair = Polygon( - [[-55, 68], [-55, 71], [-48, 71], [-48, 68], [-55, 68]] - ) - - assert poly_list_pair.extent_type == "polygon" - assert poly_list_pair.extent_file is None - assert poly_list_pair.spatial_extent == expected_poly_list_pair + expected_poly_list_pair = [ + -55.0, + 68.0, + -55.0, + 71.0, + -48.0, + 71.0, + -48.0, + 68.0, + -55.0, + 68.0, + ] + + assert poly_list_pair._ext_type == "polygon" + assert poly_list_pair._geom_file is None + assert poly_list_pair.extent == expected_poly_list_pair def test_numpy_tuple_latlon_pairs(): poly_tuple_pair = spat.Spatial( np.array([(-55, 68), (-55, 71), (-48, 71), (-48, 68), (-55, 68)]) ) - expected_poly_tuple_pair = Polygon( - [[-55, 68], [-55, 71], [-48, 71], [-48, 68], [-55, 68]] - ) - - assert poly_tuple_pair.extent_type == "polygon" - assert poly_tuple_pair.extent_file is None - assert poly_tuple_pair.spatial_extent == expected_poly_tuple_pair + expected_poly_tuple_pair = [ + -55.0, + 68.0, + -55.0, + 71.0, + -48.0, + 71.0, + -48.0, + 68.0, + -55.0, + 68.0, + ] + + assert poly_tuple_pair._ext_type == "polygon" + assert poly_tuple_pair._geom_file is None + assert poly_tuple_pair.extent == expected_poly_tuple_pair def test_numpy_intlist_latlon_coords(): poly_list = spat.Spatial(np.array([-55, 68, -55, 71, -48, 71, -48, 68, -55, 68])) - expected_poly_list = Polygon( - [[-55, 68], [-55, 71], [-48, 71], [-48, 68], [-55, 68]] - ) - - assert poly_list.extent_type == "polygon" - assert poly_list.extent_file is None - assert poly_list.spatial_extent == expected_poly_list + expected_poly_list = [ + -55.0, + 68.0, + -55.0, + 71.0, + -48.0, + 71.0, + -48.0, + 68.0, + -55.0, + 68.0, + ] + + assert poly_list._ext_type == "polygon" + assert poly_list._geom_file is None + assert poly_list.extent == expected_poly_list # ########## Polygon Assertion Error tests ############################################################ @@ -247,27 +307,46 @@ def test_bad_value_types_poly(): def test_poly_tuple_latlon_pairs_auto_close(): poly_tuple_pair = spat.Spatial([(-55, 68), (-55, 71), (-48, 71), (-48, 68)]) - expected_poly_tuple_pair = Polygon( - [[-55, 68], [-55, 71], [-48, 71], [-48, 68], [-55, 68]] - ) - - assert poly_tuple_pair.extent_type == "polygon" - assert poly_tuple_pair.extent_file is None - assert poly_tuple_pair.spatial_extent == expected_poly_tuple_pair + expected_poly_tuple_pair = [ + -55.0, + 68.0, + -55.0, + 71.0, + -48.0, + 71.0, + -48.0, + 68.0, + -55.0, + 68.0, + ] + + assert poly_tuple_pair._ext_type == "polygon" + assert poly_tuple_pair._geom_file is None + assert poly_tuple_pair.extent == expected_poly_tuple_pair def test_poly_list_auto_close(): poly_list = spat.Spatial([-55, 68, -55, 71, -48, 71, -48, 68]) - expected_poly_list = Polygon( - [[-55, 68], [-55, 71], [-48, 71], [-48, 68], [-55, 68]] - ) - - assert poly_list.extent_type == "polygon" - assert poly_list.extent_file is None - assert poly_list.spatial_extent == expected_poly_list + expected_poly_list = [ + -55.0, + 68.0, + -55.0, + 71.0, + -48.0, + 71.0, + -48.0, + 68.0, + -55.0, + 68.0, + ] + + assert poly_list._ext_type == "polygon" + assert poly_list._geom_file is None + assert poly_list.extent == expected_poly_list # ###################### END POLYGON NO FILE TESTS #################################################################### + # ######### Geom File Input Tests ###################################################### @@ -280,23 +359,18 @@ def test_poly_file_simple_one_poly(): ).resolve() ) ) - # print(poly_from_file.extent_file) - # print(poly_from_file.spatial_extent) - expected_poly = Polygon([[-55, 68], [-55, 71], [-48, 71], [-48, 68], [-55, 68]]) - assert poly_from_file.extent_type == "polygon" - assert poly_from_file.extent_file is not None - assert poly_from_file.extent_file == str( + expected_poly = [-55.0, 68.0, -55.0, 71.0, -48.0, 71.0, -48.0, 68.0, -55.0, 68.0] + + assert poly_from_file._ext_type == "polygon" + assert poly_from_file._geom_file is not None + assert poly_from_file._geom_file == str( Path( "./doc/source/example_notebooks/supporting_files/simple_test_poly.gpkg" ).resolve() ) - assert poly_from_file.spatial_extent == expected_poly - + assert poly_from_file.extent == expected_poly -""" -TODO: test files with multiple polygons throw a warning and only select the first polygon -""" # ########## Geom File Assertion Error tests ############################################################ @@ -313,33 +387,30 @@ def test_bad_poly_inputfile_type_throws_error(): bad_input = spat.Spatial(str(Path("./icepyx/tests/test_read.py").resolve())) - ########## geodataframe ########## + def test_gdf_from_one_bbox(): obs = spat.geodataframe("bounding_box", [-55, 68, -48, 71]) geom = [Polygon(list(zip([-55, -55, -48, -48, -55], [68, 71, 71, 68, 68])))] exp = gpd.GeoDataFrame(geometry=geom) - # print(obs.geometry[0]) - # print(exp.geometry[0]) + # make sure there is only one geometry before comparing them + assert len(obs.geometry) == 1 + assert len(exp.geometry) == 1 + assert obs.geometry[0].equals(exp.geometry[0]) - # print(exp) - # DevNote: this feels like a questionable test to me, since it specifies the first entry (though there should only be one) - - assert obs.geometry[0] == exp.geometry[0] def test_gdf_from_multi_bbox(): obs = spat.geodataframe("bounding_box", [-55, 68, -48, 71]) geom = [Polygon(list(zip([-55, -55, -48, -48, -55], [68, 71, 71, 68, 68])))] exp = gpd.GeoDataFrame(geometry=geom) - print(obs.geometry[0]) - print(exp.geometry[0]) - # DevNote: this feels like a questionable test to me, since it specifies the first entry (though there should only be one) - assert obs.geometry[0] == exp.geometry[0] - + # make sure there is only one geometry before comparing them + assert len(obs.geometry) == 1 + assert len(exp.geometry) == 1 + assert obs.geometry[0].equals(exp.geometry[0]) # TestQuestions: 1) Do these need to be tested? @@ -358,9 +429,1040 @@ def test_gdf_from_multi_bbox(): # def test_gdf_from_filepoly_multi_simple(): -def test_bad_extent_input(): - ermsg = "Your spatial extent type is not an accepted input and a geodataframe cannot be constructed" - # DevNote: can't get the test to pass if the extent_type is included. Not sure why the strings "don't match" - # ermsg = "Your spatial extent type (polybox) is not an accepted input and a geodataframe cannot be constructed" +def test_bad_extent_type_input(): + ermsg = re.escape( + r"Your spatial extent type (polybox) is not an accepted input and a geodataframe cannot be constructed" + ) with pytest.raises(TypeError, match=ermsg): spat.geodataframe("polybox", [1, 2, 3, 4]) + + +# ###################### END GEOM FILE INPUT TESTS #################################################################### + +# ######### Dateline Crossing Tests ###################################################### + + +@pytest.mark.parametrize( + "bbox", + [[-55.5, 66.2, -64.2, 72.5], [1, -71, -1, -70]], +) +def test_bbox_crosses_dateline(bbox): + obs = spat.check_dateline("bounding_box", bbox) + exp = True + assert exp == obs + + +@pytest.mark.parametrize( + "bbox", + [[-64.2, 66.2, 55.5, 72.5], [-55, 68, -48, 71], [-1, -71, 1, -70]], +) +def test_bbox_not_crosses_dateline(bbox): + obs = spat.check_dateline("bounding_box", bbox) + exp = False + assert exp == obs + + +def test_poly_wrong_input(): + with pytest.raises(AssertionError): + tuplelist = spat.check_dateline( + "polygon", + [[160, -45], [160, -40], [-170, -39], [-128, -40], [-128, -45], [160, -45]], + ) + + +def test_poly_crosses_dateline(): + obs = spat.check_dateline( + "polygon", [160, -45, 160, -40, -170, -39, -128, -40, -128, -45, 160, -45] + ) + exp = True + assert exp == obs + + +# Note: users must manually specify their region crosses the dateline for regions spanning >90 longitude +def test_poly_not_crosses_dateline(): + obs = spat.check_dateline( + "polygon", [-55, 68, -55, 71, -48, 71, -47, 70, -48, 68, -55, 68] + ) + exp = False + assert exp == obs + + +# ###################### END DATELINE CROSSING TESTS #################################################################### + +# ######### CMR AND EGI API FORMATTING TESTS ###################################################### + + +def test_bounding_box_fmt(): + bbox = spat.Spatial([-55, 68, -48, 71]) + obs = bbox.fmt_for_CMR() + exp = "-55.0,68.0,-48.0,71.0" + assert obs == exp + + +def test_bbox_fmt(): + bbox = spat.Spatial([-55, 68, -48, 71]) + obs = bbox.fmt_for_EGI() + exp = "-55.0,68.0,-48.0,71.0" + assert obs == exp + + +@pytest.fixture +def poly(): + coords = [ + [-86.622742, -74.908126], + [-86.602149, -74.998483], + [-86.671945, -74.999545], + [-86.667881, -75.01762], + [-86.737771, -75.018662], + [-86.717729, -75.109052], + [-86.788057, -75.110077], + [-86.780144, -75.14624], + [-86.850654, -75.147247], + [-86.835058, -75.219586], + [-86.905925, -75.220574], + [-86.894389, -75.274839], + [-86.965529, -75.27581], + [-86.950368, -75.348177], + [-87.021872, -75.349129], + [-87.003154, -75.439609], + [-87.075115, -75.440545], + [-87.052886, -75.549149], + [-86.98038, -75.548205], + [-86.965004, -75.620616], + [-87.037878, -75.621564], + [-87.034102, -75.63967], + [-86.961136, -75.63872], + [-86.957257, -75.656825], + [-86.884208, -75.655851], + [-86.872234, -75.710165], + [-86.945563, -75.711143], + [-86.925871, -75.801686], + [-86.999681, -75.802647], + [-86.988029, -75.856983], + [-87.062135, -75.857925], + [-87.058326, -75.87604], + [-87.132537, -75.876959], + [-87.128815, -75.895075], + [-87.203132, -75.895972], + [-87.199496, -75.914091], + [-87.273919, -75.914965], + [-87.27037, -75.933086], + [-87.344899, -75.933938], + [-87.341438, -75.95206], + [-87.490715, -75.953695], + [-87.487439, -75.97182], + [-87.562188, -75.972604], + [-87.559001, -75.99073], + [-87.633856, -75.991491], + [-87.627653, -76.027748], + [-87.777778, -76.029203], + [-87.774861, -76.047334], + [-87.925213, -76.048696], + [-87.922485, -76.06683], + [-87.997771, -76.067476], + [-87.995135, -76.085611], + [-88.070527, -76.086234], + [-88.067983, -76.104371], + [-88.143481, -76.104971], + [-88.14103, -76.123109], + [-88.216633, -76.123686], + [-88.214276, -76.141826], + [-88.365701, -76.142909], + [-88.363537, -76.161051], + [-88.439359, -76.161557], + [-88.43729, -76.1797], + [-88.513217, -76.180183], + [-88.511244, -76.198328], + [-88.587276, -76.198787], + [-88.585399, -76.216933], + [-88.737681, -76.217781], + [-88.736001, -76.235929], + [-88.81225, -76.236317], + [-88.810667, -76.254466], + [-88.887022, -76.254831], + [-88.885537, -76.272981], + [-88.961998, -76.273321], + [-88.960611, -76.291473], + [-89.037177, -76.29179], + [-89.035889, -76.309942], + [-89.112561, -76.310235], + [-89.111372, -76.328389], + [-89.264932, -76.328903], + [-89.263946, -76.347058], + [-89.340833, -76.347279], + [-89.339947, -76.365434], + [-89.41694, -76.365631], + [-89.416155, -76.383788], + [-89.493254, -76.383961], + [-89.492571, -76.402118], + [-89.569775, -76.402267], + [-89.569195, -76.420425], + [-89.723816, -76.420649], + [-89.723443, -76.438808], + [-89.800859, -76.438884], + [-89.80059, -76.457044], + [-89.878112, -76.457095], + [-89.877947, -76.475255], + [-89.955575, -76.475282], + [-89.955514, -76.493443], + [-90.033248, -76.493445], + [-90.033293, -76.511607], + [-90.111131, -76.511584], + [-90.111283, -76.529747], + [-90.345113, -76.52953], + [-90.345583, -76.547693], + [-90.42363, -76.547571], + [-90.424208, -76.565734], + [-90.50236, -76.565588], + [-90.503734, -76.601916], + [-90.582098, -76.601744], + [-90.583695, -76.638075], + [-90.662272, -76.637877], + [-90.664093, -76.67421], + [-90.742884, -76.673987], + [-90.743907, -76.692154], + [-90.822803, -76.691906], + [-90.823937, -76.710073], + [-91.060932, -76.709176], + [-91.062397, -76.727343], + [-91.536922, -76.72487], + [-91.539047, -76.743034], + [-91.697397, -76.742008], + [-91.699746, -76.760171], + [-91.779021, -76.759619], + [-91.783959, -76.795946], + [-91.863446, -76.795367], + [-91.873848, -76.868024], + [-91.793917, -76.868605], + [-91.796424, -76.886772], + [-91.716375, -76.887329], + [-91.721186, -76.923666], + [-91.640906, -76.924199], + [-91.647835, -76.97871], + [-91.325297, -76.980597], + [-91.327166, -76.998771], + [-91.165637, -76.999562], + [-91.167283, -77.017738], + [-91.086397, -77.018096], + [-91.089474, -77.054451], + [-91.008355, -77.054784], + [-91.015545, -77.145686], + [-91.178934, -77.144989], + [-91.180618, -77.16317], + [-91.426015, -77.16193], + [-91.434206, -77.234653], + [-92.092069, -77.230176], + [-92.08907, -77.212001], + [-92.335283, -77.209895], + [-92.352136, -77.300761], + [-92.269483, -77.301495], + [-92.276054, -77.337847], + [-92.193152, -77.338557], + [-92.199521, -77.374914], + [-92.282662, -77.374202], + [-92.285981, -77.392381], + [-92.369233, -77.391642], + [-92.383091, -77.464357], + [-92.466819, -77.463587], + [-92.470431, -77.481766], + [-92.386581, -77.482537], + [-92.390081, -77.500717], + [-92.138102, -77.502874], + [-92.141243, -77.521058], + [-91.972963, -77.522365], + [-91.984627, -77.595116], + [-91.899978, -77.595733], + [-91.90279, -77.613923], + [-91.4788, -77.616608], + [-91.480993, -77.634803], + [-91.14118, -77.636469], + [-91.14799, -77.709264], + [-91.062516, -77.709615], + [-91.070502, -77.800626], + [-90.812128, -77.801523], + [-90.81335, -77.819728], + [-90.727088, -77.819973], + [-90.732603, -77.911009], + [-90.81952, -77.910763], + [-90.820765, -77.928971], + [-90.90781, -77.928697], + [-90.909191, -77.946905], + [-90.822014, -77.94718], + [-90.823267, -77.96539], + [-90.735953, -77.965638], + [-90.737076, -77.983849], + [-90.824523, -77.983601], + [-90.825784, -78.001812], + [-90.91336, -78.001535], + [-90.914759, -78.019746], + [-91.090167, -78.019109], + [-91.093515, -78.055531], + [-91.181481, -78.05517], + [-91.188783, -78.128018], + [-91.365784, -78.127206], + [-91.370017, -78.163631], + [-91.458782, -78.163181], + [-91.463317, -78.199607], + [-91.552351, -78.199128], + [-91.554767, -78.217341], + [-91.643932, -78.216832], + [-91.651645, -78.271472], + [-91.830785, -78.270365], + [-91.833652, -78.288578], + [-92.013037, -78.287355], + [-92.016194, -78.305566], + [-92.106013, -78.30491], + [-92.115968, -78.359544], + [-92.025726, -78.360203], + [-92.035347, -78.414844], + [-91.944667, -78.415477], + [-91.947751, -78.433693], + [-91.856918, -78.434298], + [-91.859867, -78.452516], + [-91.76888, -78.453093], + [-91.771695, -78.471312], + [-91.680555, -78.471861], + [-91.683233, -78.490081], + [-91.591939, -78.490602], + [-91.59703, -78.527046], + [-91.505436, -78.52754], + [-91.507847, -78.545764], + [-91.324343, -78.546665], + [-91.330738, -78.601343], + [-91.238533, -78.601752], + [-91.24053, -78.61998], + [-91.14817, -78.62036], + [-91.150024, -78.638589], + [-90.872462, -78.639554], + [-90.873874, -78.657786], + [-90.781194, -78.658049], + [-90.78246, -78.676281], + [-90.689626, -78.676516], + [-90.691868, -78.712982], + [-90.598728, -78.713188], + [-90.599703, -78.731422], + [-90.506409, -78.731598], + [-90.508064, -78.76807], + [-90.414462, -78.768217], + [-90.41582, -78.804691], + [-90.32191, -78.804808], + [-90.324034, -78.877764], + [-90.229502, -78.877852], + [-90.230262, -78.914333], + [-90.040568, -78.914419], + [-90.040635, -78.932661], + [-89.94563, -78.932659], + [-89.94554, -78.950901], + [-89.850378, -78.950868], + [-89.850129, -78.969111], + [-89.754809, -78.969048], + [-89.75399, -79.005535], + [-89.562719, -79.005317], + [-89.561988, -79.023561], + [-89.466196, -79.023406], + [-89.465302, -79.04165], + [-89.273406, -79.041249], + [-89.272187, -79.059493], + [-88.983893, -79.05866], + [-88.982186, -79.076903], + [-89.1747, -79.07749], + [-89.173311, -79.095734], + [-89.269737, -79.095982], + [-89.268506, -79.114228], + [-89.365099, -79.114445], + [-89.364027, -79.132691], + [-89.460787, -79.132879], + [-89.458959, -79.169374], + [-89.55605, -79.16953], + [-89.555296, -79.187779], + [-89.652554, -79.187905], + [-89.651963, -79.206154], + [-89.749389, -79.20625], + [-89.748962, -79.2245], + [-89.846555, -79.224564], + [-89.846293, -79.242815], + [-90.041814, -79.24285], + [-90.042029, -79.297606], + [-90.140292, -79.297577], + [-90.140775, -79.334083], + [-90.042173, -79.334112], + [-90.042319, -79.37062], + [-90.141261, -79.370591], + [-90.141505, -79.388846], + [-90.240618, -79.388785], + [-90.241873, -79.443552], + [-90.341501, -79.443459], + [-90.342693, -79.479973], + [-90.442666, -79.479848], + [-90.444995, -79.534621], + [-90.545492, -79.534464], + [-90.546451, -79.552722], + [-90.445777, -79.55288], + [-90.447349, -79.5894], + [-91.053456, -79.587965], + [-91.055316, -79.606223], + [-91.257663, -79.605486], + [-91.259887, -79.623743], + [-91.361228, -79.623325], + [-91.36364, -79.641582], + [-91.465152, -79.641131], + [-91.488897, -79.805457], + [-91.695178, -79.804442], + [-91.698235, -79.822701], + [-91.801545, -79.822143], + [-91.808067, -79.85866], + [-91.704384, -79.85922], + [-91.707475, -79.87748], + [-91.811346, -79.876919], + [-91.814637, -79.895179], + [-91.918685, -79.894584], + [-91.922176, -79.912843], + [-92.026401, -79.912214], + [-92.030095, -79.930472], + [-92.134495, -79.929808], + [-92.138393, -79.948066], + [-92.347532, -79.946636], + [-92.351826, -79.964891], + [-92.456562, -79.964125], + [-92.461064, -79.982379], + [-92.565975, -79.981578], + [-92.570685, -79.999832], + [-92.78084, -79.998126], + [-92.785952, -80.016376], + [-92.891195, -80.015471], + [-92.896519, -80.033721], + [-93.001935, -80.032781], + [-93.007473, -80.051029], + [-93.113062, -80.050053], + [-93.118814, -80.0683], + [-93.224577, -80.067288], + [-93.230546, -80.085534], + [-93.336481, -80.084487], + [-93.324176, -80.048001], + [-93.429699, -80.046925], + [-93.417099, -80.010444], + [-93.522213, -80.009338], + [-93.515756, -79.991101], + [-93.620655, -79.989964], + [-93.61403, -79.971729], + [-93.718714, -79.97056], + [-93.711924, -79.952328], + [-93.816393, -79.951128], + [-93.788723, -79.87821], + [-93.892414, -79.876987], + [-93.864399, -79.804083], + [-93.967323, -79.802836], + [-93.946026, -79.748169], + [-93.843651, -79.749409], + [-93.823125, -79.694739], + [-93.924956, -79.693505], + [-93.90411, -79.638844], + [-94.005379, -79.637584], + [-93.998302, -79.619367], + [-94.099369, -79.618077], + [-94.092139, -79.599863], + [-94.193003, -79.598544], + [-94.185623, -79.580332], + [-94.386921, -79.577602], + [-94.379215, -79.559395], + [-94.680431, -79.555069], + [-94.672229, -79.53687], + [-94.772403, -79.535367], + [-94.747448, -79.48078], + [-94.847075, -79.479253], + [-94.81352, -79.406486], + [-94.912434, -79.404938], + [-94.903948, -79.38675], + [-95.101351, -79.383566], + [-95.092557, -79.365384], + [-95.191045, -79.363748], + [-95.155505, -79.291032], + [-95.253295, -79.289376], + [-95.244321, -79.271201], + [-95.341915, -79.269517], + [-95.332806, -79.251344], + [-95.430206, -79.249633], + [-95.420964, -79.231464], + [-95.323729, -79.233172], + [-95.269903, -79.124145], + [-95.366167, -79.122454], + [-95.357141, -79.104287], + [-95.453215, -79.102568], + [-95.425842, -79.048076], + [-95.616944, -79.044565], + [-95.598218, -79.00825], + [-95.693408, -79.006456], + [-95.683935, -78.988302], + [-95.588901, -78.990093], + [-95.579615, -78.971937], + [-95.484707, -78.973695], + [-95.475607, -78.955536], + [-95.380824, -78.957262], + [-95.37191, -78.9391], + [-95.466538, -78.937377], + [-95.457498, -78.919218], + [-95.551942, -78.917468], + [-95.542778, -78.899312], + [-95.637038, -78.897535], + [-95.609268, -78.843079], + [-95.515467, -78.844846], + [-95.506423, -78.826692], + [-95.412744, -78.828427], + [-95.403881, -78.81027], + [-95.310325, -78.811973], + [-95.301642, -78.793813], + [-95.114747, -78.797124], + [-95.106394, -78.778959], + [-95.013057, -78.780567], + [-95.004882, -78.7624], + [-94.911669, -78.763976], + [-94.895698, -78.727637], + [-94.988611, -78.726066], + [-94.940425, -78.617072], + [-95.032424, -78.615487], + [-95.024337, -78.597325], + [-95.207964, -78.594073], + [-95.191285, -78.557761], + [-95.465652, -78.552682], + [-95.474413, -78.57083], + [-95.748962, -78.565482], + [-95.721466, -78.511065], + [-95.812493, -78.509234], + [-95.803243, -78.491098], + [-96.075717, -78.48544], + [-96.06607, -78.467314], + [-96.156692, -78.465373], + [-96.146934, -78.447251], + [-96.327803, -78.44329], + [-96.297869, -78.388943], + [-96.387836, -78.386929], + [-96.377781, -78.368817], + [-96.467577, -78.366779], + [-96.457416, -78.34867], + [-96.547041, -78.346606], + [-96.536773, -78.328501], + [-96.80504, -78.32215], + [-96.794392, -78.304055], + [-96.883611, -78.301886], + [-96.872859, -78.283794], + [-96.961909, -78.2816], + [-96.940233, -78.245425], + [-97.028977, -78.243209], + [-97.018054, -78.225125], + [-97.19517, -78.220617], + [-97.184011, -78.20254], + [-97.272383, -78.200248], + [-97.238713, -78.14603], + [-97.326651, -78.14372], + [-97.315364, -78.125651], + [-97.403134, -78.123318], + [-97.391749, -78.105253], + [-97.566921, -78.10051], + [-97.555308, -78.082453], + [-97.64271, -78.080044], + [-97.607693, -78.025883], + [-97.520682, -78.02828], + [-97.497773, -77.992166], + [-97.410987, -77.994529], + [-97.399713, -77.976468], + [-97.313022, -77.9788], + [-97.27979, -77.924608], + [-97.193451, -77.926901], + [-97.139363, -77.836566], + [-96.967859, -77.841038], + [-96.946954, -77.804891], + [-96.861407, -77.80708], + [-96.851127, -77.789004], + [-96.765675, -77.791162], + [-96.725358, -77.718845], + [-96.640377, -77.720964], + [-96.620645, -77.6848], + [-96.535882, -77.686886], + [-96.526184, -77.668801], + [-96.441516, -77.670857], + [-96.384656, -77.562336], + [-96.552494, -77.558236], + [-96.514174, -77.485919], + [-96.59757, -77.483841], + [-96.58794, -77.465766], + [-96.671187, -77.463665], + [-96.680937, -77.481738], + [-97.263693, -77.466276], + [-97.253111, -77.448226], + [-97.336123, -77.445916], + [-97.325453, -77.42787], + [-97.491148, -77.423178], + [-97.480274, -77.405139], + [-97.397559, -77.407495], + [-97.376139, -77.371411], + [-97.293628, -77.373733], + [-97.28308, -77.355688], + [-98.433698, -77.320866], + [-98.421564, -77.302872], + [-98.666926, -77.294764], + [-98.642079, -77.2588], + [-99.049167, -77.244815], + [-99.036233, -77.226854], + [-99.522851, -77.209257], + [-99.509284, -77.191321], + [-99.832489, -77.179101], + [-99.818518, -77.161182], + [-99.979666, -77.154929], + [-99.965515, -77.137019], + [-100.447336, -77.117686], + [-100.432572, -77.099804], + [-100.512625, -77.096499], + [-100.483005, -77.060743], + [-100.642555, -77.054077], + [-100.627593, -77.036208], + [-100.707198, -77.032842], + [-100.692171, -77.014978], + [-100.851044, -77.008182], + [-100.835847, -76.990327], + [-100.915114, -76.986897], + [-100.899853, -76.969047], + [-101.058051, -76.962123], + [-101.042622, -76.944282], + [-101.121553, -76.940788], + [-101.090613, -76.905114], + [-101.169293, -76.901606], + [-101.153783, -76.883774], + [-101.232316, -76.880245], + [-101.216746, -76.862418], + [-101.295133, -76.85887], + [-101.217404, -76.769752], + [-101.295238, -76.766205], + [-101.279717, -76.748385], + [-101.357407, -76.744819], + [-101.310795, -76.691373], + [-101.388141, -76.687797], + [-101.372587, -76.669986], + [-101.449791, -76.666392], + [-101.326063, -76.523929], + [-101.402436, -76.52035], + [-101.341168, -76.449131], + [-101.265184, -76.45269], + [-101.175067, -76.345822], + [-101.250474, -76.342292], + [-101.190803, -76.27106], + [-101.265793, -76.267525], + [-101.250878, -76.249721], + [-101.325735, -76.246168], + [-101.280944, -76.192769], + [-101.429978, -76.185621], + [-101.399941, -76.150039], + [-101.474214, -76.14644], + [-101.459161, -76.128654], + [-101.533304, -76.125037], + [-101.518198, -76.107255], + [-101.59221, -76.10362], + [-101.577051, -76.085842], + [-101.650932, -76.082189], + [-101.635722, -76.064416], + [-101.709473, -76.060745], + [-101.694211, -76.042976], + [-101.767832, -76.039287], + [-101.752518, -76.021523], + [-101.899461, -76.014086], + [-101.837882, -75.943066], + [-101.910936, -75.939333], + [-101.89555, -75.921582], + [-101.968477, -75.917832], + [-101.953041, -75.900085], + [-102.02584, -75.896317], + [-102.010356, -75.878575], + [-102.083027, -75.87479], + [-102.067494, -75.857052], + [-102.140038, -75.853249], + [-102.124457, -75.835516], + [-102.196874, -75.831696], + [-102.181245, -75.813967], + [-102.253535, -75.810129], + [-102.237859, -75.792406], + [-102.310023, -75.78855], + [-102.294299, -75.770832], + [-102.366338, -75.766959], + [-102.350567, -75.749245], + [-102.494353, -75.741443], + [-102.478451, -75.723738], + [-102.693572, -75.711884], + [-102.70973, -75.729573], + [-102.853113, -75.72155], + [-102.869482, -75.739229], + [-102.941198, -75.735179], + [-102.957693, -75.752851], + [-103.029452, -75.748774], + [-103.012872, -75.731107], + [-103.227644, -75.718758], + [-103.210852, -75.701106], + [-103.282275, -75.696951], + [-103.265441, -75.679303], + [-103.336738, -75.675132], + [-103.303027, -75.639846], + [-103.445162, -75.631459], + [-103.428203, -75.613826], + [-103.923762, -75.583823], + [-103.90627, -75.566227], + [-103.976811, -75.56186], + [-103.941793, -75.526678], + [-104.012128, -75.5223], + [-103.942283, -75.45195], + [-103.914847, -75.426057], + [-103.846549, -75.420428], + [-103.814359, -75.41156], + [-103.74731, -75.394972], + [-103.643531, -75.376578], + [-103.639472, -75.360155], + [-103.549124, -75.339049], + [-103.509054, -75.329656], + [-103.456714, -75.307204], + [-103.37484, -75.273725], + [-103.284801, -75.264374], + [-103.224839, -75.25812], + [-103.182394, -75.249825], + [-103.086408, -75.237813], + [-103.042136, -75.231576], + [-102.981295, -75.215486], + [-102.956754, -75.210167], + [-102.921448, -75.203018], + [-102.898283, -75.198106], + [-102.873449, -75.192921], + [-102.84957, -75.188785], + [-102.825705, -75.184646], + [-102.789524, -75.181222], + [-102.744295, -75.17242], + [-102.656346, -75.16239], + [-102.607491, -75.160775], + [-102.560626, -75.159773], + [-102.511333, -75.159268], + [-102.378744, -75.152045], + [-102.34262, -75.146716], + [-102.266406, -75.132957], + [-102.223828, -75.128342], + [-102.157455, -75.12945], + [-102.113853, -75.130386], + [-102.068876, -75.13139], + [-102.040635, -75.126691], + [-102.013199, -75.12121], + [-101.969076, -75.11627], + [-101.953576, -75.113073], + [-101.923326, -75.111044], + [-101.896684, -75.109917], + [-101.821333, -75.103337], + [-101.766389, -75.098945], + [-101.726414, -75.090073], + [-101.723655, -75.079577], + [-101.631989, -75.054005], + [-101.564382, -75.02971], + [-101.547244, -75.015213], + [-101.531499, -75.000643], + [-101.549303, -74.990901], + [-101.489949, -74.940509], + [-101.469959, -74.921526], + [-101.455398, -74.908855], + [-101.420557, -74.891146], + [-101.399072, -74.882138], + [-101.391177, -74.870096], + [-101.371447, -74.860874], + [-101.363063, -74.853621], + [-101.338827, -74.838164], + [-101.312982, -74.826333], + [-101.29282, -74.816401], + [-101.276851, -74.808624], + [-101.27464, -74.804247], + [-101.259243, -74.798558], + [-101.251822, -74.792086], + [-101.267741, -74.78708], + [-101.256493, -74.781809], + [-101.257733, -74.779767], + [-101.250447, -74.777156], + [-101.240613, -74.770054], + [-101.222641, -74.763963], + [-101.216307, -74.748673], + [-101.212936, -74.740259], + [-101.200426, -74.734469], + [-101.197349, -74.72643], + [-101.188725, -74.7179], + [-101.207959, -74.716895], + [-101.219968, -74.709239], + [-101.232933, -74.706803], + [-101.230248, -74.703234], + [-101.238372, -74.70027], + [-101.254074, -74.700252], + [-101.275428, -74.693637], + [-101.306089, -74.693851], + [-101.351676, -74.691805], + [-101.364701, -74.681592], + [-101.396392, -74.67954], + [-101.416381, -74.679976], + [-101.462601, -74.674445], + [-101.482989, -74.660146], + [-101.530932, -74.656493], + [-101.545802, -74.657827], + [-101.570915, -74.655354], + [-101.627933, -74.648117], + [-101.647793, -74.639151], + [-101.676385, -74.635907], + [-101.678978, -74.633321], + [-101.695894, -74.628422], + [-101.728673, -74.621731], + [-101.781287, -74.617603], + [-101.794801, -74.615021], + [-101.870395, -74.608983], + [-101.933735, -74.601768], + [-101.986726, -74.595483], + [-102.032573, -74.595827], + [-102.026749, -74.590285], + [-102.010395, -74.580201], + [-102.035597, -74.564212], + [-102.090552, -74.553133], + [-102.264411, -74.519626], + [-102.339743, -74.51083], + [-102.411915, -74.510518], + [-102.424826, -74.497263], + [-102.377212, -74.483896], + [-102.280808, -74.473374], + [-102.236421, -74.463717], + [-102.185211, -74.450043], + [-102.150282, -74.438359], + [-102.110682, -74.429878], + [-102.080455, -74.419386], + [-102.029215, -74.421347], + [-101.986657, -74.414487], + [-101.942992, -74.405238], + [-101.914922, -74.383364], + [-101.795349, -74.369597], + [-101.698034, -74.375051], + [-101.572267, -74.390817], + [-101.433665, -74.404266], + [-101.358339, -74.410301], + [-101.276679, -74.412744], + [-101.200663, -74.403148], + [-101.126055, -74.400282], + [-101.050277, -74.385754], + [-100.925725, -74.378623], + [-100.827076, -74.373988], + [-100.786332, -74.316362], + [-100.72066, -74.319735], + [-100.708238, -74.301973], + [-100.642611, -74.305321], + [-100.617997, -74.26979], + [-100.552486, -74.273111], + [-100.528129, -74.237572], + [-100.462734, -74.240864], + [-100.355131, -74.080906], + [-100.290352, -74.084143], + [-100.278602, -74.066367], + [-100.213868, -74.06958], + [-100.190588, -74.03402], + [-100.125968, -74.037206], + [-100.114438, -74.019422], + [-100.049863, -74.022585], + [-100.061323, -74.040372], + [-99.996651, -74.043518], + [-100.008066, -74.061309], + [-99.943298, -74.064439], + [-99.954667, -74.082234], + [-99.889802, -74.085347], + [-99.878504, -74.067549], + [-99.68397, -74.076757], + [-99.672911, -74.058947], + [-99.218628, -74.079702], + [-99.208094, -74.061869], + [-98.688058, -74.08435], + [-98.678122, -74.06649], + [-98.026778, -74.092735], + [-98.035988, -74.110626], + [-97.774563, -74.120566], + [-97.783502, -74.138469], + [-97.521457, -74.148094], + [-97.512812, -74.13018], + [-97.447324, -74.132532], + [-97.438772, -74.114615], + [-97.242413, -74.121541], + [-97.234101, -74.103616], + [-97.103247, -74.108126], + [-97.095101, -74.090197], + [-97.02972, -74.092418], + [-97.021665, -74.074486], + [-96.825632, -74.08102], + [-96.833465, -74.098959], + [-96.768011, -74.101099], + [-96.775789, -74.119041], + [-96.513501, -74.127404], + [-96.506019, -74.109452], + [-96.374919, -74.113506], + [-96.367602, -74.095549], + [-96.302101, -74.097543], + [-96.294875, -74.079584], + [-96.229432, -74.081555], + [-96.222295, -74.063595], + [-96.156909, -74.065543], + [-96.149863, -74.047581], + [-95.95383, -74.053295], + [-95.947021, -74.035326], + [-95.816402, -74.039029], + [-95.809755, -74.021057], + [-95.679223, -74.024673], + [-95.672738, -74.006697], + [-95.542294, -74.010228], + [-95.535971, -73.992248], + [-95.405616, -73.995692], + [-95.399454, -73.97771], + [-95.26919, -73.981068], + [-95.263189, -73.963082], + [-95.133017, -73.966355], + [-95.121348, -73.930376], + [-95.056388, -73.931978], + [-95.050646, -73.913988], + [-94.985747, -73.915568], + [-94.980091, -73.897576], + [-94.915251, -73.899134], + [-94.909681, -73.881141], + [-94.844902, -73.882677], + [-94.839417, -73.864683], + [-94.774698, -73.866196], + [-94.769297, -73.848201], + [-94.704639, -73.849692], + [-94.699323, -73.831696], + [-94.634725, -73.833165], + [-94.629493, -73.815168], + [-94.564955, -73.816615], + [-94.559808, -73.798617], + [-94.430842, -73.801447], + [-94.420869, -73.765446], + [-94.356514, -73.766828], + [-94.351616, -73.748827], + [-94.287321, -73.750186], + [-94.277701, -73.714183], + [-94.213539, -73.715519], + [-94.223015, -73.751526], + [-94.158698, -73.752845], + [-94.168073, -73.788858], + [-94.103602, -73.79016], + [-94.117527, -73.844188], + [-94.052828, -73.845474], + [-94.057417, -73.863487], + [-93.992635, -73.864754], + [-93.997163, -73.882768], + [-93.5429, -73.89108], + [-93.546925, -73.909105], + [-93.416904, -73.911299], + [-93.420791, -73.929327], + [-93.095219, -73.934459], + [-93.098746, -73.952494], + [-93.033533, -73.95346], + [-93.030081, -73.935424], + [-92.117389, -73.946779], + [-92.114979, -73.92873], + [-92.049815, -73.929387], + [-92.05215, -73.947436], + [-91.921656, -73.948689], + [-91.923848, -73.96674], + [-91.793186, -73.967912], + [-91.795233, -73.985966], + [-91.729821, -73.986521], + [-91.731798, -74.004576], + [-91.666307, -74.005112], + [-91.668214, -74.023169], + [-91.077936, -74.027065], + [-91.076703, -74.009003], + [-91.011175, -74.009332], + [-91.01002, -73.991272], + [-90.879106, -73.991867], + [-90.878103, -73.973806], + [-90.812717, -73.974073], + [-90.811791, -73.956012], + [-90.746478, -73.956258], + [-90.74733, -73.974319], + [-90.551155, -73.974933], + [-90.551785, -73.992995], + [-90.486316, -73.993159], + [-90.486872, -74.011222], + [-90.290232, -74.011589], + [-90.290565, -74.029653], + [-90.159318, -74.029795], + [-90.1595, -74.047861], + [-90.028101, -74.04792], + [-90.028133, -74.065986], + [-89.830808, -74.065919], + [-89.830418, -74.102053], + [-89.764492, -74.10199], + [-89.764221, -74.120058], + [-89.69822, -74.119973], + [-89.697523, -74.156112], + [-89.63137, -74.156006], + [-89.630517, -74.192147], + [-89.564212, -74.19202], + [-89.563707, -74.210092], + [-89.430947, -74.209775], + [-89.430287, -74.227847], + [-89.29738, -74.227445], + [-89.296564, -74.245518], + [-89.230036, -74.245285], + [-89.22914, -74.263358], + [-89.162537, -74.263104], + [-89.161562, -74.281178], + [-89.028207, -74.280607], + [-89.02594, -74.316754], + [-88.892285, -74.316097], + [-88.890991, -74.334171], + [-88.82409, -74.333811], + [-88.822715, -74.351885], + [-88.688766, -74.3511], + [-88.687231, -74.369174], + [-88.620184, -74.368749], + [-88.618567, -74.386824], + [-88.484327, -74.38591], + [-88.482549, -74.403984], + [-88.348167, -74.402984], + [-88.346228, -74.421057], + [-88.278965, -74.420525], + [-88.276942, -74.438598], + [-88.142273, -74.437468], + [-88.140087, -74.455541], + [-88.072681, -74.454944], + [-88.07041, -74.473017], + [-87.935456, -74.471756], + [-87.93302, -74.489828], + [-87.865472, -74.489165], + [-87.862952, -74.507237], + [-87.79533, -74.506552], + [-87.792724, -74.524624], + [-87.65734, -74.523188], + [-87.654567, -74.541259], + [-87.586805, -74.540508], + [-87.583946, -74.558579], + [-87.51611, -74.557806], + [-87.513164, -74.575876], + [-87.241573, -74.572566], + [-87.238298, -74.590633], + [-87.034444, -74.587922], + [-87.03092, -74.605986], + [-86.962905, -74.605038], + [-86.955671, -74.641167], + [-86.887503, -74.640195], + [-86.868859, -74.730522], + [-86.800293, -74.729523], + [-86.792609, -74.765656], + [-86.723889, -74.764633], + [-86.716003, -74.800766], + [-86.647127, -74.799719], + [-86.63091, -74.871988], + [-86.561712, -74.870913], + [-86.553377, -74.907049], + [-86.622742, -74.908126], + ] + return spat.Spatial(coords) + + +def test_polygon_fmt(poly): + obs = poly.fmt_for_CMR() + exp = "-86.622742,-74.908126,-86.561712,-74.870913,-86.868859,-74.730522,-86.962905,-74.605038,-89.02594,-74.316754,-89.630517,-74.192147,-89.830808,-74.065919,-90.746478,-73.956258,-91.668214,-74.023169,-92.049815,-73.929387,-93.420791,-73.929327,-93.997163,-73.882768,-94.277701,-73.714183,-95.133017,-73.966355,-96.513501,-74.127404,-99.889802,-74.085347,-100.114438,-74.019422,-100.355131,-74.080906,-100.462734,-74.240864,-100.827076,-74.373988,-101.795349,-74.369597,-102.424826,-74.497263,-101.188725,-74.7179,-101.564382,-75.02971,-103.37484,-75.273725,-103.914847,-75.426057,-104.012128,-75.5223,-103.029452,-75.748774,-102.350567,-75.749245,-101.837882,-75.943066,-101.899461,-76.014086,-101.280944,-76.192769,-101.325735,-76.246168,-101.190803,-76.27106,-101.250474,-76.342292,-101.175067,-76.345822,-101.402436,-76.52035,-101.326063,-76.523929,-101.449791,-76.666392,-101.310795,-76.691373,-101.357407,-76.744819,-101.217404,-76.769752,-101.295133,-76.85887,-101.058051,-76.962123,-100.447336,-77.117686,-98.433698,-77.320866,-97.28308,-77.355688,-97.491148,-77.423178,-96.514174,-77.485919,-96.552494,-77.558236,-96.384656,-77.562336,-96.441516,-77.670857,-97.139363,-77.836566,-97.193451,-77.926901,-97.64271,-78.080044,-96.297869,-78.388943,-96.327803,-78.44329,-95.721466,-78.511065,-95.748962,-78.565482,-94.940425,-78.617072,-94.988611,-78.726066,-94.911669,-78.763976,-95.609268,-78.843079,-95.637038,-78.897535,-95.37191,-78.9391,-95.693408,-79.006456,-95.269903,-79.124145,-95.323729,-79.233172,-95.430206,-79.249633,-95.155505,-79.291032,-95.191045,-79.363748,-94.81352,-79.406486,-94.847075,-79.479253,-94.747448,-79.48078,-94.772403,-79.535367,-93.90411,-79.638844,-93.843651,-79.749409,-93.967323,-79.802836,-93.788723,-79.87821,-93.816393,-79.951128,-93.230546,-80.085534,-91.707475,-79.87748,-91.801545,-79.822143,-91.488897,-79.805457,-91.465152,-79.641131,-90.447349,-79.5894,-90.545492,-79.534464,-90.042319,-79.37062,-90.140775,-79.334083,-90.041814,-79.24285,-88.982186,-79.076903,-90.230262,-78.914333,-90.32191,-78.804808,-90.689626,-78.676516,-91.150024,-78.638589,-92.035347,-78.414844,-92.106013,-78.30491,-91.651645,-78.271472,-91.365784,-78.127206,-91.188783,-78.128018,-91.090167,-78.019109,-90.737076,-77.983849,-90.909191,-77.946905,-90.732603,-77.911009,-90.727088,-77.819973,-91.070502,-77.800626,-91.14118,-77.636469,-91.90279,-77.613923,-91.984627,-77.595116,-91.972963,-77.522365,-92.466819,-77.463587,-92.199521,-77.374914,-92.352136,-77.300761,-92.335283,-77.209895,-91.434206,-77.234653,-91.426015,-77.16193,-91.015545,-77.145686,-91.008355,-77.054784,-91.086397,-77.018096,-91.647835,-76.97871,-91.640906,-76.924199,-91.873848,-76.868024,-91.779021,-76.759619,-90.823937,-76.710073,-90.345113,-76.52953,-86.988029,-75.856983,-86.945563,-75.711143,-86.872234,-75.710165,-87.034102,-75.63967,-86.965004,-75.620616,-87.075115,-75.440545,-87.003154,-75.439609,-87.021872,-75.349129,-86.835058,-75.219586,-86.850654,-75.147247,-86.717729,-75.109052,-86.737771,-75.018662,-86.602149,-74.998483,-86.622742,-74.908126" + assert obs == exp + + +def test_boundingshape_fmt(poly): + obs = poly.fmt_for_EGI() + exp = '{"type":"FeatureCollection","features":[{"id":"0","type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.622742,-74.908126],[-86.553377,-74.907049],[-86.561712,-74.870913],[-86.63091,-74.871988],[-86.647127,-74.799719],[-86.716003,-74.800766],[-86.723889,-74.764633],[-86.792609,-74.765656],[-86.800293,-74.729523],[-86.868859,-74.730522],[-86.887503,-74.640195],[-86.955671,-74.641167],[-86.962905,-74.605038],[-87.03092,-74.605986],[-87.034444,-74.587922],[-87.238298,-74.590633],[-87.241573,-74.572566],[-87.513164,-74.575876],[-87.51611,-74.557806],[-87.583946,-74.558579],[-87.586805,-74.540508],[-87.654567,-74.541259],[-87.65734,-74.523188],[-87.792724,-74.524624],[-87.79533,-74.506552],[-87.862952,-74.507237],[-87.865472,-74.489165],[-87.93302,-74.489828],[-87.935456,-74.471756],[-88.07041,-74.473017],[-88.072681,-74.454944],[-88.140087,-74.455541],[-88.142273,-74.437468],[-88.276942,-74.438598],[-88.278965,-74.420525],[-88.346228,-74.421057],[-88.348167,-74.402984],[-88.482549,-74.403984],[-88.484327,-74.38591],[-88.618567,-74.386824],[-88.620184,-74.368749],[-88.687231,-74.369174],[-88.688766,-74.3511],[-88.822715,-74.351885],[-88.82409,-74.333811],[-88.890991,-74.334171],[-88.892285,-74.316097],[-89.02594,-74.316754],[-89.028207,-74.280607],[-89.161562,-74.281178],[-89.162537,-74.263104],[-89.22914,-74.263358],[-89.230036,-74.245285],[-89.296564,-74.245518],[-89.29738,-74.227445],[-89.430287,-74.227847],[-89.430947,-74.209775],[-89.563707,-74.210092],[-89.564212,-74.19202],[-89.630517,-74.192147],[-89.63137,-74.156006],[-89.697523,-74.156112],[-89.69822,-74.119973],[-89.764221,-74.120058],[-89.764492,-74.10199],[-89.830418,-74.102053],[-89.830808,-74.065919],[-90.028133,-74.065986],[-90.028101,-74.04792],[-90.1595,-74.047861],[-90.159318,-74.029795],[-90.290565,-74.029653],[-90.290232,-74.011589],[-90.486872,-74.011222],[-90.486316,-73.993159],[-90.551785,-73.992995],[-90.551155,-73.974933],[-90.74733,-73.974319],[-90.746478,-73.956258],[-90.811791,-73.956012],[-90.812717,-73.974073],[-90.878103,-73.973806],[-90.879106,-73.991867],[-91.01002,-73.991272],[-91.011175,-74.009332],[-91.076703,-74.009003],[-91.077936,-74.027065],[-91.668214,-74.023169],[-91.666307,-74.005112],[-91.731798,-74.004576],[-91.729821,-73.986521],[-91.795233,-73.985966],[-91.793186,-73.967912],[-91.923848,-73.96674],[-91.921656,-73.948689],[-92.05215,-73.947436],[-92.049815,-73.929387],[-92.114979,-73.92873],[-92.117389,-73.946779],[-93.030081,-73.935424],[-93.033533,-73.95346],[-93.098746,-73.952494],[-93.095219,-73.934459],[-93.420791,-73.929327],[-93.416904,-73.911299],[-93.546925,-73.909105],[-93.5429,-73.89108],[-93.997163,-73.882768],[-93.992635,-73.864754],[-94.057417,-73.863487],[-94.052828,-73.845474],[-94.117527,-73.844188],[-94.103602,-73.79016],[-94.168073,-73.788858],[-94.158698,-73.752845],[-94.223015,-73.751526],[-94.213539,-73.715519],[-94.277701,-73.714183],[-94.287321,-73.750186],[-94.351616,-73.748827],[-94.356514,-73.766828],[-94.420869,-73.765446],[-94.430842,-73.801447],[-94.559808,-73.798617],[-94.564955,-73.816615],[-94.629493,-73.815168],[-94.634725,-73.833165],[-94.699323,-73.831696],[-94.704639,-73.849692],[-94.769297,-73.848201],[-94.774698,-73.866196],[-94.839417,-73.864683],[-94.844902,-73.882677],[-94.909681,-73.881141],[-94.915251,-73.899134],[-94.980091,-73.897576],[-94.985747,-73.915568],[-95.050646,-73.913988],[-95.056388,-73.931978],[-95.121348,-73.930376],[-95.133017,-73.966355],[-95.263189,-73.963082],[-95.26919,-73.981068],[-95.399454,-73.97771],[-95.405616,-73.995692],[-95.535971,-73.992248],[-95.542294,-74.010228],[-95.672738,-74.006697],[-95.679223,-74.024673],[-95.809755,-74.021057],[-95.816402,-74.039029],[-95.947021,-74.035326],[-95.95383,-74.053295],[-96.149863,-74.047581],[-96.156909,-74.065543],[-96.222295,-74.063595],[-96.229432,-74.081555],[-96.294875,-74.079584],[-96.302101,-74.097543],[-96.367602,-74.095549],[-96.374919,-74.113506],[-96.506019,-74.109452],[-96.513501,-74.127404],[-96.775789,-74.119041],[-96.768011,-74.101099],[-96.833465,-74.098959],[-96.825632,-74.08102],[-97.021665,-74.074486],[-97.02972,-74.092418],[-97.095101,-74.090197],[-97.103247,-74.108126],[-97.234101,-74.103616],[-97.242413,-74.121541],[-97.438772,-74.114615],[-97.447324,-74.132532],[-97.512812,-74.13018],[-97.521457,-74.148094],[-97.783502,-74.138469],[-97.774563,-74.120566],[-98.035988,-74.110626],[-98.026778,-74.092735],[-98.678122,-74.06649],[-98.688058,-74.08435],[-99.208094,-74.061869],[-99.218628,-74.079702],[-99.672911,-74.058947],[-99.68397,-74.076757],[-99.878504,-74.067549],[-99.889802,-74.085347],[-99.954667,-74.082234],[-99.943298,-74.064439],[-100.008066,-74.061309],[-99.996651,-74.043518],[-100.061323,-74.040372],[-100.049863,-74.022585],[-100.114438,-74.019422],[-100.125968,-74.037206],[-100.190588,-74.03402],[-100.213868,-74.06958],[-100.278602,-74.066367],[-100.290352,-74.084143],[-100.355131,-74.080906],[-100.462734,-74.240864],[-100.528129,-74.237572],[-100.552486,-74.273111],[-100.617997,-74.26979],[-100.642611,-74.305321],[-100.708238,-74.301973],[-100.72066,-74.319735],[-100.786332,-74.316362],[-100.827076,-74.373988],[-100.925725,-74.378623],[-101.050277,-74.385754],[-101.126055,-74.400282],[-101.200663,-74.403148],[-101.276679,-74.412744],[-101.358339,-74.410301],[-101.433665,-74.404266],[-101.572267,-74.390817],[-101.698034,-74.375051],[-101.795349,-74.369597],[-101.914922,-74.383364],[-101.942992,-74.405238],[-101.986657,-74.414487],[-102.029215,-74.421347],[-102.080455,-74.419386],[-102.110682,-74.429878],[-102.150282,-74.438359],[-102.185211,-74.450043],[-102.236421,-74.463717],[-102.280808,-74.473374],[-102.377212,-74.483896],[-102.424826,-74.497263],[-102.411915,-74.510518],[-102.339743,-74.51083],[-102.264411,-74.519626],[-102.090552,-74.553133],[-102.035597,-74.564212],[-102.010395,-74.580201],[-102.026749,-74.590285],[-102.032573,-74.595827],[-101.986726,-74.595483],[-101.933735,-74.601768],[-101.870395,-74.608983],[-101.794801,-74.615021],[-101.781287,-74.617603],[-101.728673,-74.621731],[-101.695894,-74.628422],[-101.678978,-74.633321],[-101.676385,-74.635907],[-101.647793,-74.639151],[-101.627933,-74.648117],[-101.570915,-74.655354],[-101.545802,-74.657827],[-101.530932,-74.656493],[-101.482989,-74.660146],[-101.462601,-74.674445],[-101.416381,-74.679976],[-101.396392,-74.67954],[-101.364701,-74.681592],[-101.351676,-74.691805],[-101.306089,-74.693851],[-101.275428,-74.693637],[-101.254074,-74.700252],[-101.238372,-74.70027],[-101.230248,-74.703234],[-101.232933,-74.706803],[-101.219968,-74.709239],[-101.207959,-74.716895],[-101.188725,-74.7179],[-101.197349,-74.72643],[-101.200426,-74.734469],[-101.212936,-74.740259],[-101.216307,-74.748673],[-101.222641,-74.763963],[-101.240613,-74.770054],[-101.250447,-74.777156],[-101.257733,-74.779767],[-101.256493,-74.781809],[-101.267741,-74.78708],[-101.251822,-74.792086],[-101.259243,-74.798558],[-101.27464,-74.804247],[-101.276851,-74.808624],[-101.29282,-74.816401],[-101.312982,-74.826333],[-101.338827,-74.838164],[-101.363063,-74.853621],[-101.371447,-74.860874],[-101.391177,-74.870096],[-101.399072,-74.882138],[-101.420557,-74.891146],[-101.455398,-74.908855],[-101.469959,-74.921526],[-101.489949,-74.940509],[-101.549303,-74.990901],[-101.531499,-75.000643],[-101.547244,-75.015213],[-101.564382,-75.02971],[-101.631989,-75.054005],[-101.723655,-75.079577],[-101.726414,-75.090073],[-101.766389,-75.098945],[-101.821333,-75.103337],[-101.896684,-75.109917],[-101.923326,-75.111044],[-101.953576,-75.113073],[-101.969076,-75.11627],[-102.013199,-75.12121],[-102.040635,-75.126691],[-102.068876,-75.13139],[-102.113853,-75.130386],[-102.157455,-75.12945],[-102.223828,-75.128342],[-102.266406,-75.132957],[-102.34262,-75.146716],[-102.378744,-75.152045],[-102.511333,-75.159268],[-102.560626,-75.159773],[-102.607491,-75.160775],[-102.656346,-75.16239],[-102.744295,-75.17242],[-102.789524,-75.181222],[-102.825705,-75.184646],[-102.84957,-75.188785],[-102.873449,-75.192921],[-102.898283,-75.198106],[-102.921448,-75.203018],[-102.956754,-75.210167],[-102.981295,-75.215486],[-103.042136,-75.231576],[-103.086408,-75.237813],[-103.182394,-75.249825],[-103.224839,-75.25812],[-103.284801,-75.264374],[-103.37484,-75.273725],[-103.456714,-75.307204],[-103.509054,-75.329656],[-103.549124,-75.339049],[-103.639472,-75.360155],[-103.643531,-75.376578],[-103.74731,-75.394972],[-103.814359,-75.41156],[-103.846549,-75.420428],[-103.914847,-75.426057],[-103.942283,-75.45195],[-104.012128,-75.5223],[-103.941793,-75.526678],[-103.976811,-75.56186],[-103.90627,-75.566227],[-103.923762,-75.583823],[-103.428203,-75.613826],[-103.445162,-75.631459],[-103.303027,-75.639846],[-103.336738,-75.675132],[-103.265441,-75.679303],[-103.282275,-75.696951],[-103.210852,-75.701106],[-103.227644,-75.718758],[-103.012872,-75.731107],[-103.029452,-75.748774],[-102.957693,-75.752851],[-102.941198,-75.735179],[-102.869482,-75.739229],[-102.853113,-75.72155],[-102.70973,-75.729573],[-102.693572,-75.711884],[-102.478451,-75.723738],[-102.494353,-75.741443],[-102.350567,-75.749245],[-102.366338,-75.766959],[-102.294299,-75.770832],[-102.310023,-75.78855],[-102.237859,-75.792406],[-102.253535,-75.810129],[-102.181245,-75.813967],[-102.196874,-75.831696],[-102.124457,-75.835516],[-102.140038,-75.853249],[-102.067494,-75.857052],[-102.083027,-75.87479],[-102.010356,-75.878575],[-102.02584,-75.896317],[-101.953041,-75.900085],[-101.968477,-75.917832],[-101.89555,-75.921582],[-101.910936,-75.939333],[-101.837882,-75.943066],[-101.899461,-76.014086],[-101.752518,-76.021523],[-101.767832,-76.039287],[-101.694211,-76.042976],[-101.709473,-76.060745],[-101.635722,-76.064416],[-101.650932,-76.082189],[-101.577051,-76.085842],[-101.59221,-76.10362],[-101.518198,-76.107255],[-101.533304,-76.125037],[-101.459161,-76.128654],[-101.474214,-76.14644],[-101.399941,-76.150039],[-101.429978,-76.185621],[-101.280944,-76.192769],[-101.325735,-76.246168],[-101.250878,-76.249721],[-101.265793,-76.267525],[-101.190803,-76.27106],[-101.250474,-76.342292],[-101.175067,-76.345822],[-101.265184,-76.45269],[-101.341168,-76.449131],[-101.402436,-76.52035],[-101.326063,-76.523929],[-101.449791,-76.666392],[-101.372587,-76.669986],[-101.388141,-76.687797],[-101.310795,-76.691373],[-101.357407,-76.744819],[-101.279717,-76.748385],[-101.295238,-76.766205],[-101.217404,-76.769752],[-101.295133,-76.85887],[-101.216746,-76.862418],[-101.232316,-76.880245],[-101.153783,-76.883774],[-101.169293,-76.901606],[-101.090613,-76.905114],[-101.121553,-76.940788],[-101.042622,-76.944282],[-101.058051,-76.962123],[-100.899853,-76.969047],[-100.915114,-76.986897],[-100.835847,-76.990327],[-100.851044,-77.008182],[-100.692171,-77.014978],[-100.707198,-77.032842],[-100.627593,-77.036208],[-100.642555,-77.054077],[-100.483005,-77.060743],[-100.512625,-77.096499],[-100.432572,-77.099804],[-100.447336,-77.117686],[-99.965515,-77.137019],[-99.979666,-77.154929],[-99.818518,-77.161182],[-99.832489,-77.179101],[-99.509284,-77.191321],[-99.522851,-77.209257],[-99.036233,-77.226854],[-99.049167,-77.244815],[-98.642079,-77.2588],[-98.666926,-77.294764],[-98.421564,-77.302872],[-98.433698,-77.320866],[-97.28308,-77.355688],[-97.293628,-77.373733],[-97.376139,-77.371411],[-97.397559,-77.407495],[-97.480274,-77.405139],[-97.491148,-77.423178],[-97.325453,-77.42787],[-97.336123,-77.445916],[-97.253111,-77.448226],[-97.263693,-77.466276],[-96.680937,-77.481738],[-96.671187,-77.463665],[-96.58794,-77.465766],[-96.59757,-77.483841],[-96.514174,-77.485919],[-96.552494,-77.558236],[-96.384656,-77.562336],[-96.441516,-77.670857],[-96.526184,-77.668801],[-96.535882,-77.686886],[-96.620645,-77.6848],[-96.640377,-77.720964],[-96.725358,-77.718845],[-96.765675,-77.791162],[-96.851127,-77.789004],[-96.861407,-77.80708],[-96.946954,-77.804891],[-96.967859,-77.841038],[-97.139363,-77.836566],[-97.193451,-77.926901],[-97.27979,-77.924608],[-97.313022,-77.9788],[-97.399713,-77.976468],[-97.410987,-77.994529],[-97.497773,-77.992166],[-97.520682,-78.02828],[-97.607693,-78.025883],[-97.64271,-78.080044],[-97.555308,-78.082453],[-97.566921,-78.10051],[-97.391749,-78.105253],[-97.403134,-78.123318],[-97.315364,-78.125651],[-97.326651,-78.14372],[-97.238713,-78.14603],[-97.272383,-78.200248],[-97.184011,-78.20254],[-97.19517,-78.220617],[-97.018054,-78.225125],[-97.028977,-78.243209],[-96.940233,-78.245425],[-96.961909,-78.2816],[-96.872859,-78.283794],[-96.883611,-78.301886],[-96.794392,-78.304055],[-96.80504,-78.32215],[-96.536773,-78.328501],[-96.547041,-78.346606],[-96.457416,-78.34867],[-96.467577,-78.366779],[-96.377781,-78.368817],[-96.387836,-78.386929],[-96.297869,-78.388943],[-96.327803,-78.44329],[-96.146934,-78.447251],[-96.156692,-78.465373],[-96.06607,-78.467314],[-96.075717,-78.48544],[-95.803243,-78.491098],[-95.812493,-78.509234],[-95.721466,-78.511065],[-95.748962,-78.565482],[-95.474413,-78.57083],[-95.465652,-78.552682],[-95.191285,-78.557761],[-95.207964,-78.594073],[-95.024337,-78.597325],[-95.032424,-78.615487],[-94.940425,-78.617072],[-94.988611,-78.726066],[-94.895698,-78.727637],[-94.911669,-78.763976],[-95.004882,-78.7624],[-95.013057,-78.780567],[-95.106394,-78.778959],[-95.114747,-78.797124],[-95.301642,-78.793813],[-95.310325,-78.811973],[-95.403881,-78.81027],[-95.412744,-78.828427],[-95.506423,-78.826692],[-95.515467,-78.844846],[-95.609268,-78.843079],[-95.637038,-78.897535],[-95.542778,-78.899312],[-95.551942,-78.917468],[-95.457498,-78.919218],[-95.466538,-78.937377],[-95.37191,-78.9391],[-95.380824,-78.957262],[-95.475607,-78.955536],[-95.484707,-78.973695],[-95.579615,-78.971937],[-95.588901,-78.990093],[-95.683935,-78.988302],[-95.693408,-79.006456],[-95.598218,-79.00825],[-95.616944,-79.044565],[-95.425842,-79.048076],[-95.453215,-79.102568],[-95.357141,-79.104287],[-95.366167,-79.122454],[-95.269903,-79.124145],[-95.323729,-79.233172],[-95.420964,-79.231464],[-95.430206,-79.249633],[-95.332806,-79.251344],[-95.341915,-79.269517],[-95.244321,-79.271201],[-95.253295,-79.289376],[-95.155505,-79.291032],[-95.191045,-79.363748],[-95.092557,-79.365384],[-95.101351,-79.383566],[-94.903948,-79.38675],[-94.912434,-79.404938],[-94.81352,-79.406486],[-94.847075,-79.479253],[-94.747448,-79.48078],[-94.772403,-79.535367],[-94.672229,-79.53687],[-94.680431,-79.555069],[-94.379215,-79.559395],[-94.386921,-79.577602],[-94.185623,-79.580332],[-94.193003,-79.598544],[-94.092139,-79.599863],[-94.099369,-79.618077],[-93.998302,-79.619367],[-94.005379,-79.637584],[-93.90411,-79.638844],[-93.924956,-79.693505],[-93.823125,-79.694739],[-93.843651,-79.749409],[-93.946026,-79.748169],[-93.967323,-79.802836],[-93.864399,-79.804083],[-93.892414,-79.876987],[-93.788723,-79.87821],[-93.816393,-79.951128],[-93.711924,-79.952328],[-93.718714,-79.97056],[-93.61403,-79.971729],[-93.620655,-79.989964],[-93.515756,-79.991101],[-93.522213,-80.009338],[-93.417099,-80.010444],[-93.429699,-80.046925],[-93.324176,-80.048001],[-93.336481,-80.084487],[-93.230546,-80.085534],[-93.224577,-80.067288],[-93.118814,-80.0683],[-93.113062,-80.050053],[-93.007473,-80.051029],[-93.001935,-80.032781],[-92.896519,-80.033721],[-92.891195,-80.015471],[-92.785952,-80.016376],[-92.78084,-79.998126],[-92.570685,-79.999832],[-92.565975,-79.981578],[-92.461064,-79.982379],[-92.456562,-79.964125],[-92.351826,-79.964891],[-92.347532,-79.946636],[-92.138393,-79.948066],[-92.134495,-79.929808],[-92.030095,-79.930472],[-92.026401,-79.912214],[-91.922176,-79.912843],[-91.918685,-79.894584],[-91.814637,-79.895179],[-91.811346,-79.876919],[-91.707475,-79.87748],[-91.704384,-79.85922],[-91.808067,-79.85866],[-91.801545,-79.822143],[-91.698235,-79.822701],[-91.695178,-79.804442],[-91.488897,-79.805457],[-91.465152,-79.641131],[-91.36364,-79.641582],[-91.361228,-79.623325],[-91.259887,-79.623743],[-91.257663,-79.605486],[-91.055316,-79.606223],[-91.053456,-79.587965],[-90.447349,-79.5894],[-90.445777,-79.55288],[-90.546451,-79.552722],[-90.545492,-79.534464],[-90.444995,-79.534621],[-90.442666,-79.479848],[-90.342693,-79.479973],[-90.341501,-79.443459],[-90.241873,-79.443552],[-90.240618,-79.388785],[-90.141505,-79.388846],[-90.141261,-79.370591],[-90.042319,-79.37062],[-90.042173,-79.334112],[-90.140775,-79.334083],[-90.140292,-79.297577],[-90.042029,-79.297606],[-90.041814,-79.24285],[-89.846293,-79.242815],[-89.846555,-79.224564],[-89.748962,-79.2245],[-89.749389,-79.20625],[-89.651963,-79.206154],[-89.652554,-79.187905],[-89.555296,-79.187779],[-89.55605,-79.16953],[-89.458959,-79.169374],[-89.460787,-79.132879],[-89.364027,-79.132691],[-89.365099,-79.114445],[-89.268506,-79.114228],[-89.269737,-79.095982],[-89.173311,-79.095734],[-89.1747,-79.07749],[-88.982186,-79.076903],[-88.983893,-79.05866],[-89.272187,-79.059493],[-89.273406,-79.041249],[-89.465302,-79.04165],[-89.466196,-79.023406],[-89.561988,-79.023561],[-89.562719,-79.005317],[-89.75399,-79.005535],[-89.754809,-78.969048],[-89.850129,-78.969111],[-89.850378,-78.950868],[-89.94554,-78.950901],[-89.94563,-78.932659],[-90.040635,-78.932661],[-90.040568,-78.914419],[-90.230262,-78.914333],[-90.229502,-78.877852],[-90.324034,-78.877764],[-90.32191,-78.804808],[-90.41582,-78.804691],[-90.414462,-78.768217],[-90.508064,-78.76807],[-90.506409,-78.731598],[-90.599703,-78.731422],[-90.598728,-78.713188],[-90.691868,-78.712982],[-90.689626,-78.676516],[-90.78246,-78.676281],[-90.781194,-78.658049],[-90.873874,-78.657786],[-90.872462,-78.639554],[-91.150024,-78.638589],[-91.14817,-78.62036],[-91.24053,-78.61998],[-91.238533,-78.601752],[-91.330738,-78.601343],[-91.324343,-78.546665],[-91.507847,-78.545764],[-91.505436,-78.52754],[-91.59703,-78.527046],[-91.591939,-78.490602],[-91.683233,-78.490081],[-91.680555,-78.471861],[-91.771695,-78.471312],[-91.76888,-78.453093],[-91.859867,-78.452516],[-91.856918,-78.434298],[-91.947751,-78.433693],[-91.944667,-78.415477],[-92.035347,-78.414844],[-92.025726,-78.360203],[-92.115968,-78.359544],[-92.106013,-78.30491],[-92.016194,-78.305566],[-92.013037,-78.287355],[-91.833652,-78.288578],[-91.830785,-78.270365],[-91.651645,-78.271472],[-91.643932,-78.216832],[-91.554767,-78.217341],[-91.552351,-78.199128],[-91.463317,-78.199607],[-91.458782,-78.163181],[-91.370017,-78.163631],[-91.365784,-78.127206],[-91.188783,-78.128018],[-91.181481,-78.05517],[-91.093515,-78.055531],[-91.090167,-78.019109],[-90.914759,-78.019746],[-90.91336,-78.001535],[-90.825784,-78.001812],[-90.824523,-77.983601],[-90.737076,-77.983849],[-90.735953,-77.965638],[-90.823267,-77.96539],[-90.822014,-77.94718],[-90.909191,-77.946905],[-90.90781,-77.928697],[-90.820765,-77.928971],[-90.81952,-77.910763],[-90.732603,-77.911009],[-90.727088,-77.819973],[-90.81335,-77.819728],[-90.812128,-77.801523],[-91.070502,-77.800626],[-91.062516,-77.709615],[-91.14799,-77.709264],[-91.14118,-77.636469],[-91.480993,-77.634803],[-91.4788,-77.616608],[-91.90279,-77.613923],[-91.899978,-77.595733],[-91.984627,-77.595116],[-91.972963,-77.522365],[-92.141243,-77.521058],[-92.138102,-77.502874],[-92.390081,-77.500717],[-92.386581,-77.482537],[-92.470431,-77.481766],[-92.466819,-77.463587],[-92.383091,-77.464357],[-92.369233,-77.391642],[-92.285981,-77.392381],[-92.282662,-77.374202],[-92.199521,-77.374914],[-92.193152,-77.338557],[-92.276054,-77.337847],[-92.269483,-77.301495],[-92.352136,-77.300761],[-92.335283,-77.209895],[-92.08907,-77.212001],[-92.092069,-77.230176],[-91.434206,-77.234653],[-91.426015,-77.16193],[-91.180618,-77.16317],[-91.178934,-77.144989],[-91.015545,-77.145686],[-91.008355,-77.054784],[-91.089474,-77.054451],[-91.086397,-77.018096],[-91.167283,-77.017738],[-91.165637,-76.999562],[-91.327166,-76.998771],[-91.325297,-76.980597],[-91.647835,-76.97871],[-91.640906,-76.924199],[-91.721186,-76.923666],[-91.716375,-76.887329],[-91.796424,-76.886772],[-91.793917,-76.868605],[-91.873848,-76.868024],[-91.863446,-76.795367],[-91.783959,-76.795946],[-91.779021,-76.759619],[-91.699746,-76.760171],[-91.697397,-76.742008],[-91.539047,-76.743034],[-91.536922,-76.72487],[-91.062397,-76.727343],[-91.060932,-76.709176],[-90.823937,-76.710073],[-90.822803,-76.691906],[-90.743907,-76.692154],[-90.742884,-76.673987],[-90.664093,-76.67421],[-90.662272,-76.637877],[-90.583695,-76.638075],[-90.582098,-76.601744],[-90.503734,-76.601916],[-90.50236,-76.565588],[-90.424208,-76.565734],[-90.42363,-76.547571],[-90.345583,-76.547693],[-90.345113,-76.52953],[-90.111283,-76.529747],[-90.111131,-76.511584],[-90.033293,-76.511607],[-90.033248,-76.493445],[-89.955514,-76.493443],[-89.955575,-76.475282],[-89.877947,-76.475255],[-89.878112,-76.457095],[-89.80059,-76.457044],[-89.800859,-76.438884],[-89.723443,-76.438808],[-89.723816,-76.420649],[-89.569195,-76.420425],[-89.569775,-76.402267],[-89.492571,-76.402118],[-89.493254,-76.383961],[-89.416155,-76.383788],[-89.41694,-76.365631],[-89.339947,-76.365434],[-89.340833,-76.347279],[-89.263946,-76.347058],[-89.264932,-76.328903],[-89.111372,-76.328389],[-89.112561,-76.310235],[-89.035889,-76.309942],[-89.037177,-76.29179],[-88.960611,-76.291473],[-88.961998,-76.273321],[-88.885537,-76.272981],[-88.887022,-76.254831],[-88.810667,-76.254466],[-88.81225,-76.236317],[-88.736001,-76.235929],[-88.737681,-76.217781],[-88.585399,-76.216933],[-88.587276,-76.198787],[-88.511244,-76.198328],[-88.513217,-76.180183],[-88.43729,-76.1797],[-88.439359,-76.161557],[-88.363537,-76.161051],[-88.365701,-76.142909],[-88.214276,-76.141826],[-88.216633,-76.123686],[-88.14103,-76.123109],[-88.143481,-76.104971],[-88.067983,-76.104371],[-88.070527,-76.086234],[-87.995135,-76.085611],[-87.997771,-76.067476],[-87.922485,-76.06683],[-87.925213,-76.048696],[-87.774861,-76.047334],[-87.777778,-76.029203],[-87.627653,-76.027748],[-87.633856,-75.991491],[-87.559001,-75.99073],[-87.562188,-75.972604],[-87.487439,-75.97182],[-87.490715,-75.953695],[-87.341438,-75.95206],[-87.344899,-75.933938],[-87.27037,-75.933086],[-87.273919,-75.914965],[-87.199496,-75.914091],[-87.203132,-75.895972],[-87.128815,-75.895075],[-87.132537,-75.876959],[-87.058326,-75.87604],[-87.062135,-75.857925],[-86.988029,-75.856983],[-86.999681,-75.802647],[-86.925871,-75.801686],[-86.945563,-75.711143],[-86.872234,-75.710165],[-86.884208,-75.655851],[-86.957257,-75.656825],[-86.961136,-75.63872],[-87.034102,-75.63967],[-87.037878,-75.621564],[-86.965004,-75.620616],[-86.98038,-75.548205],[-87.052886,-75.549149],[-87.075115,-75.440545],[-87.003154,-75.439609],[-87.021872,-75.349129],[-86.950368,-75.348177],[-86.965529,-75.27581],[-86.894389,-75.274839],[-86.905925,-75.220574],[-86.835058,-75.219586],[-86.850654,-75.147247],[-86.780144,-75.14624],[-86.788057,-75.110077],[-86.717729,-75.109052],[-86.737771,-75.018662],[-86.667881,-75.01762],[-86.671945,-74.999545],[-86.602149,-74.998483],[-86.622742,-74.908126]]]},"bbox":[-104.012128,-80.085534,-86.553377,-73.714183]}],"bbox":[-104.012128,-80.085534,-86.553377,-73.714183]}' + assert obs == exp From dfa21eb4f483babecaf503a89d749f723d297339 Mon Sep 17 00:00:00 2001 From: Jessica Scheick Date: Fri, 28 Oct 2022 09:13:00 -0400 Subject: [PATCH 41/44] update tracking + bib data (#383) * add sorting to pypi stats manipulations * update bib list --- doc/source/tracking/icepyx_pubs.bib | 20 + doc/source/tracking/pypistats/downloads.svg | 1419 ++--- .../tracking/pypistats/downloads_data.csv | 178 +- .../tracking/pypistats/get_pypi_stats.py | 12 +- .../tracking/pypistats/sys_downloads_data.csv | 230 +- doc/source/tracking/traffic/clones.csv | 38 + doc/source/tracking/traffic/plots.svg | 4850 +++++++++-------- .../tracking/traffic/traffic_data_mgmt.py | 2 +- doc/source/tracking/traffic/views.csv | 48 + 9 files changed, 3615 insertions(+), 3182 deletions(-) diff --git a/doc/source/tracking/icepyx_pubs.bib b/doc/source/tracking/icepyx_pubs.bib index ce324e491..fcc5dddea 100644 --- a/doc/source/tracking/icepyx_pubs.bib +++ b/doc/source/tracking/icepyx_pubs.bib @@ -136,3 +136,23 @@ @Article{Li:2020 URL = {https://tc.copernicus.org/articles/14/3629/2020/}, DOI = {10.5194/tc-14-3629-2020} } + + +% ######### Research/Articles using (but not citing) icepyx ################ + + +@article{Sothe:2022, +title={Spatially Continuous Mapping of Forest Canopy Height in Canada by Combining GEDI and ICESat-2 with PALSAR and Sentinel}, +volume={14}, +ISSN={2072-4292}, +url={http://dx.doi.org/10.3390/rs14205158}, +DOI={10.3390/rs14205158}, +number={20}, +journal={Remote Sensing}, +publisher={MDPI AG}, +author={Sothe, Camile and Gonsamo, Alemu and Lourenço, Ricardo B. and Kurz, Werner A. and Snider, James}, +year={2022}, +month={Oct}, +pages={5158}, +note={Attribution to icepyx from 15 Oct 2022 Twitter post, https://twitter.com/rblourenco/status/1581320878511382528} +} diff --git a/doc/source/tracking/pypistats/downloads.svg b/doc/source/tracking/pypistats/downloads.svg index a7b02d4ed..5e7f74863 100644 --- a/doc/source/tracking/pypistats/downloads.svg +++ b/doc/source/tracking/pypistats/downloads.svg @@ -6,11 +6,11 @@ - 2022-09-01T20:57:35.703526 + 2022-10-01T20:58:40.653395 image/svg+xml - Matplotlib v3.5.3, https://matplotlib.org/ + Matplotlib v3.6.0, https://matplotlib.org/ @@ -41,17 +41,17 @@ z - - + - + - + - + - + - + @@ -283,12 +283,12 @@ z - + - + - + - + @@ -339,12 +339,12 @@ z - + - + @@ -361,12 +361,12 @@ z - + - + - + - + @@ -431,7 +431,7 @@ z - + - - + - + @@ -568,12 +568,12 @@ L -3.5 0 - + - + @@ -582,12 +582,12 @@ L -3.5 0 - + - + - + - + @@ -631,12 +631,12 @@ z - + - + @@ -645,669 +645,696 @@ z +L 116.053803 107.882791 +L 116.74397 119.603721 +L 118.814471 123.12 +L 119.504638 120.775814 +L 120.194805 114.915349 +L 120.884972 121.947907 +L 121.575139 120.775814 +L 122.265306 121.947907 +L 122.955473 96.16186 +L 123.64564 116.087442 +L 124.335807 120.775814 +L 125.025974 114.915349 +L 125.716141 121.947907 +L 126.406308 117.259535 +L 127.096475 116.087442 +L 127.786642 123.12 +L 128.476809 120.775814 +L 129.166976 112.571163 +L 129.857143 114.915349 +L 130.54731 119.603721 +L 131.237477 120.775814 +L 131.927644 120.775814 +L 133.307978 123.12 +L 133.998145 113.743256 +L 134.688312 64.515349 +L 135.378479 117.259535 +L 136.068646 120.775814 +L 136.758813 120.775814 +L 137.44898 118.431628 +L 138.139147 121.947907 +L 138.829314 119.603721 +L 139.519481 123.12 +L 140.209647 120.775814 +L 140.899814 120.775814 +L 141.589981 123.12 +L 142.280148 121.947907 +L 142.970315 119.603721 +L 143.660482 119.603721 +L 144.350649 117.259535 +L 145.040816 123.12 +L 145.730983 123.12 +L 146.42115 121.947907 +L 147.111317 121.947907 +L 147.801484 123.12 +L 148.491651 123.12 +L 149.181818 105.538605 +L 149.871985 118.431628 +L 150.562152 116.087442 +L 151.252319 121.947907 +L 151.942486 118.431628 +L 152.632653 116.087442 +L 153.32282 118.431628 +L 154.012987 123.12 +L 154.703154 121.947907 +L 155.393321 118.431628 +L 156.083488 123.12 +L 157.463822 120.775814 +L 158.153989 116.087442 +L 159.534323 123.12 +L 160.22449 119.603721 +L 160.914657 118.431628 +L 161.604824 123.12 +L 162.294991 119.603721 +L 162.985158 123.12 +L 163.675325 121.947907 +L 164.365492 118.431628 +L 165.055659 123.12 +L 165.745826 121.947907 +L 166.435993 121.947907 +L 167.12616 123.12 +L 167.816327 118.431628 +L 168.506494 123.12 +L 169.19666 120.775814 +L 170.576994 120.775814 +L 171.267161 119.603721 +L 171.957328 117.259535 +L 172.647495 120.775814 +L 173.337662 117.259535 +L 174.027829 123.12 +L 175.408163 120.775814 +L 176.09833 118.431628 +L 176.788497 121.947907 +L 177.478664 123.12 +L 178.168831 121.947907 +L 178.858998 119.603721 +L 179.549165 120.775814 +L 180.239332 123.12 +L 180.929499 107.882791 +L 181.619666 123.12 +L 182.309833 120.775814 +L 183 119.603721 +L 183.690167 123.12 +L 184.380334 119.603721 +L 185.070501 114.915349 +L 185.760668 120.775814 +L 186.450835 123.12 +L 187.141002 123.12 +L 187.831169 121.947907 +L 188.521336 123.12 +L 189.211503 123.12 +L 189.90167 121.947907 +L 190.591837 121.947907 +L 191.282004 120.775814 +L 191.972171 121.947907 +L 194.042672 118.431628 +L 194.732839 120.775814 +L 195.423006 120.775814 +L 196.80334 118.431628 +L 197.493506 121.947907 +L 198.183673 123.12 +L 198.87384 116.087442 +L 199.564007 121.947907 +L 200.254174 121.947907 +L 200.944341 114.915349 +L 201.634508 120.775814 +L 202.324675 120.775814 +L 203.014842 94.989767 +L 203.705009 118.431628 +L 204.395176 120.775814 +L 205.085343 116.087442 +L 205.77551 121.947907 +L 206.465677 117.259535 +L 207.155844 121.947907 +L 207.846011 114.915349 +L 208.536178 118.431628 +L 209.226345 123.12 +L 209.916512 121.947907 +L 210.606679 109.054884 +L 211.296846 118.431628 +L 211.987013 121.947907 +L 212.67718 123.12 +L 213.367347 123.12 +L 214.057514 114.915349 +L 214.747681 123.12 +L 215.437848 123.12 +L 216.128015 119.603721 +L 216.818182 123.12 +L 217.508349 123.12 +L 218.888683 118.431628 +L 219.57885 123.12 +L 220.269017 120.775814 +L 221.649351 123.12 +L 222.339518 118.431628 +L 223.029685 123.12 +L 223.719852 123.12 +L 224.410019 121.947907 +L 225.100186 123.12 +L 225.790353 123.12 +L 226.480519 118.431628 +L 227.860853 123.12 +L 229.241187 120.775814 +L 229.931354 120.775814 +L 230.621521 121.947907 +L 231.311688 119.603721 +L 232.001855 121.947907 +L 232.692022 123.12 +L 234.072356 123.12 +L 234.762523 118.431628 +L 235.45269 123.12 +L 236.142857 121.947907 +L 236.833024 123.12 +L 237.523191 118.431628 +L 238.213358 120.775814 +L 238.903525 121.947907 +L 239.593692 121.947907 +L 240.283859 119.603721 +L 240.974026 121.947907 +L 241.664193 120.775814 +L 242.35436 120.775814 +L 243.044527 121.947907 +L 243.734694 121.947907 +L 244.424861 123.12 +L 245.115028 116.087442 +L 245.805195 121.947907 +L 246.495362 121.947907 +L 247.185529 123.12 +L 247.875696 121.947907 +L 248.565863 123.12 +L 249.25603 123.12 +L 250.636364 120.775814 +L 251.326531 111.39907 +L 252.016698 114.915349 +L 252.706865 89.129302 +L 253.397032 123.12 +L 254.087199 121.947907 +L 254.777365 116.087442 +L 255.467532 118.431628 +L 256.157699 117.259535 +L 256.847866 107.882791 +L 257.538033 123.12 +L 258.2282 121.947907 +L 258.918367 119.603721 +L 259.608534 116.087442 +L 260.298701 111.39907 +L 260.988868 97.333953 +L 261.679035 106.710698 +L 262.369202 121.947907 +L 263.059369 84.44093 +L 263.749536 105.538605 +L 264.439703 114.915349 +L 265.12987 107.882791 +L 265.820037 118.431628 +L 266.510204 107.882791 +L 267.200371 109.054884 +L 267.890538 106.710698 +L 268.580705 97.333953 +L 269.270872 120.775814 +L 269.961039 116.087442 +L 270.651206 120.775814 +L 271.341373 123.12 +L 272.03154 118.431628 +L 272.721707 123.12 +L 273.411874 120.775814 +L 274.102041 123.12 +L 274.792208 121.947907 +L 275.482375 107.882791 +L 276.172542 120.775814 +L 276.862709 117.259535 +L 277.552876 119.603721 +L 278.243043 118.431628 +L 278.93321 123.12 +L 279.623377 116.087442 +L 280.313544 118.431628 +L 281.003711 121.947907 +L 281.693878 117.259535 +L 282.384045 123.12 +L 283.074212 120.775814 +L 283.764378 123.12 +L 284.454545 119.603721 +L 285.144712 121.947907 +L 285.834879 119.603721 +L 286.525046 118.431628 +L 287.215213 121.947907 +L 288.595547 121.947907 +L 289.285714 119.603721 +L 289.975881 118.431628 +L 290.666048 98.506047 +L 291.356215 100.850233 +L 292.046382 120.775814 +L 292.736549 121.947907 +L 293.426716 117.259535 +L 294.116883 118.431628 +L 294.80705 116.087442 +L 295.497217 121.947907 +L 296.187384 123.12 +L 296.877551 117.259535 +L 297.567718 116.087442 +L 298.257885 112.571163 +L 298.948052 121.947907 +L 299.638219 118.431628 +L 300.328386 121.947907 +L 301.018553 121.947907 +L 301.70872 123.12 +L 303.089054 118.431628 +L 304.469388 123.12 +L 305.159555 120.775814 +L 305.849722 121.947907 +L 306.539889 116.087442 +L 307.230056 113.743256 +L 307.920223 116.087442 +L 308.61039 117.259535 +L 309.300557 114.915349 +L 309.990724 105.538605 +L 310.680891 117.259535 +L 311.371058 119.603721 +L 312.061224 118.431628 +L 312.751391 114.915349 +L 313.441558 106.710698 +L 314.131725 121.947907 +L 314.821892 120.775814 +L 315.512059 123.12 +L 316.202226 113.743256 +L 316.892393 114.915349 +L 317.58256 119.603721 +L 318.272727 112.571163 +L 318.962894 110.226977 +L 319.653061 121.947907 +L 320.343228 121.947907 +L 321.033395 112.571163 +L 321.723562 91.473488 +L 322.413729 107.882791 +L 323.103896 117.259535 +L 323.794063 118.431628 +L 324.48423 118.431628 +L 325.864564 120.775814 +L 326.554731 117.259535 +L 327.244898 117.259535 +L 327.935065 121.947907 +L 328.625232 121.947907 +L 329.315399 120.775814 +L 330.005566 121.947907 +L 330.695733 114.915349 +L 331.3859 114.915349 +L 332.076067 117.259535 +L 332.766234 113.743256 +L 333.456401 105.538605 +L 334.146568 114.915349 +L 334.836735 114.915349 +L 335.526902 120.775814 +L 336.217069 120.775814 +L 336.907236 116.087442 +L 337.597403 123.12 +L 338.28757 103.194419 +L 338.977737 100.850233 +L 339.667904 117.259535 +L 340.358071 118.431628 +L 341.048237 107.882791 +L 341.738404 113.743256 +L 342.428571 120.775814 +L 343.118738 118.431628 +L 343.808905 123.12 +L 344.499072 113.743256 +L 345.189239 98.506047 +L 345.879406 121.947907 +L 346.569573 120.775814 +L 347.949907 123.12 +L 348.640074 119.603721 +L 349.330241 100.850233 +L 350.020408 114.915349 +L 350.710575 121.947907 +L 351.400742 121.947907 +L 352.090909 105.538605 +L 352.781076 120.775814 +L 353.471243 121.947907 +L 354.16141 120.775814 +L 356.922078 120.775814 +L 357.612245 118.431628 +L 358.302412 123.12 +L 358.992579 121.947907 +L 359.682746 121.947907 +L 360.372913 123.12 +L 361.06308 123.12 +L 361.753247 121.947907 +L 362.443414 123.12 +L 363.133581 117.259535 +L 363.823748 121.947907 +L 364.513915 118.431628 +L 365.204082 118.431628 +L 365.894249 116.087442 +L 366.584416 118.431628 +L 367.274583 123.12 +L 367.96475 120.775814 +L 369.345083 120.775814 +L 370.03525 123.12 +L 370.725417 121.947907 +L 371.415584 121.947907 +L 372.105751 119.603721 +L 372.795918 121.947907 +L 374.866419 121.947907 +L 375.556586 82.096744 +L 376.246753 118.431628 +L 376.93692 123.12 +L 377.627087 121.947907 +L 378.317254 119.603721 +L 379.007421 123.12 +L 379.697588 118.431628 +L 380.387755 121.947907 +L 381.077922 117.259535 +L 381.768089 116.087442 +L 382.458256 116.087442 +L 383.148423 114.915349 +L 383.83859 100.850233 +L 384.528757 100.850233 +L 385.218924 116.087442 +L 385.909091 119.603721 +L 386.599258 121.947907 +L 387.289425 104.366512 +L 387.979592 118.431628 +L 388.669759 121.947907 +L 389.359926 121.947907 +L 390.050093 120.775814 +L 390.74026 120.775814 +L 391.430427 121.947907 +L 392.120594 121.947907 +L 392.810761 118.431628 +L 393.500928 123.12 +L 394.191095 121.947907 +L 394.881262 118.431628 +L 395.571429 118.431628 +L 396.261596 120.775814 +L 397.641929 100.850233 +L 398.332096 113.743256 +L 399.022263 112.571163 +L 399.71243 105.538605 +L 400.402597 110.226977 +L 401.782931 112.571163 +L 402.473098 111.39907 +L 403.163265 104.366512 +L 403.853432 107.882791 +L 404.543599 118.431628 +L 405.233766 119.603721 +L 405.923933 117.259535 +L 406.6141 117.259535 +L 407.304267 113.743256 +L 407.994434 116.087442 +L 408.684601 109.054884 +L 409.374768 114.915349 +L 410.064935 116.087442 +L 410.755102 111.39907 +L 411.445269 100.850233 +L 412.135436 111.39907 +L 412.825603 116.087442 +L 414.205937 111.39907 +L 414.896104 116.087442 +L 415.586271 107.882791 +L 416.276438 111.39907 +L 417.656772 120.775814 +L 418.346939 116.087442 +L 419.037106 107.882791 +L 419.727273 120.775814 +L 420.41744 118.431628 +L 421.107607 119.603721 +L 421.797774 114.915349 +L 422.487941 113.743256 +L 423.178108 94.989767 +L 423.868275 91.473488 +L 424.558442 112.571163 +L 425.248609 80.924651 +L 425.938776 120.775814 +L 426.628942 118.431628 +L 427.319109 120.775814 +L 428.009276 90.301395 +L 428.699443 91.473488 +L 430.079777 121.947907 +L 430.769944 118.431628 +L 431.460111 109.054884 +L 432.150278 118.431628 +L 432.840445 118.431628 +L 433.530612 91.473488 +L 434.220779 111.39907 +L 434.910946 114.915349 +L 436.29128 117.259535 +L 436.981447 117.259535 +L 437.671614 114.915349 +L 439.742115 121.947907 +L 440.432282 113.743256 +L 441.122449 121.947907 +L 441.812616 121.947907 +L 443.19295 119.603721 +L 443.883117 123.12 +L 444.573284 119.603721 +L 445.263451 117.259535 +L 445.953618 120.775814 +L 446.643785 121.947907 +L 447.333952 121.947907 +L 448.024119 113.743256 +L 448.714286 123.12 +L 449.404453 97.333953 +L 450.09462 120.775814 +L 450.784787 121.947907 +L 451.474954 118.431628 +L 452.165121 118.431628 +L 452.855288 119.603721 +L 453.545455 121.947907 +L 454.235622 114.915349 +L 454.925788 120.775814 +L 455.615955 118.431628 +L 456.306122 119.603721 +L 456.996289 96.16186 +L 457.686456 120.775814 +L 458.376623 117.259535 +L 459.06679 123.12 +L 459.756957 123.12 +L 460.447124 121.947907 +L 461.137291 113.743256 +L 461.827458 121.947907 +L 462.517625 114.915349 +L 463.207792 118.431628 +L 463.897959 123.12 +L 464.588126 118.431628 +L 465.96846 118.431628 +L 466.658627 114.915349 +L 467.348794 112.571163 +L 468.038961 119.603721 +L 468.729128 119.603721 +L 469.419295 118.431628 +L 470.109462 120.775814 +L 470.799629 120.775814 +L 471.489796 118.431628 +L 472.179963 114.915349 +L 472.87013 114.915349 +L 473.560297 117.259535 +L 474.250464 121.947907 +L 475.630798 121.947907 +L 476.320965 100.850233 +L 477.011132 51.622326 +L 477.701299 75.064186 +L 478.391466 117.259535 +L 479.081633 120.775814 +L 479.7718 118.431628 +L 481.152134 102.022326 +L 481.842301 116.087442 +L 482.532468 96.16186 +L 483.222635 70.375814 +L 483.912801 118.431628 +L 484.602968 69.203721 +L 485.293135 109.054884 +L 485.983302 121.947907 +L 486.673469 55.138605 +L 487.363636 92.645581 +L 488.053803 105.538605 +L 488.74397 48.106047 +L 489.434137 117.259535 +L 490.124304 118.431628 +L 490.814471 91.473488 +L 491.504638 107.882791 +L 492.194805 87.957209 +L 492.884972 107.882791 +L 493.575139 119.603721 +L 494.265306 22.32 +L 494.955473 117.259535 +L 495.64564 118.431628 +L 496.335807 118.431628 +L 497.025974 110.226977 +L 497.716141 116.087442 +L 498.406308 99.67814 +L 499.096475 116.087442 +L 499.786642 119.603721 +L 500.476809 92.645581 +L 501.166976 92.645581 +L 501.857143 110.226977 +L 502.54731 89.129302 +L 503.237477 117.259535 +L 503.927644 118.431628 +L 504.617811 92.645581 +L 505.307978 123.12 +L 505.998145 120.775814 +L 506.688312 119.603721 +L 507.378479 117.259535 +L 508.068646 120.775814 +L 508.758813 119.603721 +L 509.44898 117.259535 +L 510.139147 111.39907 +L 510.829314 114.915349 +L 511.519481 104.366512 +L 512.899814 121.947907 +L 513.589981 123.12 +L 514.280148 113.743256 +L 515.660482 120.775814 +L 516.350649 123.12 +L 517.040816 117.259535 +L 517.730983 121.947907 +L 518.42115 117.259535 +L 519.111317 123.12 +L 520.491651 120.775814 +L 521.181818 123.12 +L 521.871985 123.12 +L 522.562152 120.775814 +L 523.942486 118.431628 +L 524.632653 118.431628 +L 525.32282 119.603721 +L 526.012987 119.603721 +L 526.703154 123.12 +L 527.393321 120.775814 +L 528.083488 83.268837 +L 528.773655 119.603721 +L 529.463822 121.947907 +L 530.844156 121.947907 +L 531.534323 116.087442 +L 532.22449 117.259535 +L 532.914657 104.366512 +L 533.604824 120.775814 +L 534.294991 114.915349 +L 534.985158 121.947907 +L 535.675325 123.12 +L 536.365492 119.603721 +L 537.055659 120.775814 +L 537.745826 114.915349 +L 538.435993 117.259535 +L 539.12616 120.775814 +L 539.816327 121.947907 +L 540.506494 120.775814 +L 541.19666 116.087442 +L 541.886827 118.431628 +L 542.576994 117.259535 +L 543.267161 119.603721 +L 543.957328 113.743256 +L 544.647495 116.087442 +L 545.337662 123.12 +L 546.027829 117.259535 +L 546.717996 118.431628 +L 547.408163 105.538605 +L 548.09833 121.947907 +L 548.788497 117.259535 +L 549.478664 117.259535 +L 550.168831 118.431628 +L 550.858998 106.710698 +L 551.549165 87.957209 +L 552.239332 118.431628 +L 552.929499 121.947907 +L 553.619666 114.915349 +L 554.309833 120.775814 +L 555 119.603721 +L 555.690167 119.603721 +L 556.380334 123.12 +L 557.760668 120.775814 +L 558.450835 118.431628 +L 559.141002 121.947907 +L 559.831169 118.431628 +L 560.521336 121.947907 +L 561.211503 118.431628 +L 561.90167 123.12 +L 562.591837 118.431628 +L 563.282004 120.775814 +L 563.972171 120.775814 +L 564.662338 118.431628 +L 565.352505 123.12 +L 566.042672 118.431628 +L 566.732839 120.775814 +L 567.423006 113.743256 +L 568.113173 121.947907 +L 568.80334 112.571163 +L 569.493506 87.957209 +L 570.183673 121.947907 +L 570.87384 123.12 +L 571.564007 120.775814 +L 572.254174 114.915349 +L 572.944341 120.775814 +L 574.324675 123.12 +L 575.014842 113.743256 +L 575.705009 120.775814 +L 576.395176 119.603721 +L 577.085343 109.054884 +L 577.77551 100.850233 +L 578.465677 116.087442 +L 579.155844 120.775814 +L 579.846011 120.775814 +L 580.536178 114.915349 +L 581.226345 75.064186 +L 581.916512 104.366512 +L 582.606679 114.915349 +L 583.296846 119.603721 +L 583.987013 119.603721 +L 584.67718 85.613023 +L 585.367347 118.431628 +L 586.057514 121.947907 +L 587.437848 121.947907 +L 588.128015 119.603721 +L 588.818182 118.431628 +L 589.508349 120.775814 +L 590.198516 117.259535 +L 590.888683 119.603721 +L 591.57885 123.12 +L 592.269017 120.775814 +L 592.959184 116.087442 +L 593.649351 120.775814 +L 594.339518 114.915349 +L 595.029685 114.915349 +L 595.719852 117.259535 +L 596.410019 120.775814 +L 597.100186 99.67814 +L 597.790353 118.431628 +L 598.480519 104.366512 +L 599.170686 114.915349 +L 599.860853 117.259535 +L 600.55102 105.538605 +L 601.241187 120.775814 +L 601.931354 114.915349 +L 602.621521 110.226977 +L 603.311688 118.431628 +L 604.001855 113.743256 +L 604.692022 104.366512 +L 605.382189 103.194419 +L 606.072356 117.259535 +L 606.762523 96.16186 +L 607.45269 105.538605 +L 608.142857 119.603721 +L 608.833024 103.194419 +L 609.523191 121.947907 +L 610.213358 120.775814 +L 610.903525 110.226977 +L 611.593692 113.743256 +L 612.283859 90.301395 +L 612.974026 110.226977 +L 613.664193 109.054884 +L 614.35436 109.054884 +L 615.044527 111.39907 +L 615.734694 117.259535 +L 616.424861 118.431628 +L 617.115028 114.915349 +L 617.805195 117.259535 +L 618.495362 107.882791 +L 619.185529 118.431628 +L 619.875696 111.39907 +L 620.565863 102.022326 +L 621.25603 111.39907 +L 621.946197 112.571163 +L 622.636364 111.39907 +L 622.636364 111.39907 +" clip-path="url(#p278416f5fe)" style="fill: none; stroke: #1f77b4; stroke-width: 1.5; stroke-linecap: square"/> - + + diff --git a/doc/source/tracking/pypistats/downloads_data.csv b/doc/source/tracking/pypistats/downloads_data.csv index 768aac7e8..c795fd46d 100644 --- a/doc/source/tracking/pypistats/downloads_data.csv +++ b/doc/source/tracking/pypistats/downloads_data.csv @@ -1,42 +1,23 @@ category,date,downloads -with_mirrors,2022-03-05,259 -with_mirrors,2022-03-18,255 -with_mirrors,2022-03-07,246 -with_mirrors,2022-03-04,203 -with_mirrors,2022-03-08,150 with_mirrors,2022-08-26,123 -with_mirrors,2022-03-09,114 -with_mirrors,2022-03-10,114 with_mirrors,2022-08-23,104 -with_mirrors,2022-03-11,98 -with_mirrors,2022-03-06,96 with_mirrors,2022-05-17,92 -with_mirrors,2022-03-22,91 -with_mirrors,2022-04-02,87 -without_mirrors,2022-03-18,87 -with_mirrors,2022-03-25,86 -with_mirrors,2022-04-01,86 with_mirrors,2022-05-06,85 with_mirrors,2022-06-11,85 -with_mirrors,2022-03-30,84 with_mirrors,2022-06-06,83 with_mirrors,2022-08-21,82 -with_mirrors,2022-03-24,79 -with_mirrors,2022-03-21,76 +with_mirrors,2022-09-27,81 +with_mirrors,2022-09-19,80 with_mirrors,2022-04-08,76 -with_mirrors,2022-03-20,75 -with_mirrors,2022-03-12,71 with_mirrors,2022-04-14,71 -with_mirrors,2022-03-29,66 with_mirrors,2022-04-07,65 with_mirrors,2022-08-16,65 -without_mirrors,2022-03-10,65 -with_mirrors,2022-03-19,64 -with_mirrors,2022-03-28,62 +with_mirrors,2022-09-04,65 +with_mirrors,2022-09-01,63 with_mirrors,2022-08-12,62 -with_mirrors,2022-03-26,60 with_mirrors,2022-04-23,60 -without_mirrors,2022-03-07,59 +with_mirrors,2022-09-05,60 +with_mirrors,2022-09-16,60 with_mirrors,2022-04-17,58 with_mirrors,2022-07-14,58 with_mirrors,2022-07-25,58 @@ -49,29 +30,34 @@ with_mirrors,2022-07-05,55 with_mirrors,2022-04-15,54 with_mirrors,2022-07-21,54 with_mirrors,2022-04-24,53 +with_mirrors,2022-09-08,53 with_mirrors,2022-04-21,52 +with_mirrors,2022-09-09,51 with_mirrors,2022-08-20,50 with_mirrors,2022-04-26,49 with_mirrors,2022-04-19,48 with_mirrors,2022-08-09,48 -with_mirrors,2022-03-14,47 -with_mirrors,2022-03-31,47 -without_mirrors,2022-03-04,47 +with_mirrors,2022-09-22,48 +with_mirrors,2022-09-26,48 with_mirrors,2022-04-09,45 with_mirrors,2022-08-03,44 with_mirrors,2022-04-13,43 with_mirrors,2022-08-30,43 +with_mirrors,2022-09-15,43 with_mirrors,2022-06-24,42 with_mirrors,2022-08-15,42 with_mirrors,2022-08-22,42 +with_mirrors,2022-09-30,42 without_mirrors,2022-07-29,42 with_mirrors,2022-04-16,41 with_mirrors,2022-05-07,41 with_mirrors,2022-06-08,41 with_mirrors,2022-08-18,41 with_mirrors,2022-07-30,40 +with_mirrors,2022-09-18,40 with_mirrors,2022-05-19,39 with_mirrors,2022-05-31,39 +with_mirrors,2022-09-14,39 with_mirrors,2022-04-27,38 with_mirrors,2022-04-28,38 with_mirrors,2022-04-06,37 @@ -79,14 +65,12 @@ with_mirrors,2022-05-25,37 with_mirrors,2022-06-25,37 with_mirrors,2022-07-26,37 with_mirrors,2022-08-24,37 -with_mirrors,2022-03-17,36 -with_mirrors,2022-03-15,35 +with_mirrors,2022-09-13,36 with_mirrors,2022-05-10,35 with_mirrors,2022-06-17,35 with_mirrors,2022-07-09,35 with_mirrors,2022-08-19,35 without_mirrors,2022-05-10,35 -with_mirrors,2022-03-13,34 with_mirrors,2022-06-01,34 with_mirrors,2022-06-03,34 with_mirrors,2022-06-18,34 @@ -98,76 +82,87 @@ without_mirrors,2022-08-03,33 with_mirrors,2022-08-05,32 with_mirrors,2022-06-10,31 with_mirrors,2022-06-16,31 -without_mirrors,2022-03-15,31 without_mirrors,2022-06-14,31 without_mirrors,2022-07-10,31 with_mirrors,2022-04-03,30 with_mirrors,2022-06-15,30 with_mirrors,2022-06-28,30 with_mirrors,2022-06-29,30 -without_mirrors,2022-03-30,30 with_mirrors,2022-05-22,29 with_mirrors,2022-06-19,29 with_mirrors,2022-07-27,29 +with_mirrors,2022-09-03,29 +without_mirrors,2022-09-14,29 with_mirrors,2022-05-20,28 with_mirrors,2022-05-27,28 with_mirrors,2022-07-01,28 -without_mirrors,2022-03-13,28 -with_mirrors,2022-03-27,27 with_mirrors,2022-04-10,27 with_mirrors,2022-05-11,27 with_mirrors,2022-07-08,27 with_mirrors,2022-07-17,27 -without_mirrors,2022-03-08,27 -without_mirrors,2022-03-27,27 -without_mirrors,2022-03-28,27 -without_mirrors,2022-04-02,27 -with_mirrors,2022-03-23,26 with_mirrors,2022-06-21,26 -with_mirrors,2022-03-16,24 +with_mirrors,2022-09-12,26 +with_mirrors,2022-09-06,24 +without_mirrors,2022-09-06,24 with_mirrors,2022-04-12,23 with_mirrors,2022-08-01,21 -without_mirrors,2022-03-24,21 +with_mirrors,2022-09-02,21 without_mirrors,2022-08-21,21 with_mirrors,2022-07-23,20 without_mirrors,2022-07-23,20 with_mirrors,2022-08-07,19 +without_mirrors,2022-09-27,19 with_mirrors,2022-05-28,18 with_mirrors,2022-06-22,18 +with_mirrors,2022-09-20,18 +without_mirrors,2022-09-04,18 +without_mirrors,2022-09-09,18 without_mirrors,2022-04-14,17 without_mirrors,2022-05-17,17 without_mirrors,2022-07-30,17 without_mirrors,2022-08-23,17 +without_mirrors,2022-09-02,17 with_mirrors,2022-05-26,16 with_mirrors,2022-06-04,16 with_mirrors,2022-07-31,16 -without_mirrors,2022-03-09,16 +with_mirrors,2022-09-07,16 +with_mirrors,2022-09-24,16 without_mirrors,2022-06-08,16 without_mirrors,2022-08-26,16 +without_mirrors,2022-09-07,16 with_mirrors,2022-06-13,15 without_mirrors,2022-06-13,15 with_mirrors,2022-05-14,14 with_mirrors,2022-08-02,14 with_mirrors,2022-08-29,14 -without_mirrors,2022-03-14,14 -without_mirrors,2022-03-16,14 +without_mirrors,2022-09-24,14 with_mirrors,2022-05-21,13 with_mirrors,2022-07-22,13 -without_mirrors,2022-03-05,13 +with_mirrors,2022-09-21,13 +with_mirrors,2022-09-28,13 without_mirrors,2022-07-22,13 +without_mirrors,2022-09-16,13 +without_mirrors,2022-09-18,13 with_mirrors,2022-05-12,12 with_mirrors,2022-08-04,12 -without_mirrors,2022-03-22,12 -without_mirrors,2022-03-29,12 without_mirrors,2022-08-30,12 +without_mirrors,2022-09-12,12 +without_mirrors,2022-09-15,12 with_mirrors,2022-04-04,11 with_mirrors,2022-08-10,11 with_mirrors,2022-08-28,11 without_mirrors,2022-04-12,11 +without_mirrors,2022-09-19,11 +without_mirrors,2022-09-26,11 +without_mirrors,2022-09-28,11 +without_mirrors,2022-09-30,11 with_mirrors,2022-04-05,10 with_mirrors,2022-04-20,10 +with_mirrors,2022-09-17,10 +with_mirrors,2022-09-29,10 without_mirrors,2022-04-15,10 without_mirrors,2022-07-09,10 +without_mirrors,2022-09-29,10 with_mirrors,2022-04-22,9 with_mirrors,2022-04-29,9 with_mirrors,2022-04-30,9 @@ -179,6 +174,8 @@ without_mirrors,2022-04-19,9 without_mirrors,2022-06-03,9 without_mirrors,2022-07-07,9 without_mirrors,2022-07-19,9 +without_mirrors,2022-09-01,9 +without_mirrors,2022-09-13,9 with_mirrors,2022-07-28,8 with_mirrors,2022-08-06,8 with_mirrors,2022-08-17,8 @@ -193,12 +190,12 @@ without_mirrors,2022-08-17,8 without_mirrors,2022-08-18,8 without_mirrors,2022-08-24,8 without_mirrors,2022-08-29,8 +without_mirrors,2022-09-22,8 with_mirrors,2022-05-08,7 with_mirrors,2022-05-15,7 with_mirrors,2022-06-26,7 with_mirrors,2022-06-30,7 -without_mirrors,2022-03-23,7 -without_mirrors,2022-03-25,7 +with_mirrors,2022-09-23,7 without_mirrors,2022-05-15,7 without_mirrors,2022-05-30,7 without_mirrors,2022-06-04,7 @@ -209,9 +206,6 @@ with_mirrors,2022-05-18,6 with_mirrors,2022-06-20,6 with_mirrors,2022-08-11,6 with_mirrors,2022-08-25,6 -without_mirrors,2022-03-11,6 -without_mirrors,2022-03-19,6 -without_mirrors,2022-03-31,6 without_mirrors,2022-04-06,6 without_mirrors,2022-04-11,6 without_mirrors,2022-04-21,6 @@ -226,6 +220,9 @@ without_mirrors,2022-06-11,6 without_mirrors,2022-08-11,6 without_mirrors,2022-08-19,6 without_mirrors,2022-08-25,6 +without_mirrors,2022-09-05,6 +without_mirrors,2022-09-20,6 +without_mirrors,2022-09-23,6 with_mirrors,2022-05-04,5 with_mirrors,2022-05-05,5 with_mirrors,2022-06-07,5 @@ -233,10 +230,7 @@ with_mirrors,2022-06-12,5 with_mirrors,2022-07-03,5 with_mirrors,2022-08-14,5 with_mirrors,2022-08-31,5 -without_mirrors,2022-03-12,5 -without_mirrors,2022-03-20,5 -without_mirrors,2022-03-21,5 -without_mirrors,2022-04-01,5 +with_mirrors,2022-09-25,5 without_mirrors,2022-05-04,5 without_mirrors,2022-05-05,5 without_mirrors,2022-05-31,5 @@ -253,13 +247,13 @@ without_mirrors,2022-08-04,5 without_mirrors,2022-08-09,5 without_mirrors,2022-08-22,5 without_mirrors,2022-08-31,5 +without_mirrors,2022-09-21,5 +without_mirrors,2022-09-25,5 with_mirrors,2022-05-03,4 with_mirrors,2022-05-23,4 with_mirrors,2022-06-02,4 with_mirrors,2022-06-09,4 with_mirrors,2022-08-08,4 -without_mirrors,2022-03-17,4 -without_mirrors,2022-03-26,4 without_mirrors,2022-04-05,4 without_mirrors,2022-04-08,4 without_mirrors,2022-05-03,4 @@ -275,11 +269,14 @@ without_mirrors,2022-08-01,4 without_mirrors,2022-08-02,4 without_mirrors,2022-08-08,4 without_mirrors,2022-08-12,4 +without_mirrors,2022-09-08,4 with_mirrors,2022-05-09,3 with_mirrors,2022-07-02,3 with_mirrors,2022-07-06,3 with_mirrors,2022-07-13,3 with_mirrors,2022-07-15,3 +with_mirrors,2022-09-10,3 +with_mirrors,2022-09-11,3 without_mirrors,2022-04-04,3 without_mirrors,2022-04-07,3 without_mirrors,2022-04-22,3 @@ -305,12 +302,12 @@ without_mirrors,2022-08-14,3 without_mirrors,2022-08-16,3 without_mirrors,2022-08-20,3 without_mirrors,2022-08-28,3 +without_mirrors,2022-09-11,3 with_mirrors,2022-04-25,2 with_mirrors,2022-05-13,2 with_mirrors,2022-06-27,2 with_mirrors,2022-07-11,2 with_mirrors,2022-08-27,2 -without_mirrors,2022-03-06,2 without_mirrors,2022-04-17,2 without_mirrors,2022-04-25,2 without_mirrors,2022-04-28,2 @@ -330,6 +327,7 @@ without_mirrors,2022-07-17,2 without_mirrors,2022-08-05,2 without_mirrors,2022-08-06,2 without_mirrors,2022-08-07,2 +without_mirrors,2022-09-10,2 with_mirrors,2022-04-18,1 with_mirrors,2022-05-01,1 with_mirrors,2022-06-05,1 @@ -351,6 +349,66 @@ without_mirrors,2022-07-04,1 without_mirrors,2022-07-12,1 without_mirrors,2022-07-18,1 without_mirrors,2022-08-13,1 +with_mirrors,2022-03-05,259 +with_mirrors,2022-03-18,255 +with_mirrors,2022-03-07,246 +with_mirrors,2022-03-04,203 +with_mirrors,2022-03-08,150 +with_mirrors,2022-03-09,114 +with_mirrors,2022-03-10,114 +with_mirrors,2022-03-11,98 +with_mirrors,2022-03-06,96 +with_mirrors,2022-03-22,91 +with_mirrors,2022-04-02,87 +without_mirrors,2022-03-18,87 +with_mirrors,2022-03-25,86 +with_mirrors,2022-04-01,86 +with_mirrors,2022-03-30,84 +with_mirrors,2022-03-24,79 +with_mirrors,2022-03-21,76 +with_mirrors,2022-03-20,75 +with_mirrors,2022-03-12,71 +with_mirrors,2022-03-29,66 +without_mirrors,2022-03-10,65 +with_mirrors,2022-03-19,64 +with_mirrors,2022-03-28,62 +with_mirrors,2022-03-26,60 +without_mirrors,2022-03-07,59 +with_mirrors,2022-03-14,47 +with_mirrors,2022-03-31,47 +without_mirrors,2022-03-04,47 +with_mirrors,2022-03-17,36 +with_mirrors,2022-03-15,35 +with_mirrors,2022-03-13,34 +without_mirrors,2022-03-15,31 +without_mirrors,2022-03-30,30 +without_mirrors,2022-03-13,28 +with_mirrors,2022-03-27,27 +without_mirrors,2022-03-08,27 +without_mirrors,2022-03-27,27 +without_mirrors,2022-03-28,27 +without_mirrors,2022-04-02,27 +with_mirrors,2022-03-23,26 +with_mirrors,2022-03-16,24 +without_mirrors,2022-03-24,21 +without_mirrors,2022-03-09,16 +without_mirrors,2022-03-14,14 +without_mirrors,2022-03-16,14 +without_mirrors,2022-03-05,13 +without_mirrors,2022-03-22,12 +without_mirrors,2022-03-29,12 +without_mirrors,2022-03-23,7 +without_mirrors,2022-03-25,7 +without_mirrors,2022-03-11,6 +without_mirrors,2022-03-19,6 +without_mirrors,2022-03-31,6 +without_mirrors,2022-03-12,5 +without_mirrors,2022-03-20,5 +without_mirrors,2022-03-21,5 +without_mirrors,2022-04-01,5 +without_mirrors,2022-03-17,4 +without_mirrors,2022-03-26,4 +without_mirrors,2022-03-06,2 with_mirrors,2022-02-21,88 with_mirrors,2022-02-03,67 without_mirrors,2022-02-21,62 diff --git a/doc/source/tracking/pypistats/get_pypi_stats.py b/doc/source/tracking/pypistats/get_pypi_stats.py index b8ff990ff..d137b99c3 100644 --- a/doc/source/tracking/pypistats/get_pypi_stats.py +++ b/doc/source/tracking/pypistats/get_pypi_stats.py @@ -18,11 +18,13 @@ # exist_downloads = exist_downloads[exist_downloads.category != "Total"] dl_data = downloads.merge( exist_downloads, how="outer", on=["category", "date", "downloads"] -).reindex() +) # except: # dl_data = downloads -dl_data.to_csv(trackpath + downloadfn, index=False) +dl_data.sort_values(["category", "date"], ignore_index=True).to_csv( + trackpath + downloadfn, index=False +) sysdownloads = pypistats.system("icepyx", total=True, format="pandas").drop( columns=["percent"] @@ -36,11 +38,13 @@ exist_sysdownloads["category"] = exist_sysdownloads["category"].fillna("null") sysdl_data = sysdownloads.merge( exist_sysdownloads, how="outer", on=["category", "date", "downloads"] -) # .reindex() removed 8/30/2022 to see if it makes for cleaner PRs +) # except: # dl_data = sysdownloads -sysdl_data.to_csv(trackpath + sysdownloadfn, index=False) +sysdl_data.sort_values(["category", "date"], ignore_index=True).to_csv( + trackpath + sysdownloadfn, index=False +) dl_data = dl_data.groupby("category").get_group("without_mirrors").sort_values("date") diff --git a/doc/source/tracking/pypistats/sys_downloads_data.csv b/doc/source/tracking/pypistats/sys_downloads_data.csv index f5e3f2522..710550ea5 100644 --- a/doc/source/tracking/pypistats/sys_downloads_data.csv +++ b/doc/source/tracking/pypistats/sys_downloads_data.csv @@ -1,75 +1,71 @@ category,date,downloads -null,2022-03-18,77 -null,2022-03-10,64 -null,2022-03-07,47 -null,2022-03-04,37 null,2022-07-29,35 null,2022-08-03,31 null,2022-05-10,29 -null,2022-03-30,28 null,2022-07-10,27 -null,2022-03-15,26 -null,2022-03-27,25 -null,2022-04-02,25 null,2022-06-14,25 -Linux,2022-03-28,24 -null,2022-03-13,24 +Linux,2022-09-06,21 null,2022-08-21,20 -null,2022-03-08,19 +Linux,2022-09-02,17 +Linux,2022-09-04,17 Linux,2022-08-26,16 null,2022-05-17,16 null,2022-07-30,16 +Linux,2022-09-09,14 +Linux,2022-09-14,14 null,2022-07-23,14 Windows,2022-04-14,14 -null,2022-03-05,13 null,2022-06-13,13 +null,2022-09-18,13 Windows,2022-06-08,13 -null,2022-03-24,12 +Windows,2022-09-14,13 +null,2022-09-24,12 +Linux,2022-09-07,11 +Linux,2022-09-12,11 +Linux,2022-09-15,11 +Linux,2022-09-16,11 null,2022-07-22,11 -Linux,2022-03-18,10 +null,2022-09-27,11 +Linux,2022-09-30,10 Windows,2022-07-09,10 -Linux,2022-03-07,9 -null,2022-03-09,9 -Linux,2022-03-04,8 +Windows,2022-09-19,10 Linux,2022-07-07,8 Linux,2022-08-30,8 -Windows,2022-03-29,8 Linux,2022-05-25,7 Linux,2022-08-15,7 Linux,2022-08-23,7 Linux,2022-08-29,7 +Linux,2022-09-01,7 +Linux,2022-09-13,7 +Linux,2022-09-29,7 null,2022-04-15,7 null,2022-04-19,7 -Linux,2022-03-22,6 Linux,2022-06-11,6 Linux,2022-08-17,6 Linux,2022-08-19,6 -null,2022-03-16,6 +Linux,2022-09-05,6 +Linux,2022-09-28,6 null,2022-04-12,6 null,2022-04-13,6 null,2022-06-04,6 null,2022-07-31,6 +null,2022-09-26,6 Windows,2022-04-11,6 -Linux,2022-03-16,5 Linux,2022-06-03,5 Linux,2022-07-25,5 Linux,2022-07-29,5 Linux,2022-08-25,5 -null,2022-03-14,5 +Linux,2022-09-27,5 null,2022-05-15,5 null,2022-05-16,5 null,2022-05-19,5 null,2022-07-19,5 null,2022-08-23,5 -Windows,2022-03-24,5 Windows,2022-04-06,5 Windows,2022-05-04,5 Windows,2022-07-14,5 Windows,2022-07-23,5 -Linux,2022-03-08,4 -Linux,2022-03-09,4 -Linux,2022-03-23,4 -Linux,2022-03-24,4 +Windows,2022-09-23,5 Linux,2022-05-23,4 Linux,2022-06-06,4 Linux,2022-06-07,4 @@ -78,29 +74,19 @@ Linux,2022-06-14,4 Linux,2022-06-15,4 Linux,2022-06-17,4 Linux,2022-08-31,4 -null,2022-03-11,4 +Linux,2022-09-22,4 +Linux,2022-09-26,4 null,2022-04-24,4 null,2022-04-26,4 null,2022-06-01,4 null,2022-07-28,4 null,2022-08-01,4 null,2022-08-18,4 -Windows,2022-03-08,4 -Windows,2022-03-12,4 -Windows,2022-03-14,4 -Windows,2022-03-19,4 -Windows,2022-03-22,4 -Windows,2022-03-31,4 Windows,2022-05-10,4 Windows,2022-05-11,4 Windows,2022-08-23,4 Windows,2022-08-24,4 -Linux,2022-03-13,3 -Linux,2022-03-14,3 -Linux,2022-03-17,3 -Linux,2022-03-25,3 -Linux,2022-03-26,3 -Linux,2022-03-29,3 +Windows,2022-09-20,4 Linux,2022-05-03,3 Linux,2022-05-07,3 Linux,2022-05-26,3 @@ -119,18 +105,14 @@ Linux,2022-08-18,3 Linux,2022-08-20,3 Linux,2022-08-22,3 Linux,2022-08-24,3 -null,2022-03-20,3 -null,2022-03-21,3 null,2022-04-08,3 null,2022-05-26,3 null,2022-06-03,3 null,2022-06-17,3 null,2022-08-04,3 null,2022-08-28,3 -Windows,2022-03-09,3 -Windows,2022-03-15,3 -Windows,2022-03-16,3 -Windows,2022-03-28,3 +null,2022-09-11,3 +null,2022-09-25,3 Windows,2022-04-12,3 Windows,2022-04-15,3 Windows,2022-04-21,3 @@ -141,12 +123,13 @@ Windows,2022-06-24,3 Windows,2022-07-21,3 Windows,2022-08-11,3 Windows,2022-08-30,3 -Darwin,2022-03-14,2 +Windows,2022-09-07,3 +Windows,2022-09-09,3 +Windows,2022-09-27,3 +Windows,2022-09-28,3 Darwin,2022-05-30,2 Darwin,2022-06-10,2 -Linux,2022-03-15,2 -Linux,2022-03-20,2 -Linux,2022-03-21,2 +Darwin,2022-09-20,2 Linux,2022-04-04,2 Linux,2022-04-12,2 Linux,2022-04-26,2 @@ -162,6 +145,9 @@ Linux,2022-08-02,2 Linux,2022-08-08,2 Linux,2022-08-09,2 Linux,2022-08-14,2 +Linux,2022-09-08,2 +Linux,2022-09-21,2 +Linux,2022-09-25,2 null,2022-04-14,2 null,2022-04-21,2 null,2022-05-05,2 @@ -183,13 +169,11 @@ null,2022-08-07,2 null,2022-08-08,2 null,2022-08-09,2 null,2022-08-12,2 -Windows,2022-03-07,2 -Windows,2022-03-11,2 -Windows,2022-03-23,2 -Windows,2022-03-25,2 -Windows,2022-03-27,2 -Windows,2022-04-01,2 -Windows,2022-04-02,2 +null,2022-09-01,2 +null,2022-09-07,2 +null,2022-09-10,2 +null,2022-09-14,2 +null,2022-09-28,2 Windows,2022-04-05,2 Windows,2022-04-07,2 Windows,2022-04-13,2 @@ -213,14 +197,10 @@ Windows,2022-07-10,2 Windows,2022-07-15,2 Windows,2022-07-25,2 Windows,2022-07-31,2 -Darwin,2022-03-04,1 -Darwin,2022-03-07,1 -Darwin,2022-03-22,1 -Darwin,2022-03-25,1 -Darwin,2022-03-29,1 -Darwin,2022-03-30,1 -Darwin,2022-03-31,1 -Darwin,2022-04-01,1 +Windows,2022-09-06,2 +Windows,2022-09-21,2 +Windows,2022-09-22,2 +Windows,2022-09-29,2 Darwin,2022-04-05,1 Darwin,2022-04-14,1 Darwin,2022-05-02,1 @@ -236,12 +216,13 @@ Darwin,2022-08-12,1 Darwin,2022-08-18,1 Darwin,2022-08-23,1 Darwin,2022-08-31,1 -Linux,2022-03-06,1 -Linux,2022-03-10,1 -Linux,2022-03-12,1 -Linux,2022-03-19,1 -Linux,2022-03-31,1 -Linux,2022-04-01,1 +Darwin,2022-09-08,1 +Darwin,2022-09-13,1 +Darwin,2022-09-21,1 +Darwin,2022-09-22,1 +Darwin,2022-09-23,1 +Darwin,2022-09-29,1 +Darwin,2022-09-30,1 Linux,2022-04-19,1 Linux,2022-04-21,1 Linux,2022-04-24,1 @@ -277,14 +258,7 @@ Linux,2022-08-03,1 Linux,2022-08-04,1 Linux,2022-08-06,1 Linux,2022-08-12,1 -null,2022-03-06,1 -null,2022-03-17,1 -null,2022-03-19,1 -null,2022-03-22,1 -null,2022-03-23,1 -null,2022-03-25,1 -null,2022-03-26,1 -null,2022-04-01,1 +Linux,2022-09-24,1 null,2022-04-05,1 null,2022-04-06,1 null,2022-04-07,1 @@ -321,9 +295,13 @@ null,2022-08-22,1 null,2022-08-24,1 null,2022-08-25,1 null,2022-08-30,1 -Windows,2022-03-04,1 -Windows,2022-03-13,1 -Windows,2022-03-30,1 +null,2022-09-06,1 +null,2022-09-08,1 +null,2022-09-09,1 +null,2022-09-12,1 +null,2022-09-16,1 +null,2022-09-19,1 +null,2022-09-22,1 Windows,2022-04-03,1 Windows,2022-04-04,1 Windows,2022-04-08,1 @@ -376,6 +354,94 @@ Windows,2022-08-17,1 Windows,2022-08-21,1 Windows,2022-08-22,1 Windows,2022-08-29,1 +Windows,2022-09-04,1 +Windows,2022-09-13,1 +Windows,2022-09-15,1 +Windows,2022-09-16,1 +Windows,2022-09-24,1 +Windows,2022-09-26,1 +null,2022-03-18,77 +null,2022-03-10,64 +null,2022-03-07,47 +null,2022-03-04,37 +null,2022-03-30,28 +null,2022-03-15,26 +null,2022-03-27,25 +null,2022-04-02,25 +Linux,2022-03-28,24 +null,2022-03-13,24 +null,2022-03-08,19 +null,2022-03-05,13 +null,2022-03-24,12 +Linux,2022-03-18,10 +Linux,2022-03-07,9 +null,2022-03-09,9 +Linux,2022-03-04,8 +Windows,2022-03-29,8 +Linux,2022-03-22,6 +null,2022-03-16,6 +Linux,2022-03-16,5 +null,2022-03-14,5 +Windows,2022-03-24,5 +Linux,2022-03-08,4 +Linux,2022-03-09,4 +Linux,2022-03-23,4 +Linux,2022-03-24,4 +null,2022-03-11,4 +Windows,2022-03-08,4 +Windows,2022-03-12,4 +Windows,2022-03-14,4 +Windows,2022-03-19,4 +Windows,2022-03-22,4 +Windows,2022-03-31,4 +Linux,2022-03-13,3 +Linux,2022-03-14,3 +Linux,2022-03-17,3 +Linux,2022-03-25,3 +Linux,2022-03-26,3 +Linux,2022-03-29,3 +null,2022-03-20,3 +null,2022-03-21,3 +Windows,2022-03-09,3 +Windows,2022-03-15,3 +Windows,2022-03-16,3 +Windows,2022-03-28,3 +Darwin,2022-03-14,2 +Linux,2022-03-15,2 +Linux,2022-03-20,2 +Linux,2022-03-21,2 +Windows,2022-03-07,2 +Windows,2022-03-11,2 +Windows,2022-03-23,2 +Windows,2022-03-25,2 +Windows,2022-03-27,2 +Windows,2022-04-01,2 +Windows,2022-04-02,2 +Darwin,2022-03-04,1 +Darwin,2022-03-07,1 +Darwin,2022-03-22,1 +Darwin,2022-03-25,1 +Darwin,2022-03-29,1 +Darwin,2022-03-30,1 +Darwin,2022-03-31,1 +Darwin,2022-04-01,1 +Linux,2022-03-06,1 +Linux,2022-03-10,1 +Linux,2022-03-12,1 +Linux,2022-03-19,1 +Linux,2022-03-31,1 +Linux,2022-04-01,1 +null,2022-03-06,1 +null,2022-03-17,1 +null,2022-03-19,1 +null,2022-03-22,1 +null,2022-03-23,1 +null,2022-03-25,1 +null,2022-03-26,1 +null,2022-04-01,1 +Windows,2022-03-04,1 +Windows,2022-03-13,1 +Windows,2022-03-30,1 null,2022-02-21,60 null,2022-02-22,40 null,2022-03-02,38 diff --git a/doc/source/tracking/traffic/clones.csv b/doc/source/tracking/traffic/clones.csv index 0ac239872..a160bc751 100644 --- a/doc/source/tracking/traffic/clones.csv +++ b/doc/source/tracking/traffic/clones.csv @@ -517,3 +517,41 @@ _date,total_clones,unique_clones 2022-09-01,2,2 2022-09-03,9,5 2022-09-04,1,1 +2022-09-05,3,3 +2022-09-06,11,7 +2022-09-07,2,2 +2022-09-08,23,9 +2022-09-09,12,4 +2022-09-10,4,2 +2022-09-12,6,3 +2022-09-13,32,8 +2022-09-14,1,1 +2022-09-15,2,1 +2022-09-16,5,1 +2022-09-18,16,3 +2022-09-19,3,3 +2022-09-21,1,1 +2022-09-22,19,8 +2022-09-23,6,3 +2022-09-24,1,1 +2022-09-25,3,3 +2022-09-26,40,10 +2022-09-28,1,1 +2022-09-29,2,1 +2022-09-30,2,1 +2022-10-01,2,2 +2022-10-03,1,1 +2022-10-04,3,2 +2022-10-05,1,1 +2022-10-06,17,8 +2022-10-07,16,9 +2022-10-10,3,3 +2022-10-12,1,1 +2022-10-14,20,10 +2022-10-15,7,2 +2022-10-16,5,2 +2022-10-17,33,17 +2022-10-18,17,9 +2022-10-19,21,12 +2022-10-20,1,1 +2022-10-21,6,3 diff --git a/doc/source/tracking/traffic/plots.svg b/doc/source/tracking/traffic/plots.svg index 3af918811..a888f5c39 100644 --- a/doc/source/tracking/traffic/plots.svg +++ b/doc/source/tracking/traffic/plots.svg @@ -6,11 +6,11 @@ - 2022-09-05T01:06:05.224981 + 2022-10-24T01:14:16.697151 image/svg+xml - Matplotlib v3.5.3, https://matplotlib.org/ + Matplotlib v3.6.1, https://matplotlib.org/ @@ -41,17 +41,17 @@ z - - + - + - + - + - + - + @@ -224,12 +224,12 @@ z - + - + - + - + - + - + @@ -351,7 +351,7 @@ z - + - - + - + @@ -496,12 +496,12 @@ L -3.5 0 - + - + @@ -511,12 +511,12 @@ L -3.5 0 - + - + @@ -526,12 +526,12 @@ L -3.5 0 - + - + @@ -541,970 +541,1043 @@ L -3.5 0 +L 116.277641 129.61084 +L 117.191646 130.778182 +L 118.105651 130.778182 +L 119.019656 130.194511 +L 119.933661 130.194511 +L 120.847666 126.108813 +L 121.761671 126.108813 +L 122.675676 130.778182 +L 123.589681 130.778182 +L 124.503686 127.859826 +L 125.41769 128.735333 +L 126.331695 130.778182 +L 127.2457 129.319004 +L 128.159705 129.902675 +L 129.07371 129.902675 +L 129.987715 130.778182 +L 131.815725 129.61084 +L 132.72973 130.486346 +L 133.643735 130.778182 +L 134.55774 130.486346 +L 135.471744 130.486346 +L 136.385749 130.194511 +L 137.299754 130.486346 +L 138.213759 130.486346 +L 139.127764 129.902675 +L 140.041769 130.486346 +L 140.955774 130.486346 +L 141.869779 126.98432 +L 142.783784 129.319004 +L 143.697789 130.486346 +L 144.611794 123.774129 +L 145.525799 130.778182 +L 152.837838 130.778182 +L 153.751843 130.486346 +L 154.665848 130.778182 +L 161.063882 130.778182 +L 161.977887 129.902675 +L 162.891892 130.194511 +L 163.805897 130.778182 +L 164.719902 130.194511 +L 165.633907 129.319004 +L 166.547912 130.486346 +L 167.461916 130.486346 +L 168.375921 129.902675 +L 169.289926 126.108813 +L 170.203931 130.486346 +L 171.117936 130.778182 +L 172.031941 130.486346 +L 172.945946 129.027169 +L 173.859951 130.486346 +L 174.773956 130.194511 +L 175.687961 128.151662 +L 176.601966 129.902675 +L 177.515971 129.027169 +L 178.429975 130.486346 +L 179.34398 130.194511 +L 180.257985 130.486346 +L 181.17199 130.194511 +L 183 130.194511 +L 183.914005 129.61084 +L 184.82801 130.778182 +L 185.742015 130.778182 +L 186.65602 129.61084 +L 187.570025 129.61084 +L 188.484029 128.151662 +L 189.398034 130.194511 +L 190.312039 129.319004 +L 191.226044 130.778182 +L 192.140049 128.443497 +L 193.054054 129.902675 +L 193.968059 130.194511 +L 194.882064 129.902675 +L 195.796069 128.735333 +L 196.710074 130.486346 +L 197.624079 129.61084 +L 198.538084 126.400649 +L 199.452088 128.735333 +L 200.366093 126.108813 +L 201.280098 110.349693 +L 202.194103 129.319004 +L 203.108108 130.778182 +L 204.022113 129.902675 +L 204.936118 127.276155 +L 205.850123 127.859826 +L 206.764128 129.319004 +L 207.678133 125.525142 +L 208.592138 129.902675 +L 209.506143 129.902675 +L 210.420147 130.486346 +L 211.334152 126.98432 +L 212.248157 127.859826 +L 213.162162 130.778182 +L 214.076167 130.194511 +L 214.990172 130.778182 +L 215.904177 129.61084 +L 216.818182 116.47824 +L 217.732187 124.941471 +L 218.646192 126.400649 +L 219.560197 129.319004 +L 220.474201 130.778182 +L 221.388206 128.735333 +L 222.302211 129.902675 +L 223.216216 126.692484 +L 224.130221 129.902675 +L 225.044226 127.276155 +L 225.958231 123.774129 +L 226.872236 126.98432 +L 227.786241 129.319004 +L 228.700246 123.482293 +L 229.614251 123.482293 +L 230.528256 124.065964 +L 231.44226 112.684378 +L 232.356265 119.688431 +L 233.27027 119.688431 +L 234.184275 125.525142 +L 235.09828 121.147609 +L 236.012285 125.233306 +L 236.92629 130.194511 +L 237.840295 130.486346 +L 238.7543 124.065964 +L 239.668305 123.190457 +L 240.58231 123.774129 +L 241.496314 121.73128 +L 242.410319 119.10476 +L 243.324324 129.61084 +L 244.238329 130.486346 +L 245.152334 124.065964 +L 246.066339 124.649635 +L 246.980344 116.47824 +L 247.894349 123.774129 +L 248.808354 124.065964 +L 249.722359 130.486346 +L 250.636364 129.902675 +L 251.550369 123.190457 +L 252.464373 117.353746 +L 253.378378 124.3578 +L 254.292383 122.606786 +L 255.206388 114.143555 +L 256.120393 124.3578 +L 257.034398 130.486346 +L 257.948403 123.190457 +L 258.862408 119.10476 +L 259.776413 117.645582 +L 260.690418 120.563937 +L 261.604423 121.73128 +L 262.518428 130.194511 +L 263.432432 123.482293 +L 264.346437 120.272102 +L 265.260442 123.774129 +L 266.174447 123.482293 +L 267.088452 122.898622 +L 268.002457 128.443497 +L 268.916462 123.774129 +L 269.830467 122.606786 +L 270.744472 123.774129 +L 271.658477 124.065964 +L 272.572482 124.065964 +L 273.486486 130.778182 +L 274.400491 130.778182 +L 275.314496 123.482293 +L 276.228501 122.023115 +L 277.142506 123.482293 +L 278.056511 117.645582 +L 278.970516 119.10476 +L 279.884521 130.778182 +L 280.798526 123.774129 +L 281.712531 122.898622 +L 282.626536 122.606786 +L 283.540541 122.023115 +L 284.454545 124.3578 +L 285.36855 130.486346 +L 286.282555 123.190457 +L 287.19656 121.439444 +L 288.110565 118.812924 +L 289.02457 118.521089 +L 289.938575 87.878356 +L 291.766585 130.778182 +L 292.68059 124.941471 +L 293.594595 124.3578 +L 294.5086 127.859826 +L 295.422604 130.778182 +L 296.336609 130.486346 +L 297.250614 127.276155 +L 298.164619 128.151662 +L 299.078624 130.486346 +L 299.992629 129.902675 +L 300.906634 130.486346 +L 301.820639 130.778182 +L 302.734644 130.486346 +L 303.648649 130.778182 +L 304.562654 129.902675 +L 305.476658 130.194511 +L 306.390663 130.778182 +L 309.132678 130.778182 +L 310.046683 129.61084 +L 310.960688 130.486346 +L 311.874693 130.778182 +L 312.788698 130.486346 +L 313.702703 129.027169 +L 314.616708 130.778182 +L 315.530713 124.3578 +L 316.444717 130.194511 +L 317.358722 130.778182 +L 319.186732 130.194511 +L 320.100737 130.778182 +L 321.014742 130.486346 +L 321.928747 130.778182 +L 322.842752 129.902675 +L 323.756757 130.486346 +L 324.670762 130.194511 +L 325.584767 130.778182 +L 327.412776 130.778182 +L 329.240786 130.194511 +L 330.154791 129.027169 +L 331.068796 130.486346 +L 331.982801 130.486346 +L 332.896806 127.859826 +L 333.810811 126.692484 +L 334.724816 130.778182 +L 336.552826 130.778182 +L 338.380835 130.194511 +L 339.29484 130.486346 +L 340.208845 128.151662 +L 341.12285 122.606786 +L 342.036855 129.319004 +L 342.95086 121.147609 +L 343.864865 128.735333 +L 344.77887 130.486346 +L 345.692875 130.778182 +L 347.520885 130.778182 +L 348.434889 130.486346 +L 349.348894 130.778182 +L 350.262899 130.778182 +L 351.176904 129.61084 +L 352.090909 115.602733 +L 353.004914 124.3578 +L 353.918919 130.194511 +L 354.832924 126.98432 +L 355.746929 115.894569 +L 356.660934 114.727226 +L 357.574939 112.100706 +L 358.488943 118.229253 +L 359.402948 126.108813 +L 360.316953 126.98432 +L 361.230958 130.778182 +L 362.144963 128.443497 +L 363.058968 130.778182 +L 363.972973 130.778182 +L 364.886978 126.692484 +L 365.800983 130.194511 +L 366.714988 115.310898 +L 367.628993 126.98432 +L 368.542998 114.435391 +L 369.457002 127.276155 +L 370.371007 129.61084 +L 371.285012 126.400649 +L 372.199017 113.559884 +L 373.113022 126.108813 +L 374.027027 126.98432 +L 374.941032 130.194511 +L 375.855037 130.778182 +L 376.769042 130.778182 +L 377.683047 130.194511 +L 378.597052 128.735333 +L 379.511057 127.567991 +L 380.425061 126.98432 +L 381.339066 130.778182 +L 382.253071 130.778182 +L 383.167076 125.816977 +L 384.081081 123.774129 +L 384.995086 130.778182 +L 385.909091 130.194511 +L 386.823096 130.778182 +L 387.737101 128.151662 +L 388.651106 130.194511 +L 389.565111 130.778182 +L 390.479115 130.486346 +L 391.39312 129.902675 +L 392.307125 129.902675 +L 393.22113 119.396595 +L 394.135135 129.902675 +L 395.04914 129.902675 +L 395.963145 126.108813 +L 396.87715 118.812924 +L 397.791155 127.276155 +L 398.70516 127.276155 +L 399.619165 130.194511 +L 400.53317 125.816977 +L 401.447174 117.937417 +L 402.361179 99.259942 +L 403.275184 127.276155 +L 404.189189 122.606786 +L 405.103194 130.778182 +L 406.017199 118.521089 +L 406.931204 116.186404 +L 407.845209 129.027169 +L 408.759214 124.3578 +L 409.673219 130.778182 +L 410.587224 130.778182 +L 411.501229 116.770075 +L 412.415233 115.894569 +L 413.329238 130.486346 +L 414.243243 126.108813 +L 415.157248 130.778182 +L 416.071253 130.778182 +L 416.985258 130.194511 +L 417.899263 130.486346 +L 418.813268 129.902675 +L 419.727273 130.778182 +L 420.641278 126.692484 +L 421.555283 124.3578 +L 422.469287 113.559884 +L 423.383292 127.859826 +L 424.297297 130.486346 +L 425.211302 123.482293 +L 426.125307 130.486346 +L 427.039312 128.443497 +L 427.953317 125.816977 +L 428.867322 126.98432 +L 429.781327 129.319004 +L 430.695332 130.486346 +L 431.609337 129.027169 +L 432.523342 123.774129 +L 433.437346 129.61084 +L 434.351351 126.98432 +L 435.265356 128.151662 +L 436.179361 130.778182 +L 437.093366 104.804818 +L 438.007371 124.649635 +L 438.921376 115.019062 +L 439.835381 126.692484 +L 440.749386 106.263995 +L 441.663391 130.778182 +L 442.577396 125.233306 +L 444.405405 116.186404 +L 445.31941 120.563937 +L 446.233415 128.443497 +L 447.14742 130.778182 +L 448.97543 110.641529 +L 449.889435 112.100706 +L 450.80344 130.778182 +L 451.717445 126.98432 +L 452.63145 129.902675 +L 453.545455 113.85172 +L 454.459459 129.902675 +L 455.373464 130.778182 +L 457.201474 130.778182 +L 458.115479 129.61084 +L 459.029484 129.902675 +L 459.943489 127.859826 +L 460.857494 129.027169 +L 461.771499 127.567991 +L 462.685504 122.314951 +L 463.599509 130.486346 +L 464.513514 106.555831 +L 465.427518 127.276155 +L 466.341523 126.692484 +L 467.255528 114.143555 +L 468.169533 124.649635 +L 469.997543 130.486346 +L 470.911548 129.319004 +L 471.825553 130.486346 +L 472.739558 127.859826 +L 473.653563 104.804818 +L 474.567568 93.423231 +L 475.481572 121.147609 +L 476.395577 130.486346 +L 477.309582 126.108813 +L 478.223587 129.902675 +L 479.137592 130.194511 +L 480.051597 130.778182 +L 480.965602 130.778182 +L 481.879607 130.486346 +L 483.707617 130.486346 +L 484.621622 130.778182 +L 485.535627 130.778182 +L 486.449631 130.194511 +L 487.363636 130.194511 +L 488.277641 130.778182 +L 489.191646 130.778182 +L 490.105651 130.486346 +L 491.019656 130.486346 +L 491.933661 130.778182 +L 492.847666 130.486346 +L 493.761671 129.902675 +L 494.675676 130.486346 +L 495.589681 130.778182 +L 496.503686 130.194511 +L 497.41769 130.194511 +L 498.331695 129.61084 +L 499.2457 127.276155 +L 500.159705 129.61084 +L 501.07371 130.486346 +L 501.987715 130.194511 +L 502.90172 128.443497 +L 503.815725 125.816977 +L 504.72973 130.778182 +L 505.643735 130.486346 +L 506.55774 130.778182 +L 507.471744 130.778182 +L 508.385749 127.276155 +L 509.299754 130.778182 +L 510.213759 127.276155 +L 511.127764 130.778182 +L 512.041769 130.486346 +L 512.955774 122.606786 +L 513.869779 130.486346 +L 514.783784 118.521089 +L 515.697789 127.567991 +L 516.611794 102.178298 +L 517.525799 118.812924 +L 518.439803 129.61084 +L 519.353808 130.486346 +L 520.267813 130.194511 +L 521.181818 130.486346 +L 522.095823 117.645582 +L 523.009828 129.902675 +L 523.923833 130.778182 +L 524.837838 130.486346 +L 525.751843 125.816977 +L 526.665848 130.778182 +L 528.493857 130.778182 +L 529.407862 128.735333 +L 530.321867 120.563937 +L 531.235872 130.778182 +L 532.149877 129.902675 +L 533.063882 123.774129 +L 533.977887 122.606786 +L 534.891892 130.778182 +L 535.805897 129.902675 +L 536.719902 130.194511 +L 537.633907 127.859826 +L 538.547912 130.194511 +L 539.461916 129.319004 +L 540.375921 130.486346 +L 541.289926 130.778182 +L 542.203931 129.61084 +L 543.117936 129.027169 +L 544.031941 129.902675 +L 544.945946 119.10476 +L 545.859951 130.194511 +L 546.773956 122.023115 +L 547.687961 130.778182 +L 548.601966 129.027169 +L 549.515971 125.816977 +L 550.429975 130.778182 +L 551.34398 130.194511 +L 552.257985 130.486346 +L 553.17199 110.933364 +L 554.085995 129.027169 +L 555 130.778182 +L 555.914005 130.486346 +L 556.82801 122.898622 +L 557.742015 126.108813 +L 558.65602 130.486346 +L 559.570025 124.3578 +L 560.484029 130.778182 +L 561.398034 130.778182 +L 562.312039 129.61084 +L 563.226044 130.778182 +L 564.140049 127.276155 +L 565.054054 130.194511 +L 565.968059 130.486346 +L 566.882064 130.486346 +L 567.796069 129.902675 +L 568.710074 127.276155 +L 569.624079 126.108813 +L 570.538084 126.400649 +L 571.452088 130.486346 +L 572.366093 130.486346 +L 574.194103 113.559884 +L 575.108108 130.778182 +L 576.022113 121.147609 +L 576.936118 129.902675 +L 577.850123 130.778182 +L 578.764128 129.319004 +L 579.678133 129.61084 +L 580.592138 130.778182 +L 581.506143 39.141818 +L 582.420147 129.027169 +L 583.334152 126.98432 +L 584.248157 100.71912 +L 585.162162 125.816977 +L 586.076167 130.486346 +L 586.990172 128.443497 +L 587.904177 130.778182 +L 588.818182 130.194511 +L 589.732187 127.859826 +L 590.646192 130.486346 +L 591.560197 124.3578 +L 592.474201 127.567991 +L 593.388206 129.902675 +L 594.302211 129.319004 +L 595.216216 121.73128 +L 596.130221 130.778182 +L 597.044226 130.486346 +L 597.958231 129.61084 +L 598.872236 126.400649 +L 599.786241 130.194511 +L 600.700246 130.778182 +L 601.614251 125.525142 +L 602.528256 129.319004 +L 603.44226 130.778182 +L 604.356265 130.194511 +L 605.27027 119.396595 +L 606.184275 130.778182 +L 607.09828 130.486346 +L 608.92629 130.486346 +L 609.840295 130.778182 +L 610.7543 130.194511 +L 611.668305 130.778182 +L 612.58231 126.108813 +L 613.496314 126.400649 +L 614.410319 130.194511 +L 615.324324 130.778182 +L 616.238329 125.233306 +L 617.152334 129.027169 +L 618.066339 129.61084 +L 618.980344 121.439444 +L 619.894349 126.108813 +L 620.808354 124.941471 +L 621.722359 130.778182 +L 622.636364 129.319004 +L 622.636364 129.319004 +" clip-path="url(#pcca510757b)" style="fill: none; stroke: #1f77b4; stroke-width: 1.5; stroke-linecap: square"/> +L 116.277641 129.61084 +L 117.191646 130.778182 +L 118.105651 130.778182 +L 119.019656 130.194511 +L 119.933661 130.194511 +L 120.847666 130.486346 +L 121.761671 129.61084 +L 122.675676 130.778182 +L 123.589681 130.778182 +L 124.503686 127.859826 +L 125.41769 130.194511 +L 126.331695 130.778182 +L 127.2457 129.902675 +L 128.159705 129.902675 +L 129.07371 130.194511 +L 129.987715 130.778182 +L 130.90172 130.194511 +L 131.815725 129.902675 +L 132.72973 130.486346 +L 133.643735 130.778182 +L 134.55774 130.486346 +L 135.471744 130.778182 +L 136.385749 130.194511 +L 138.213759 130.778182 +L 139.127764 130.486346 +L 140.041769 130.778182 +L 140.955774 130.486346 +L 141.869779 128.443497 +L 142.783784 129.319004 +L 143.697789 130.486346 +L 144.611794 128.151662 +L 145.525799 130.778182 +L 152.837838 130.778182 +L 153.751843 130.486346 +L 154.665848 130.778182 +L 161.063882 130.778182 +L 161.977887 130.194511 +L 162.891892 130.778182 +L 163.805897 130.778182 +L 165.633907 130.194511 +L 166.547912 130.778182 +L 168.375921 130.778182 +L 169.289926 127.859826 +L 170.203931 130.778182 +L 171.117936 130.778182 +L 172.031941 130.486346 +L 172.945946 129.902675 +L 173.859951 130.486346 +L 174.773956 130.194511 +L 175.687961 129.027169 +L 176.601966 130.194511 +L 177.515971 130.778182 +L 178.429975 130.486346 +L 179.34398 130.778182 +L 180.257985 130.486346 +L 181.17199 130.778182 +L 182.085995 130.194511 +L 183.914005 130.194511 +L 184.82801 130.778182 +L 185.742015 130.778182 +L 188.484029 129.027169 +L 189.398034 130.194511 +L 190.312039 129.61084 +L 191.226044 130.778182 +L 192.140049 129.027169 +L 193.054054 129.902675 +L 193.968059 130.194511 +L 194.882064 129.902675 +L 195.796069 128.735333 +L 196.710074 130.486346 +L 197.624079 129.61084 +L 198.538084 127.859826 +L 199.452088 129.027169 +L 200.366093 127.276155 +L 201.280098 120.563937 +L 202.194103 129.319004 +L 203.108108 130.778182 +L 204.022113 130.194511 +L 204.936118 127.567991 +L 206.764128 129.319004 +L 207.678133 126.692484 +L 208.592138 129.902675 +L 209.506143 129.902675 +L 210.420147 130.486346 +L 211.334152 127.859826 +L 212.248157 127.859826 +L 213.162162 130.778182 +L 214.076167 130.194511 +L 214.990172 130.778182 +L 215.904177 129.902675 +L 216.818182 124.065964 +L 217.732187 126.98432 +L 218.646192 127.859826 +L 219.560197 129.61084 +L 220.474201 130.778182 +L 221.388206 129.319004 +L 222.302211 130.486346 +L 223.216216 127.567991 +L 224.130221 130.194511 +L 225.044226 127.567991 +L 225.958231 125.816977 +L 226.872236 127.276155 +L 227.786241 129.61084 +L 228.700246 126.108813 +L 229.614251 128.151662 +L 230.528256 130.486346 +L 231.44226 126.400649 +L 232.356265 129.902675 +L 233.27027 128.443497 +L 234.184275 126.400649 +L 235.09828 128.151662 +L 236.012285 130.778182 +L 236.92629 130.486346 +L 237.840295 130.486346 +L 238.7543 130.778182 +L 239.668305 129.902675 +L 240.58231 130.194511 +L 242.410319 126.108813 +L 243.324324 129.61084 +L 244.238329 130.486346 +L 245.152334 130.778182 +L 246.066339 129.902675 +L 246.980344 124.649635 +L 247.894349 130.778182 +L 248.808354 130.194511 +L 249.722359 130.486346 +L 251.550369 130.486346 +L 252.464373 125.233306 +L 253.378378 129.902675 +L 254.292383 129.027169 +L 255.206388 123.774129 +L 256.120393 125.816977 +L 257.034398 130.486346 +L 257.948403 130.778182 +L 258.862408 128.443497 +L 259.776413 130.194511 +L 260.690418 129.902675 +L 261.604423 130.486346 +L 262.518428 130.486346 +L 263.432432 130.778182 +L 264.346437 127.567991 +L 265.260442 130.778182 +L 266.174447 130.486346 +L 267.088452 129.902675 +L 268.002457 129.027169 +L 268.916462 130.778182 +L 269.830467 129.902675 +L 270.744472 130.778182 +L 271.658477 130.194511 +L 272.572482 130.194511 +L 273.486486 130.778182 +L 275.314496 130.778182 +L 276.228501 129.319004 +L 277.142506 130.778182 +L 278.056511 129.902675 +L 278.970516 128.443497 +L 279.884521 130.778182 +L 280.798526 130.778182 +L 281.712531 130.486346 +L 282.626536 129.902675 +L 285.36855 130.778182 +L 286.282555 130.486346 +L 287.19656 128.735333 +L 288.110565 128.735333 +L 289.02457 129.319004 +L 289.938575 130.778182 +L 290.85258 126.400649 +L 291.766585 130.778182 +L 292.68059 130.486346 +L 293.594595 128.735333 +L 294.5086 128.443497 +L 295.422604 130.778182 +L 296.336609 130.486346 +L 297.250614 127.276155 +L 298.164619 128.735333 +L 299.078624 130.486346 +L 299.992629 129.902675 +L 300.906634 130.778182 +L 301.820639 130.778182 +L 302.734644 130.486346 +L 303.648649 130.778182 +L 304.562654 129.902675 +L 305.476658 130.194511 +L 306.390663 130.778182 +L 309.132678 130.778182 +L 310.046683 129.61084 +L 310.960688 130.486346 +L 311.874693 130.778182 +L 312.788698 130.486346 +L 313.702703 129.319004 +L 314.616708 130.778182 +L 315.530713 130.778182 +L 316.444717 130.194511 +L 317.358722 130.778182 +L 319.186732 130.194511 +L 320.100737 130.778182 +L 321.014742 130.486346 +L 321.928747 130.778182 +L 322.842752 129.902675 +L 323.756757 130.486346 +L 324.670762 130.194511 +L 325.584767 130.778182 +L 327.412776 130.778182 +L 329.240786 130.194511 +L 330.154791 129.027169 +L 331.068796 130.486346 +L 331.982801 130.778182 +L 332.896806 127.859826 +L 333.810811 127.567991 +L 334.724816 130.778182 +L 336.552826 130.778182 +L 338.380835 130.194511 +L 339.29484 130.778182 +L 340.208845 128.443497 +L 341.12285 126.692484 +L 342.036855 130.486346 +L 342.95086 126.400649 +L 343.864865 129.319004 +L 344.77887 130.778182 +L 347.520885 130.778182 +L 348.434889 130.486346 +L 349.348894 130.778182 +L 350.262899 130.778182 +L 351.176904 129.61084 +L 352.090909 123.190457 +L 353.004914 125.525142 +L 353.918919 130.194511 +L 354.832924 127.567991 +L 355.746929 123.190457 +L 356.660934 122.023115 +L 357.574939 122.023115 +L 358.488943 125.525142 +L 359.402948 126.400649 +L 360.316953 127.859826 +L 361.230958 130.778182 +L 362.144963 128.735333 +L 363.058968 130.778182 +L 363.972973 130.778182 +L 364.886978 127.276155 +L 365.800983 130.194511 +L 366.714988 126.98432 +L 367.628993 129.61084 +L 368.542998 128.735333 +L 369.457002 130.486346 +L 370.371007 130.778182 +L 371.285012 129.61084 +L 372.199017 126.400649 +L 373.113022 128.443497 +L 374.027027 128.735333 +L 374.941032 130.486346 +L 375.855037 130.778182 +L 376.769042 130.778182 +L 377.683047 130.194511 +L 378.597052 129.902675 +L 379.511057 129.027169 +L 380.425061 129.027169 +L 381.339066 130.778182 +L 382.253071 130.778182 +L 383.167076 128.151662 +L 384.081081 127.567991 +L 384.995086 130.778182 +L 385.909091 130.194511 +L 386.823096 130.778182 +L 387.737101 129.319004 +L 388.651106 130.194511 +L 389.565111 130.778182 +L 390.479115 130.486346 +L 391.39312 129.902675 +L 392.307125 129.902675 +L 393.22113 126.692484 +L 394.135135 129.902675 +L 395.04914 130.194511 +L 395.963145 128.735333 +L 396.87715 125.816977 +L 397.791155 128.735333 +L 398.70516 129.027169 +L 399.619165 130.486346 +L 400.53317 128.735333 +L 402.361179 122.314951 +L 403.275184 129.319004 +L 404.189189 127.567991 +L 405.103194 130.778182 +L 406.017199 126.108813 +L 406.931204 124.3578 +L 407.845209 129.61084 +L 408.759214 127.567991 +L 409.673219 130.778182 +L 410.587224 130.778182 +L 411.501229 125.816977 +L 412.415233 124.065964 +L 413.329238 130.486346 +L 414.243243 128.443497 +L 415.157248 130.778182 +L 416.071253 130.778182 +L 416.985258 130.486346 +L 417.899263 130.778182 +L 418.813268 130.486346 +L 419.727273 130.778182 +L 420.641278 128.735333 +L 421.555283 127.859826 +L 422.469287 124.3578 +L 423.383292 129.319004 +L 424.297297 130.778182 +L 425.211302 126.98432 +L 426.125307 130.486346 +L 427.953317 128.735333 +L 428.867322 129.319004 +L 429.781327 129.61084 +L 430.695332 130.778182 +L 431.609337 129.319004 +L 432.523342 126.98432 +L 433.437346 130.194511 +L 434.351351 129.027169 +L 435.265356 129.319004 +L 436.179361 130.778182 +L 437.093366 121.147609 +L 438.007371 127.567991 +L 438.921376 124.941471 +L 439.835381 128.735333 +L 440.749386 122.023115 +L 441.663391 130.778182 +L 442.577396 130.486346 +L 443.4914 125.233306 +L 444.405405 124.3578 +L 445.31941 125.233306 +L 446.233415 129.61084 +L 447.14742 130.778182 +L 448.061425 126.400649 +L 448.97543 122.898622 +L 449.889435 122.606786 +L 450.80344 130.778182 +L 451.717445 129.027169 +L 452.63145 130.778182 +L 453.545455 124.3578 +L 454.459459 130.194511 +L 455.373464 130.778182 +L 457.201474 130.778182 +L 458.115479 129.902675 +L 459.029484 130.486346 +L 459.943489 129.319004 +L 460.857494 129.902675 +L 461.771499 129.319004 +L 462.685504 126.400649 +L 463.599509 130.486346 +L 464.513514 122.023115 +L 465.427518 128.735333 +L 466.341523 128.443497 +L 467.255528 124.649635 +L 468.169533 128.151662 +L 469.083538 128.735333 +L 469.997543 130.778182 +L 470.911548 129.902675 +L 471.825553 130.778182 +L 472.739558 129.61084 +L 473.653563 124.941471 +L 474.567568 118.521089 +L 475.481572 126.692484 +L 476.395577 130.486346 +L 477.309582 130.778182 +L 478.223587 129.902675 +L 479.137592 130.194511 +L 480.051597 130.778182 +L 480.965602 130.778182 +L 481.879607 130.486346 +L 482.793612 130.778182 +L 483.707617 130.486346 +L 484.621622 130.778182 +L 485.535627 130.778182 +L 486.449631 130.194511 +L 488.277641 130.778182 +L 489.191646 130.778182 +L 490.105651 130.486346 +L 491.019656 130.486346 +L 491.933661 130.778182 +L 492.847666 130.486346 +L 494.675676 130.486346 +L 495.589681 130.778182 +L 496.503686 130.194511 +L 497.41769 130.486346 +L 498.331695 129.902675 +L 499.2457 129.027169 +L 500.159705 130.194511 +L 501.07371 130.486346 +L 501.987715 130.194511 +L 503.815725 129.027169 +L 504.72973 130.778182 +L 505.643735 130.486346 +L 506.55774 130.778182 +L 507.471744 130.778182 +L 508.385749 129.61084 +L 509.299754 130.778182 +L 510.213759 128.735333 +L 511.127764 130.778182 +L 512.041769 130.778182 +L 512.955774 127.567991 +L 513.869779 130.778182 +L 514.783784 125.525142 +L 515.697789 128.735333 +L 516.611794 122.606786 +L 517.525799 126.108813 +L 518.439803 130.194511 +L 519.353808 130.486346 +L 523.009828 130.486346 +L 523.923833 130.778182 +L 524.837838 130.486346 +L 525.751843 130.486346 +L 526.665848 130.778182 +L 528.493857 130.778182 +L 529.407862 129.319004 +L 530.321867 125.525142 +L 531.235872 130.778182 +L 532.149877 130.194511 +L 533.063882 129.319004 +L 533.977887 127.276155 +L 534.891892 130.778182 +L 535.805897 130.194511 +L 536.719902 130.486346 +L 537.633907 129.319004 +L 538.547912 130.486346 +L 539.461916 130.194511 +L 541.289926 130.778182 +L 542.203931 129.902675 +L 543.117936 129.902675 +L 544.031941 130.486346 +L 544.945946 125.525142 +L 545.859951 130.194511 +L 546.773956 126.692484 +L 547.687961 130.778182 +L 548.601966 129.902675 +L 549.515971 128.443497 +L 550.429975 130.778182 +L 551.34398 130.194511 +L 552.257985 130.486346 +L 553.17199 124.065964 +L 554.085995 129.61084 +L 555 130.778182 +L 555.914005 130.486346 +L 556.82801 127.859826 +L 557.742015 128.151662 +L 558.65602 130.486346 +L 559.570025 127.276155 +L 560.484029 130.778182 +L 561.398034 130.778182 +L 562.312039 129.902675 +L 563.226044 130.778182 +L 564.140049 129.319004 +L 565.054054 130.194511 +L 565.968059 130.778182 +L 566.882064 130.486346 +L 567.796069 130.486346 +L 568.710074 129.027169 +L 569.624079 130.486346 +L 570.538084 130.778182 +L 572.366093 130.778182 +L 573.280098 126.692484 +L 574.194103 123.774129 +L 575.108108 130.778182 +L 576.022113 126.400649 +L 576.936118 130.486346 +L 577.850123 130.778182 +L 578.764128 130.194511 +L 579.678133 130.194511 +L 580.592138 130.778182 +L 581.506143 118.229253 +L 582.420147 129.902675 +L 583.334152 129.027169 +L 584.248157 120.272102 +L 585.162162 128.443497 +L 586.076167 130.486346 +L 586.990172 129.61084 +L 587.904177 130.778182 +L 588.818182 130.194511 +L 589.732187 129.027169 +L 590.646192 130.486346 +L 591.560197 128.443497 +L 592.474201 129.902675 +L 593.388206 130.486346 +L 594.302211 130.194511 +L 595.216216 128.735333 +L 596.130221 130.778182 +L 597.958231 130.778182 +L 598.872236 130.194511 +L 599.786241 130.194511 +L 600.700246 130.778182 +L 601.614251 128.735333 +L 602.528256 130.194511 +L 603.44226 130.778182 +L 604.356265 130.194511 +L 605.27027 128.151662 +L 606.184275 130.778182 +L 608.012285 130.778182 +L 608.92629 130.486346 +L 609.840295 130.778182 +L 610.7543 130.486346 +L 611.668305 130.778182 +L 612.58231 128.735333 +L 613.496314 128.443497 +L 614.410319 130.194511 +L 615.324324 130.778182 +L 616.238329 128.151662 +L 617.152334 130.486346 +L 618.066339 130.486346 +L 618.980344 126.108813 +L 619.894349 128.443497 +L 620.808354 127.567991 +L 621.722359 130.778182 +L 622.636364 130.194511 +L 622.636364 130.194511 +" clip-path="url(#pcca510757b)" style="fill: none; stroke: #ff7f0e; stroke-width: 1.5; stroke-linecap: square"/> - + - + - + - + @@ -1897,12 +1970,12 @@ z - + - + @@ -1919,12 +1992,12 @@ z - + - + - + - + - + - + @@ -2044,12 +2117,12 @@ z - + - + @@ -2066,12 +2139,12 @@ z - + - + - + + + + + + + + + + + + + + + + - + - + @@ -2139,12 +2227,12 @@ z - + - + - + @@ -2152,12 +2240,12 @@ z - + - + - + @@ -2167,12 +2255,12 @@ z - + - + - + @@ -2182,12 +2270,12 @@ z - + - + - + @@ -2197,1325 +2285,1409 @@ z +L 116.064289 231.910431 +L 116.764942 229.498947 +L 117.465595 244.771675 +L 118.166248 251.470239 +L 118.866901 239.412823 +L 119.567554 239.14488 +L 120.268207 235.393684 +L 120.96886 239.14488 +L 121.669513 239.948708 +L 122.370166 250.666411 +L 123.070819 248.522871 +L 123.771472 247.719043 +L 124.472125 239.948708 +L 125.172777 213.690335 +L 125.87343 227.355407 +L 126.574083 244.235789 +L 127.274736 247.4511 +L 127.975389 251.202297 +L 129.376695 225.747751 +L 130.077348 246.111388 +L 130.778001 243.699904 +L 131.478654 237.537225 +L 132.179307 237.537225 +L 132.87996 249.862584 +L 133.580613 237.805167 +L 134.281266 234.321914 +L 134.981919 243.967847 +L 135.682572 243.967847 +L 136.383225 239.412823 +L 137.083877 247.183158 +L 137.78453 249.326699 +L 138.485183 227.623349 +L 139.185836 249.058756 +L 139.886489 248.254928 +L 140.587142 249.862584 +L 141.287795 247.986986 +L 141.988448 251.470239 +L 142.689101 251.470239 +L 143.389754 229.231005 +L 144.090407 217.173589 +L 144.79106 244.235789 +L 145.491713 245.575502 +L 146.192366 227.891292 +L 146.893019 250.934354 +L 147.593672 245.30756 +L 148.294324 242.092249 +L 148.994977 246.37933 +L 149.69563 237.00134 +L 150.396283 247.183158 +L 151.096936 250.934354 +L 151.797589 251.738182 +L 152.498242 244.235789 +L 153.198895 242.628134 +L 153.899548 242.896077 +L 154.600201 241.556364 +L 155.300854 249.058756 +L 156.001507 250.934354 +L 156.70216 250.666411 +L 157.402813 247.4511 +L 158.103466 247.986986 +L 158.804119 243.164019 +L 159.504771 250.130526 +L 160.205424 251.202297 +L 160.906077 251.470239 +L 161.60673 248.522871 +L 162.307383 249.594641 +L 163.008036 250.398469 +L 163.708689 251.738182 +L 164.409342 247.4511 +L 165.109995 247.719043 +L 165.810648 250.934354 +L 166.511301 246.647273 +L 167.211954 243.164019 +L 167.912607 240.752536 +L 168.61326 247.986986 +L 169.313913 249.058756 +L 170.014566 233.518086 +L 170.715218 250.398469 +L 171.415871 235.125742 +L 172.116524 236.733397 +L 172.817177 240.752536 +L 173.51783 234.589856 +L 174.218483 247.183158 +L 174.919136 235.929569 +L 175.619789 251.202297 +L 176.320442 234.857799 +L 177.021095 236.197512 +L 177.721748 228.159234 +L 178.422401 233.786029 +L 179.123054 240.752536 +L 179.823707 243.431962 +L 180.52436 248.522871 +L 181.225013 230.302775 +L 181.925665 226.015694 +L 182.626318 237.269282 +L 183.326971 235.929569 +L 184.027624 233.518086 +L 184.728277 247.719043 +L 185.42893 248.790813 +L 186.129583 231.374545 +L 186.830236 247.183158 +L 188.231542 234.321914 +L 189.632848 250.934354 +L 190.333501 247.986986 +L 191.034154 236.465455 +L 191.734807 235.929569 +L 192.43546 226.819522 +L 193.136113 242.628134 +L 193.836765 250.398469 +L 194.537418 250.666411 +L 195.238071 249.326699 +L 195.938724 243.164019 +L 196.639377 243.431962 +L 197.34003 247.183158 +L 198.040683 232.178373 +L 198.741336 248.522871 +L 199.441989 242.628134 +L 200.142642 239.948708 +L 200.843295 241.556364 +L 201.543948 227.087464 +L 202.244601 236.733397 +L 202.945254 235.929569 +L 203.645907 240.752536 +L 204.34656 239.14488 +L 205.047212 240.216651 +L 205.747865 187.431962 +L 206.448518 246.111388 +L 207.149171 232.178373 +L 207.849824 235.661627 +L 208.550477 228.427177 +L 209.25113 242.360191 +L 209.951783 202.972632 +L 210.652436 201.364976 +L 211.353089 206.99177 +L 212.053742 230.570718 +L 212.754395 178.321914 +L 213.455048 225.211866 +L 214.155701 246.37933 +L 214.856354 245.575502 +L 215.557007 238.341053 +L 216.257659 232.446316 +L 216.958312 229.231005 +L 217.658965 235.661627 +L 218.359618 225.479809 +L 219.060271 244.235789 +L 219.760924 246.111388 +L 220.461577 208.063541 +L 221.16223 233.786029 +L 221.862883 235.393684 +L 222.563536 246.647273 +L 223.264189 248.790813 +L 223.964842 248.254928 +L 224.665495 234.053971 +L 225.366148 187.967847 +L 226.066801 231.106603 +L 226.767454 235.393684 +L 227.468106 216.369761 +L 228.168759 244.771675 +L 228.869412 248.522871 +L 229.570065 245.30756 +L 230.270718 223.604211 +L 230.971371 239.412823 +L 231.672024 224.943923 +L 232.372677 203.240574 +L 233.07333 234.857799 +L 233.773983 241.824306 +L 234.474636 246.37933 +L 235.175289 180.465455 +L 235.875942 228.963062 +L 236.576595 243.967847 +L 237.277248 236.197512 +L 237.977901 237.537225 +L 238.678553 249.058756 +L 239.379206 247.183158 +L 240.079859 191.183158 +L 240.780512 184.752536 +L 241.481165 201.364976 +L 242.181818 243.431962 +L 242.882471 249.326699 +L 243.583124 237.537225 +L 244.283777 247.719043 +L 245.685083 226.015694 +L 246.385736 167.336268 +L 247.086389 223.872153 +L 247.787042 223.068325 +L 248.487695 227.623349 +L 249.188348 245.843445 +L 249.889001 246.647273 +L 250.589653 221.996555 +L 251.290306 237.00134 +L 251.990959 236.733397 +L 252.691612 227.891292 +L 253.392265 243.699904 +L 254.092918 249.326699 +L 254.793571 201.097033 +L 255.494224 238.07311 +L 256.194877 215.030048 +L 256.89553 209.135311 +L 257.596183 215.565933 +L 258.296836 249.862584 +L 258.997489 249.862584 +L 259.698142 224.140096 +L 260.398795 234.053971 +L 261.099448 233.518086 +L 261.8001 239.680766 +L 262.500753 243.164019 +L 263.201406 248.522871 +L 263.902059 246.37933 +L 264.602712 227.355407 +L 265.303365 244.503732 +L 266.004018 241.020478 +L 266.704671 233.250144 +L 267.405324 239.412823 +L 268.105977 249.862584 +L 268.80663 249.862584 +L 269.507283 243.431962 +L 270.207936 240.752536 +L 270.908589 246.647273 +L 271.609242 241.824306 +L 272.309895 243.967847 +L 273.010547 249.326699 +L 273.7112 247.719043 +L 274.411853 232.178373 +L 275.112506 237.269282 +L 275.813159 172.69512 +L 276.513812 215.833876 +L 277.214465 244.503732 +L 277.915118 242.628134 +L 278.615771 250.130526 +L 279.316424 233.250144 +L 280.017077 235.125742 +L 280.71773 242.360191 +L 281.418383 241.556364 +L 282.119036 236.465455 +L 282.819689 249.862584 +L 283.520342 250.398469 +L 284.220994 196.274067 +L 284.921647 239.948708 +L 285.6223 245.30756 +L 286.322953 247.4511 +L 287.023606 204.312344 +L 287.724259 247.4511 +L 288.424912 248.254928 +L 289.826218 242.360191 +L 290.526871 242.628134 +L 291.227524 225.479809 +L 291.928177 244.771675 +L 292.62883 249.862584 +L 293.329483 243.967847 +L 294.030136 245.575502 +L 294.730789 183.948708 +L 295.431441 200.293206 +L 296.132094 241.020478 +L 297.5334 245.039617 +L 298.234053 244.503732 +L 298.934706 232.714258 +L 299.635359 242.628134 +L 300.336012 243.699904 +L 301.036665 223.872153 +L 301.737318 239.948708 +L 302.437971 250.398469 +L 303.138624 251.738182 +L 303.839277 245.039617 +L 304.53993 245.575502 +L 305.240583 246.915215 +L 305.941236 243.967847 +L 306.641888 246.37933 +L 307.342541 249.594641 +L 308.043194 251.202297 +L 308.743847 243.967847 +L 309.4445 243.699904 +L 310.145153 231.910431 +L 310.845806 230.302775 +L 311.546459 250.666411 +L 312.247112 246.37933 +L 312.947765 251.738182 +L 313.648418 239.680766 +L 314.349071 240.752536 +L 315.049724 243.164019 +L 315.750377 240.484593 +L 316.45103 248.522871 +L 317.151683 245.843445 +L 317.852336 250.130526 +L 318.552988 237.537225 +L 319.253641 239.412823 +L 319.954294 244.235789 +L 320.654947 241.288421 +L 321.3556 232.446316 +L 322.056253 242.360191 +L 322.756906 248.522871 +L 323.457559 233.518086 +L 324.158212 250.398469 +L 324.858865 246.111388 +L 325.559518 244.503732 +L 326.260171 251.202297 +L 326.960824 250.934354 +L 327.661477 245.039617 +L 328.36213 245.575502 +L 329.062783 233.250144 +L 329.763435 231.642488 +L 330.464088 249.058756 +L 331.164741 249.862584 +L 331.865394 250.398469 +L 332.566047 242.628134 +L 333.2667 228.159234 +L 333.967353 236.465455 +L 334.668006 236.197512 +L 335.368659 245.30756 +L 336.069312 249.862584 +L 336.769965 245.843445 +L 337.470618 246.647273 +L 338.171271 249.862584 +L 338.871924 237.269282 +L 339.572577 247.719043 +L 340.27323 242.628134 +L 340.973882 226.015694 +L 341.674535 250.934354 +L 342.375188 248.254928 +L 343.075841 233.786029 +L 343.776494 216.905646 +L 344.477147 236.733397 +L 345.1778 248.254928 +L 345.878453 247.719043 +L 346.579106 250.398469 +L 347.279759 246.647273 +L 347.980412 232.178373 +L 348.681065 230.570718 +L 349.381718 221.46067 +L 350.082371 233.786029 +L 350.783024 248.522871 +L 351.483677 251.470239 +L 352.184329 248.522871 +L 352.884982 249.862584 +L 353.585635 239.948708 +L 354.286288 189.575502 +L 354.986941 229.498947 +L 355.687594 242.628134 +L 356.388247 241.020478 +L 357.0889 230.83866 +L 357.789553 230.83866 +L 358.490206 220.924785 +L 359.190859 198.417608 +L 359.891512 217.441531 +L 360.592165 246.37933 +L 361.292818 250.666411 +L 361.993471 224.675981 +L 362.694124 228.159234 +L 363.394776 212.618565 +L 364.095429 240.216651 +L 364.796082 236.197512 +L 365.496735 246.111388 +L 366.197388 248.254928 +L 366.898041 215.565933 +L 367.598694 238.608995 +L 368.299347 249.594641 +L 369 223.604211 +L 369.700653 164.924785 +L 370.401306 240.484593 +L 371.101959 235.929569 +L 371.802612 227.891292 +L 372.503265 228.963062 +L 373.203918 242.896077 +L 373.904571 232.446316 +L 374.605224 238.876938 +L 375.305876 246.915215 +L 376.006529 245.843445 +L 376.707182 235.929569 +L 377.407835 249.058756 +L 378.108488 243.431962 +L 378.809141 229.498947 +L 380.210447 250.934354 +L 380.9111 250.130526 +L 381.611753 245.039617 +L 382.312406 231.642488 +L 383.013059 240.752536 +L 383.713712 247.183158 +L 384.414365 247.986986 +L 385.115018 247.986986 +L 385.815671 248.790813 +L 386.516323 239.412823 +L 387.216976 235.661627 +L 387.917629 243.967847 +L 389.318935 237.537225 +L 390.019588 250.130526 +L 390.720241 249.862584 +L 391.420894 234.589856 +L 392.121547 232.982201 +L 392.8222 245.575502 +L 394.223506 250.934354 +L 394.924159 248.522871 +L 395.624812 247.719043 +L 396.325465 244.503732 +L 397.026118 228.69512 +L 397.72677 238.341053 +L 398.427423 238.876938 +L 399.128076 226.819522 +L 399.828729 249.862584 +L 400.529382 228.159234 +L 401.230035 237.269282 +L 401.930688 202.972632 +L 402.631341 239.948708 +L 403.331994 221.996555 +L 404.032647 247.4511 +L 404.7333 248.254928 +L 405.433953 230.034833 +L 406.134606 208.599426 +L 406.835259 234.589856 +L 407.535912 237.269282 +L 408.236565 243.431962 +L 408.937217 233.250144 +L 409.63787 249.058756 +L 410.338523 217.173589 +L 411.039176 235.929569 +L 411.739829 239.948708 +L 412.440482 242.628134 +L 413.141135 242.896077 +L 413.841788 246.915215 +L 414.542441 249.058756 +L 415.243094 245.843445 +L 415.943747 248.790813 +L 416.6444 250.934354 +L 417.345053 249.594641 +L 418.045706 249.326699 +L 418.746359 246.915215 +L 419.447012 217.709474 +L 420.848317 242.092249 +L 421.54897 243.164019 +L 422.249623 249.862584 +L 422.950276 250.934354 +L 423.650929 251.738182 +L 425.052235 236.733397 +L 425.752888 241.288421 +L 426.453541 219.585072 +L 427.154194 246.915215 +L 427.854847 246.111388 +L 428.5555 250.934354 +L 429.256153 247.719043 +L 429.956806 239.412823 +L 430.657459 244.771675 +L 431.358112 242.092249 +L 432.058764 245.843445 +L 432.759417 250.666411 +L 433.46007 250.130526 +L 434.160723 219.585072 +L 434.861376 220.120957 +L 435.562029 235.929569 +L 436.262682 247.719043 +L 436.963335 217.441531 +L 437.663988 246.915215 +L 438.364641 235.929569 +L 439.065294 212.886507 +L 439.765947 238.07311 +L 440.4666 209.939139 +L 441.167253 198.68555 +L 441.867906 232.714258 +L 442.568559 250.666411 +L 443.269211 249.862584 +L 443.969864 196.809952 +L 444.670517 208.867368 +L 445.37117 223.872153 +L 446.071823 224.675981 +L 446.772476 179.125742 +L 447.473129 243.967847 +L 448.173782 245.575502 +L 448.874435 217.441531 +L 449.575088 226.015694 +L 450.275741 242.628134 +L 450.976394 240.752536 +L 451.677047 226.283636 +L 452.3777 247.719043 +L 453.078353 249.862584 +L 453.779006 225.747751 +L 454.479658 235.929569 +L 455.180311 223.336268 +L 455.880964 232.178373 +L 456.581617 216.369761 +L 457.28227 239.680766 +L 457.982923 248.254928 +L 458.683576 222.264498 +L 459.384229 228.427177 +L 460.084882 231.910431 +L 460.785535 227.623349 +L 461.486188 185.824306 +L 462.186841 223.872153 +L 462.887494 241.288421 +L 463.588147 160.101818 +L 464.2888 200.829091 +L 464.989453 224.943923 +L 465.690105 241.288421 +L 466.390758 239.680766 +L 467.091411 243.967847 +L 467.792064 247.4511 +L 468.492717 211.814737 +L 469.19337 223.068325 +L 469.894023 209.671196 +L 470.594676 213.15445 +L 471.295329 225.211866 +L 471.995982 250.130526 +L 472.696635 249.594641 +L 473.397288 213.422392 +L 474.097941 235.661627 +L 474.798594 222.53244 +L 475.499247 230.570718 +L 476.1999 235.393684 +L 476.900552 242.896077 +L 477.601205 247.719043 +L 478.301858 229.76689 +L 479.002511 236.197512 +L 479.703164 216.637703 +L 480.403817 214.22622 +L 481.10447 242.896077 +L 481.805123 249.058756 +L 482.505776 251.738182 +L 483.206429 239.680766 +L 483.907082 237.805167 +L 484.607735 243.699904 +L 485.308388 235.661627 +L 486.009041 244.235789 +L 486.709694 249.326699 +L 487.410347 250.130526 +L 488.811652 234.589856 +L 489.512305 247.986986 +L 490.212958 247.986986 +L 490.913611 243.967847 +L 491.614264 240.752536 +L 492.314917 229.498947 +L 493.01557 239.14488 +L 493.716223 238.608995 +L 494.416876 246.37933 +L 495.818182 247.4511 +L 496.518835 250.398469 +L 497.219488 248.790813 +L 498.620794 232.178373 +L 499.321447 234.857799 +L 500.022099 242.896077 +L 500.722752 235.661627 +L 501.423405 249.862584 +L 502.124058 251.470239 +L 502.824711 243.699904 +L 503.525364 246.37933 +L 504.226017 233.786029 +L 504.92667 213.15445 +L 505.627323 244.235789 +L 506.327976 250.666411 +L 507.028629 249.326699 +L 507.729282 240.484593 +L 508.429935 236.733397 +L 509.130588 239.412823 +L 509.831241 238.341053 +L 510.531894 234.857799 +L 511.232546 250.934354 +L 511.933199 241.288421 +L 512.633852 228.159234 +L 513.334505 226.819522 +L 514.035158 245.575502 +L 514.735811 248.254928 +L 515.436464 211.278852 +L 516.137117 247.986986 +L 516.83777 250.666411 +L 517.538423 227.891292 +L 518.239076 246.111388 +L 518.939729 221.192727 +L 519.640382 229.498947 +L 520.341035 246.111388 +L 521.041688 251.470239 +L 521.742341 251.470239 +L 522.442993 249.862584 +L 523.143646 244.503732 +L 523.844299 245.843445 +L 524.544952 243.431962 +L 525.245605 251.470239 +L 525.946258 249.862584 +L 526.646911 251.738182 +L 527.347564 245.575502 +L 528.048217 247.986986 +L 528.74887 244.771675 +L 529.449523 243.164019 +L 530.150176 250.666411 +L 530.850829 251.202297 +L 531.551482 241.020478 +L 532.252135 220.656842 +L 532.952788 245.843445 +L 533.65344 246.111388 +L 534.354093 240.484593 +L 535.054746 248.254928 +L 535.755399 251.470239 +L 536.456052 247.4511 +L 537.156705 241.556364 +L 537.857358 243.699904 +L 538.558011 244.235789 +L 539.258664 249.326699 +L 539.959317 251.470239 +L 540.65997 251.202297 +L 541.360623 243.164019 +L 542.061276 243.967847 +L 542.761929 247.4511 +L 543.462582 237.537225 +L 544.163235 249.058756 +L 544.863887 250.934354 +L 545.56454 248.790813 +L 546.265193 250.934354 +L 546.965846 239.14488 +L 548.367152 227.623349 +L 549.067805 228.427177 +L 549.768458 247.719043 +L 550.469111 249.594641 +L 551.169764 221.728612 +L 551.870417 238.07311 +L 552.57107 246.647273 +L 553.271723 243.699904 +L 553.972376 234.589856 +L 554.673029 251.202297 +L 555.373682 246.111388 +L 556.074335 238.876938 +L 556.774987 247.4511 +L 557.47564 228.159234 +L 558.176293 234.321914 +L 558.876946 250.934354 +L 559.577599 251.470239 +L 560.278252 250.130526 +L 560.978905 239.948708 +L 561.679558 241.556364 +L 562.380211 248.790813 +L 563.080864 231.106603 +L 563.781517 249.594641 +L 564.48217 251.470239 +L 565.182823 249.058756 +L 565.883476 249.058756 +L 566.584129 241.020478 +L 567.284782 247.183158 +L 567.985434 241.288421 +L 568.686087 249.326699 +L 569.38674 251.738182 +L 570.087393 248.254928 +L 570.788046 227.087464 +L 571.488699 246.915215 +L 572.189352 241.824306 +L 572.890005 247.719043 +L 573.590658 249.862584 +L 574.291311 251.470239 +L 574.991964 244.771675 +L 575.692617 215.833876 +L 576.39327 249.862584 +L 577.093923 226.551579 +L 577.794576 243.164019 +L 578.495229 251.738182 +L 579.195881 251.470239 +L 579.896534 250.130526 +L 580.597187 248.254928 +L 581.29784 238.876938 +L 581.998493 242.092249 +L 582.699146 203.240574 +L 583.399799 249.862584 +L 584.100452 249.326699 +L 585.501758 212.082679 +L 586.202411 237.805167 +L 586.903064 246.647273 +L 587.603717 247.4511 +L 588.30437 250.666411 +L 589.005023 250.934354 +L 589.705676 249.594641 +L 590.406328 237.00134 +L 591.106981 245.575502 +L 591.807634 219.317129 +L 592.508287 237.00134 +L 593.20894 240.216651 +L 593.909593 251.202297 +L 594.610246 216.905646 +L 595.310899 211.010909 +L 596.011552 238.07311 +L 596.712205 248.522871 +L 597.412858 249.058756 +L 598.113511 250.398469 +L 598.814164 243.164019 +L 599.514817 234.053971 +L 600.21547 238.876938 +L 600.916123 235.661627 +L 601.616775 235.929569 +L 602.317428 242.360191 +L 603.018081 251.470239 +L 603.718734 234.321914 +L 604.419387 247.719043 +L 605.12004 249.594641 +L 605.820693 234.857799 +L 606.521346 244.503732 +L 607.221999 249.594641 +L 607.922652 251.202297 +L 608.623305 242.360191 +L 609.323958 241.288421 +L 610.024611 243.164019 +L 610.725264 243.699904 +L 611.425917 239.412823 +L 612.12657 251.202297 +L 612.827223 249.326699 +L 613.527875 244.503732 +L 614.228528 247.719043 +L 614.929181 244.771675 +L 615.629834 249.594641 +L 616.330487 233.518086 +L 617.03114 243.699904 +L 617.731793 250.666411 +L 618.432446 235.929569 +L 619.133099 241.020478 +L 619.833752 234.589856 +L 620.534405 229.498947 +L 621.235058 232.178373 +L 622.636364 247.986986 +L 622.636364 247.986986 +" clip-path="url(#pa9a0c28457)" style="fill: none; stroke: #1f77b4; stroke-width: 1.5; stroke-linecap: square"/> +L 116.064289 249.594641 +L 116.764942 248.522871 +L 117.465595 249.594641 +L 118.166248 251.738182 +L 118.866901 250.130526 +L 119.567554 249.326699 +L 120.268207 249.326699 +L 120.96886 249.058756 +L 121.669513 249.594641 +L 122.370166 251.470239 +L 125.172777 249.326699 +L 125.87343 249.058756 +L 126.574083 250.130526 +L 127.975389 251.738182 +L 128.676042 249.058756 +L 129.376695 249.594641 +L 130.077348 250.666411 +L 130.778001 250.934354 +L 131.478654 250.666411 +L 132.179307 251.470239 +L 132.87996 251.202297 +L 133.580613 250.130526 +L 134.281266 251.202297 +L 134.981919 249.058756 +L 135.682572 249.862584 +L 136.383225 250.398469 +L 137.083877 251.202297 +L 137.78453 251.202297 +L 138.485183 247.719043 +L 139.185836 251.470239 +L 139.886489 251.470239 +L 140.587142 251.202297 +L 141.988448 251.738182 +L 142.689101 251.470239 +L 143.389754 249.594641 +L 144.090407 247.183158 +L 145.491713 250.130526 +L 146.192366 250.130526 +L 146.893019 251.470239 +L 147.593672 250.398469 +L 148.294324 250.130526 +L 148.994977 250.934354 +L 149.69563 247.986986 +L 151.096936 251.470239 +L 151.797589 251.738182 +L 152.498242 249.326699 +L 153.899548 249.326699 +L 154.600201 250.130526 +L 155.300854 250.398469 +L 156.001507 251.202297 +L 156.70216 251.470239 +L 157.402813 250.934354 +L 158.103466 250.666411 +L 158.804119 251.202297 +L 160.205424 251.202297 +L 160.906077 251.470239 +L 161.60673 250.934354 +L 163.008036 250.934354 +L 163.708689 251.738182 +L 164.409342 251.202297 +L 165.109995 251.202297 +L 165.810648 250.934354 +L 166.511301 249.862584 +L 167.211954 248.254928 +L 167.912607 250.130526 +L 168.61326 251.202297 +L 169.313913 250.934354 +L 170.014566 250.934354 +L 170.715218 251.202297 +L 171.415871 249.594641 +L 172.116524 248.790813 +L 172.817177 249.862584 +L 173.51783 247.183158 +L 174.218483 249.862584 +L 174.919136 250.398469 +L 175.619789 251.202297 +L 176.320442 250.666411 +L 177.021095 250.666411 +L 177.721748 248.522871 +L 178.422401 249.594641 +L 179.123054 249.326699 +L 179.823707 249.326699 +L 180.52436 250.398469 +L 181.225013 246.37933 +L 182.626318 249.326699 +L 183.326971 247.719043 +L 184.027624 246.647273 +L 184.728277 250.934354 +L 185.42893 250.666411 +L 186.129583 248.790813 +L 186.830236 250.130526 +L 187.530889 248.254928 +L 188.231542 249.594641 +L 188.932195 249.594641 +L 189.632848 250.934354 +L 190.333501 251.202297 +L 191.034154 249.058756 +L 191.734807 248.254928 +L 192.43546 248.522871 +L 193.136113 250.934354 +L 193.836765 251.470239 +L 195.238071 250.934354 +L 195.938724 250.934354 +L 196.639377 249.594641 +L 197.34003 250.398469 +L 198.040683 249.058756 +L 198.741336 250.934354 +L 199.441989 250.398469 +L 200.142642 250.934354 +L 200.843295 249.326699 +L 201.543948 249.058756 +L 202.244601 249.058756 +L 202.945254 248.254928 +L 203.645907 250.398469 +L 204.34656 250.934354 +L 205.047212 250.934354 +L 205.747865 242.896077 +L 206.448518 249.058756 +L 207.149171 249.058756 +L 207.849824 247.719043 +L 209.25113 250.666411 +L 209.951783 250.666411 +L 210.652436 246.647273 +L 211.353089 246.915215 +L 212.053742 248.522871 +L 212.754395 246.915215 +L 213.455048 247.719043 +L 214.155701 250.130526 +L 214.856354 250.934354 +L 215.557007 247.719043 +L 216.257659 246.37933 +L 216.958312 247.4511 +L 217.658965 247.719043 +L 219.060271 251.202297 +L 219.760924 250.130526 +L 220.461577 247.986986 +L 221.16223 247.986986 +L 221.862883 248.790813 +L 222.563536 250.666411 +L 223.964842 251.202297 +L 224.665495 250.130526 +L 225.366148 246.647273 +L 226.066801 247.4511 +L 226.767454 248.790813 +L 227.468106 247.183158 +L 228.168759 249.862584 +L 228.869412 251.202297 +L 230.270718 249.594641 +L 230.971371 248.522871 +L 231.672024 248.790813 +L 232.372677 247.719043 +L 233.07333 249.326699 +L 233.773983 249.594641 +L 234.474636 250.934354 +L 235.175289 245.843445 +L 235.875942 248.254928 +L 236.576595 249.058756 +L 237.277248 249.326699 +L 237.977901 249.326699 +L 238.678553 250.934354 +L 239.379206 250.398469 +L 240.079859 246.111388 +L 240.780512 244.771675 +L 241.481165 247.183158 +L 242.181818 249.058756 +L 242.882471 250.398469 +L 243.583124 249.326699 +L 244.283777 250.398469 +L 244.98443 246.647273 +L 245.685083 246.915215 +L 246.385736 230.302775 +L 247.086389 248.254928 +L 247.787042 246.915215 +L 248.487695 250.666411 +L 249.188348 251.738182 +L 249.889001 249.862584 +L 250.589653 248.522871 +L 251.290306 248.522871 +L 251.990959 248.790813 +L 252.691612 247.986986 +L 254.092918 251.202297 +L 254.793571 249.326699 +L 255.494224 248.522871 +L 256.194877 247.183158 +L 256.89553 247.4511 +L 257.596183 246.111388 +L 258.296836 250.666411 +L 258.997489 251.738182 +L 259.698142 246.111388 +L 260.398795 247.4511 +L 261.099448 249.594641 +L 261.8001 247.719043 +L 262.500753 248.522871 +L 263.201406 251.470239 +L 263.902059 250.398469 +L 264.602712 248.522871 +L 265.303365 249.594641 +L 266.004018 248.254928 +L 266.704671 246.647273 +L 268.105977 250.934354 +L 268.80663 251.202297 +L 269.507283 249.326699 +L 270.207936 247.986986 +L 270.908589 250.130526 +L 271.609242 249.594641 +L 272.309895 249.594641 +L 273.7112 250.130526 +L 274.411853 247.183158 +L 275.112506 249.058756 +L 275.813159 249.058756 +L 276.513812 250.130526 +L 277.214465 249.326699 +L 277.915118 251.202297 +L 278.615771 250.398469 +L 279.316424 248.522871 +L 280.017077 249.326699 +L 280.71773 249.058756 +L 281.418383 248.522871 +L 282.119036 249.326699 +L 282.819689 251.202297 +L 283.520342 250.934354 +L 284.220994 247.719043 +L 284.921647 250.666411 +L 285.6223 249.862584 +L 286.322953 249.326699 +L 287.023606 246.111388 +L 287.724259 251.202297 +L 288.424912 250.666411 +L 289.125565 249.862584 +L 289.826218 250.398469 +L 290.526871 249.058756 +L 291.227524 248.254928 +L 291.928177 249.326699 +L 292.62883 250.934354 +L 293.329483 250.934354 +L 294.030136 249.594641 +L 294.730789 247.4511 +L 295.431441 247.4511 +L 296.132094 250.398469 +L 296.832747 248.790813 +L 297.5334 250.666411 +L 298.234053 249.594641 +L 298.934706 247.986986 +L 299.635359 248.790813 +L 300.336012 248.790813 +L 301.036665 247.986986 +L 301.737318 248.254928 +L 302.437971 251.202297 +L 303.138624 251.738182 +L 303.839277 250.130526 +L 304.53993 250.130526 +L 305.240583 250.398469 +L 305.941236 250.398469 +L 306.641888 250.666411 +L 308.043194 251.738182 +L 308.743847 250.398469 +L 309.4445 249.594641 +L 310.145153 249.862584 +L 310.845806 248.790813 +L 311.546459 251.202297 +L 312.247112 250.398469 +L 312.947765 251.738182 +L 313.648418 250.398469 +L 314.349071 250.398469 +L 315.049724 248.522871 +L 315.750377 247.986986 +L 316.45103 249.594641 +L 317.151683 250.666411 +L 317.852336 250.666411 +L 318.552988 248.790813 +L 319.253641 249.594641 +L 319.954294 249.862584 +L 320.654947 249.862584 +L 321.3556 249.058756 +L 322.056253 249.326699 +L 322.756906 250.666411 +L 323.457559 248.522871 +L 324.158212 251.470239 +L 324.858865 249.862584 +L 325.559518 249.862584 +L 326.260171 251.202297 +L 326.960824 250.934354 +L 327.661477 250.130526 +L 328.36213 250.130526 +L 329.062783 249.326699 +L 329.763435 249.594641 +L 330.464088 251.202297 +L 331.164741 250.934354 +L 331.865394 251.470239 +L 332.566047 250.398469 +L 333.2667 250.130526 +L 333.967353 248.790813 +L 334.668006 249.326699 +L 335.368659 250.398469 +L 336.069312 250.934354 +L 336.769965 250.398469 +L 337.470618 251.470239 +L 338.171271 250.934354 +L 338.871924 249.326699 +L 339.572577 250.130526 +L 340.27323 251.202297 +L 340.973882 248.522871 +L 341.674535 251.470239 +L 342.375188 251.202297 +L 343.075841 248.254928 +L 344.477147 249.326699 +L 345.1778 250.398469 +L 345.878453 249.862584 +L 346.579106 251.202297 +L 347.279759 250.666411 +L 347.980412 247.986986 +L 348.681065 249.862584 +L 349.381718 249.326699 +L 350.082371 249.862584 +L 350.783024 249.862584 +L 351.483677 251.470239 +L 352.184329 251.470239 +L 352.884982 250.934354 +L 353.585635 248.522871 +L 354.986941 248.522871 +L 355.687594 249.862584 +L 356.388247 249.862584 +L 357.0889 249.058756 +L 357.789553 248.790813 +L 358.490206 247.4511 +L 359.190859 249.594641 +L 359.891512 247.719043 +L 360.592165 250.130526 +L 361.292818 251.202297 +L 361.993471 250.398469 +L 362.694124 249.862584 +L 363.394776 248.254928 +L 364.095429 248.522871 +L 364.796082 249.326699 +L 365.496735 249.862584 +L 366.197388 250.130526 +L 366.898041 247.719043 +L 367.598694 248.522871 +L 368.299347 250.666411 +L 369 249.594641 +L 370.401306 249.058756 +L 371.101959 249.594641 +L 371.802612 247.719043 +L 372.503265 250.130526 +L 373.203918 250.398469 +L 373.904571 248.522871 +L 374.605224 249.058756 +L 375.305876 250.934354 +L 376.006529 250.398469 +L 376.707182 249.594641 +L 377.407835 250.934354 +L 378.108488 249.326699 +L 378.809141 248.790813 +L 379.509794 249.058756 +L 380.210447 251.202297 +L 380.9111 251.202297 +L 381.611753 249.326699 +L 382.312406 250.398469 +L 383.013059 247.986986 +L 384.414365 250.130526 +L 385.115018 250.666411 +L 385.815671 250.130526 +L 386.516323 249.058756 +L 387.216976 247.4511 +L 387.917629 248.522871 +L 388.618282 247.986986 +L 389.318935 249.058756 +L 390.019588 250.666411 +L 390.720241 250.934354 +L 391.420894 249.326699 +L 392.121547 250.666411 +L 392.8222 249.862584 +L 393.522853 250.130526 +L 394.223506 251.470239 +L 394.924159 250.934354 +L 395.624812 250.934354 +L 396.325465 251.470239 +L 397.026118 249.594641 +L 397.72677 250.398469 +L 398.427423 249.058756 +L 399.128076 250.666411 +L 399.828729 251.202297 +L 400.529382 249.058756 +L 401.230035 249.594641 +L 401.930688 249.594641 +L 402.631341 246.915215 +L 403.331994 246.647273 +L 404.032647 250.398469 +L 404.7333 250.398469 +L 405.433953 248.790813 +L 406.134606 248.790813 +L 406.835259 249.862584 +L 407.535912 249.326699 +L 408.236565 250.398469 +L 408.937217 250.666411 +L 409.63787 250.666411 +L 410.338523 248.254928 +L 411.039176 249.862584 +L 411.739829 250.666411 +L 412.440482 250.934354 +L 413.141135 249.594641 +L 413.841788 251.738182 +L 414.542441 251.470239 +L 415.243094 250.934354 +L 415.943747 250.934354 +L 416.6444 251.202297 +L 417.345053 250.666411 +L 418.045706 251.202297 +L 418.746359 250.398469 +L 419.447012 244.771675 +L 420.147664 247.4511 +L 420.848317 249.326699 +L 422.950276 250.934354 +L 423.650929 251.738182 +L 424.351582 249.594641 +L 425.052235 249.594641 +L 425.752888 249.058756 +L 426.453541 246.111388 +L 427.154194 250.666411 +L 427.854847 251.738182 +L 428.5555 251.470239 +L 429.256153 250.666411 +L 429.956806 248.254928 +L 430.657459 250.934354 +L 431.358112 250.130526 +L 432.058764 248.522871 +L 432.759417 251.202297 +L 433.46007 251.202297 +L 434.160723 250.130526 +L 434.861376 247.986986 +L 435.562029 248.790813 +L 436.262682 249.862584 +L 436.963335 249.326699 +L 437.663988 250.934354 +L 438.364641 250.666411 +L 439.065294 248.254928 +L 439.765947 249.326699 +L 440.4666 247.183158 +L 441.167253 246.647273 +L 441.867906 247.183158 +L 442.568559 251.202297 +L 443.269211 251.738182 +L 443.969864 247.986986 +L 444.670517 246.111388 +L 445.37117 247.986986 +L 446.071823 246.647273 +L 446.772476 243.431962 +L 447.473129 249.594641 +L 448.173782 249.326699 +L 448.874435 247.4511 +L 449.575088 247.183158 +L 450.275741 248.254928 +L 450.976394 248.790813 +L 451.677047 247.986986 +L 452.3777 249.862584 +L 453.078353 250.934354 +L 453.779006 247.719043 +L 455.180311 248.254928 +L 455.880964 246.915215 +L 456.581617 247.4511 +L 457.28227 247.719043 +L 457.982923 250.666411 +L 458.683576 245.843445 +L 459.384229 245.843445 +L 460.084882 243.967847 +L 460.785535 247.183158 +L 461.486188 247.183158 +L 462.186841 249.862584 +L 462.887494 249.058756 +L 463.588147 247.986986 +L 464.2888 245.843445 +L 464.989453 248.522871 +L 465.690105 249.058756 +L 466.390758 249.326699 +L 467.091411 249.326699 +L 467.792064 249.862584 +L 468.492717 246.647273 +L 469.19337 247.183158 +L 469.894023 245.039617 +L 470.594676 247.986986 +L 471.295329 247.183158 +L 471.995982 250.934354 +L 472.696635 251.202297 +L 473.397288 243.967847 +L 474.097941 247.4511 +L 474.798594 245.575502 +L 475.499247 246.37933 +L 476.1999 249.594641 +L 476.900552 250.398469 +L 477.601205 250.398469 +L 478.301858 248.522871 +L 479.002511 249.326699 +L 479.703164 247.183158 +L 480.403817 246.915215 +L 481.10447 249.594641 +L 481.805123 249.862584 +L 482.505776 251.738182 +L 483.206429 248.522871 +L 483.907082 248.254928 +L 484.607735 249.058756 +L 485.308388 244.771675 +L 486.009041 249.326699 +L 486.709694 251.470239 +L 487.410347 250.934354 +L 488.110999 249.058756 +L 488.811652 249.594641 +L 489.512305 249.594641 +L 490.212958 250.666411 +L 490.913611 250.666411 +L 491.614264 251.202297 +L 492.314917 250.666411 +L 493.01557 249.326699 +L 493.716223 249.058756 +L 494.416876 249.326699 +L 495.117529 250.130526 +L 495.818182 249.594641 +L 496.518835 250.666411 +L 497.219488 249.594641 +L 497.920141 248.790813 +L 498.620794 248.522871 +L 499.321447 248.522871 +L 500.022099 249.862584 +L 500.722752 246.915215 +L 501.423405 251.470239 +L 502.124058 251.470239 +L 502.824711 249.058756 +L 503.525364 250.398469 +L 504.226017 250.398469 +L 504.92667 248.254928 +L 506.327976 251.202297 +L 507.028629 250.398469 +L 507.729282 249.326699 +L 508.429935 248.522871 +L 509.130588 249.058756 +L 509.831241 247.4511 +L 510.531894 249.594641 +L 511.232546 250.934354 +L 511.933199 250.130526 +L 512.633852 246.647273 +L 513.334505 247.986986 +L 514.035158 250.666411 +L 514.735811 250.130526 +L 515.436464 248.522871 +L 516.83777 251.470239 +L 517.538423 249.594641 +L 518.239076 250.130526 +L 518.939729 249.594641 +L 519.640382 248.790813 +L 520.341035 250.398469 +L 521.041688 251.470239 +L 521.742341 251.470239 +L 522.442993 250.666411 +L 523.143646 250.130526 +L 523.844299 250.130526 +L 524.544952 249.058756 +L 525.245605 251.470239 +L 525.946258 250.934354 +L 526.646911 251.738182 +L 527.347564 250.398469 +L 528.048217 249.862584 +L 528.74887 249.594641 +L 529.449523 248.522871 +L 530.150176 251.202297 +L 530.850829 251.470239 +L 531.551482 249.326699 +L 532.252135 249.594641 +L 532.952788 250.130526 +L 533.65344 250.398469 +L 534.354093 249.862584 +L 535.054746 251.470239 +L 535.755399 251.738182 +L 536.456052 250.934354 +L 537.156705 250.398469 +L 537.857358 249.058756 +L 538.558011 251.202297 +L 539.258664 250.666411 +L 539.959317 251.470239 +L 540.65997 251.202297 +L 541.360623 250.130526 +L 542.061276 249.594641 +L 542.761929 250.130526 +L 543.462582 249.058756 +L 544.163235 250.666411 +L 544.863887 251.470239 +L 545.56454 250.130526 +L 546.265193 251.202297 +L 546.965846 250.666411 +L 547.666499 250.666411 +L 548.367152 248.522871 +L 549.067805 249.594641 +L 549.768458 250.934354 +L 550.469111 251.202297 +L 551.169764 249.594641 +L 551.870417 249.594641 +L 552.57107 250.666411 +L 553.271723 249.594641 +L 553.972376 249.594641 +L 554.673029 251.470239 +L 555.373682 249.594641 +L 556.074335 249.326699 +L 556.774987 250.666411 +L 557.47564 249.594641 +L 558.176293 249.326699 +L 558.876946 251.202297 +L 559.577599 251.738182 +L 560.278252 250.130526 +L 560.978905 249.594641 +L 561.679558 250.666411 +L 563.080864 250.130526 +L 563.781517 250.666411 +L 564.48217 251.470239 +L 565.182823 250.130526 +L 565.883476 250.130526 +L 566.584129 249.326699 +L 567.284782 249.862584 +L 567.985434 249.862584 +L 568.686087 250.934354 +L 569.38674 251.738182 +L 570.087393 251.202297 +L 570.788046 250.398469 +L 571.488699 250.398469 +L 572.189352 250.934354 +L 572.890005 250.130526 +L 573.590658 250.934354 +L 574.291311 251.470239 +L 574.991964 250.398469 +L 575.692617 249.862584 +L 576.39327 250.130526 +L 577.093923 249.058756 +L 577.794576 249.594641 +L 578.495229 251.738182 +L 579.195881 251.470239 +L 579.896534 250.398469 +L 580.597187 249.862584 +L 581.29784 249.058756 +L 581.998493 249.594641 +L 582.699146 245.039617 +L 583.399799 251.202297 +L 584.100452 250.666411 +L 585.501758 247.183158 +L 586.202411 248.790813 +L 586.903064 249.862584 +L 587.603717 250.398469 +L 588.30437 251.202297 +L 589.005023 251.202297 +L 589.705676 250.130526 +L 590.406328 248.254928 +L 591.106981 249.862584 +L 591.807634 246.915215 +L 592.508287 246.915215 +L 593.20894 251.202297 +L 593.909593 251.470239 +L 594.610246 246.37933 +L 595.310899 246.915215 +L 596.011552 247.183158 +L 596.712205 249.594641 +L 597.412858 250.130526 +L 598.113511 251.202297 +L 598.814164 249.594641 +L 599.514817 248.522871 +L 600.21547 249.862584 +L 600.916123 246.111388 +L 602.317428 250.666411 +L 603.018081 251.470239 +L 603.718734 247.986986 +L 605.12004 250.666411 +L 605.820693 248.254928 +L 606.521346 249.862584 +L 607.221999 250.934354 +L 607.922652 251.202297 +L 608.623305 249.862584 +L 609.323958 248.790813 +L 610.725264 249.862584 +L 611.425917 249.594641 +L 612.12657 251.202297 +L 612.827223 251.202297 +L 613.527875 249.058756 +L 614.228528 249.058756 +L 614.929181 249.326699 +L 615.629834 250.398469 +L 616.330487 248.790813 +L 617.731793 251.470239 +L 618.432446 243.431962 +L 619.133099 247.986986 +L 619.833752 247.719043 +L 620.534405 248.790813 +L 621.235058 248.522871 +L 621.935711 250.934354 +L 622.636364 250.130526 +L 622.636364 250.130526 +" clip-path="url(#pa9a0c28457)" style="fill: none; stroke: #ff7f0e; stroke-width: 1.5; stroke-linecap: square"/> - + - + - + - + @@ -3642,10 +3814,10 @@ L 525.782812 183.296562 - + - + diff --git a/doc/source/tracking/traffic/traffic_data_mgmt.py b/doc/source/tracking/traffic/traffic_data_mgmt.py index 3d5293164..457646a05 100644 --- a/doc/source/tracking/traffic/traffic_data_mgmt.py +++ b/doc/source/tracking/traffic/traffic_data_mgmt.py @@ -19,7 +19,7 @@ def update_csv(string): except FileNotFoundError: updated = pd.read_csv(defaultpath + string) - # try to remove duplicate dates; sort default is ascending (30/8/22) + # remove duplicate dates; sort default is ascending updated = updated.sort_values(f"total_{string}", ignore_index=True).drop_duplicates( subset="_date", keep="last" ) diff --git a/doc/source/tracking/traffic/views.csv b/doc/source/tracking/traffic/views.csv index fa966903b..aba9e76cd 100644 --- a/doc/source/tracking/traffic/views.csv +++ b/doc/source/tracking/traffic/views.csv @@ -676,3 +676,51 @@ _date,total_views,unique_views 2022-09-02,17,6 2022-09-03,5,3 2022-09-04,4,3 +2022-09-05,9,7 +2022-09-06,56,14 +2022-09-07,24,8 +2022-09-08,122,19 +2022-09-09,56,19 +2022-09-10,44,3 +2022-09-11,3,2 +2022-09-12,131,21 +2022-09-13,153,19 +2022-09-14,52,18 +2022-09-15,13,9 +2022-09-16,11,7 +2022-09-17,6,3 +2022-09-19,33,9 +2022-09-20,67,13 +2022-09-21,49,8 +2022-09-22,61,22 +2022-09-23,60,13 +2022-09-24,36,5 +2022-09-25,2,2 +2022-09-26,66,15 +2022-09-27,16,10 +2022-09-28,9,5 +2022-09-29,64,14 +2022-09-30,28,8 +2022-10-01,9,4 +2022-10-02,3,3 +2022-10-03,36,8 +2022-10-04,40,12 +2022-10-05,33,10 +2022-10-06,31,8 +2022-10-07,47,9 +2022-10-08,3,3 +2022-10-09,10,3 +2022-10-10,28,11 +2022-10-11,16,11 +2022-10-12,27,10 +2022-10-13,9,6 +2022-10-14,69,12 +2022-10-15,31,7 +2022-10-16,5,2 +2022-10-17,60,32 +2022-10-18,41,15 +2022-10-19,65,16 +2022-10-20,84,12 +2022-10-21,74,13 +2022-10-22,42,4 +2022-10-23,15,7 From 5109fc5545d6ccaf5cbe1106da6b8a732bbd8a8e Mon Sep 17 00:00:00 2001 From: Jessica Scheick Date: Fri, 28 Oct 2022 13:15:02 -0400 Subject: [PATCH 42/44] update cloud tutorial to work with publicly accessible cloud data (#381) * code and notebook updates for cloud access * change `s3urls` keyword to `cloud` --- .../IS2_cloud_data_access.ipynb | 37 ++++++++++--------- icepyx/core/granules.py | 24 ++++++------ icepyx/core/query.py | 16 ++++---- 3 files changed, 40 insertions(+), 37 deletions(-) diff --git a/doc/source/example_notebooks/IS2_cloud_data_access.ipynb b/doc/source/example_notebooks/IS2_cloud_data_access.ipynb index 999abf23a..fdf24146e 100644 --- a/doc/source/example_notebooks/IS2_cloud_data_access.ipynb +++ b/doc/source/example_notebooks/IS2_cloud_data_access.ipynb @@ -4,14 +4,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# ICESat-2 AWS cloud data access (BETA ONLY)\n", + "# ICESat-2 AWS cloud data access\n", "This notebook ({nb-download}`download `) illustrates the use of icepyx for accessing ICESat-2 data currently available through the AWS (Amazon Web Services) us-west2 hub s3 data bucket.\n", "\n", - "## Critical Caveats\n", - "***Please do not contact us saying this does not work until you have read this section in detail***\n", - "1. ICESat-2 data is not currently publicly available on the cloud (and will not likely be until at least the end of 2021). A limited subset is currently available in an s3 bucket to developers and beta testers who have been registered with NSIDC.\n", + "## Notes\n", + "1. ICESat-2 data became publicly available on the cloud on 29 September 2022. Thus, access methods and example workflows are still being developed by NSIDC, and the underlying code in icepyx will need to be updated now that these data (and the associated metadata) are available. We appreciate your patience and contributions (e.g. reporting bugs, sharing your code, etc.) during this transition!\n", "2. This example and the code it describes are part of ongoing development. Current limitations to using these features are described throughout the example, as appropriate.\n", - "3. You **MUST** be working within an AWS instance. Otherwise, you will get a permissions error." + "3. You **MUST** be working within an AWS instance. Otherwise, you will get a permissions error.\n", + "4. Authentication is still more steps than we'd like. We're working to address this - let us know if you'd like to join the conversation!" ] }, { @@ -27,9 +27,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Create an icepyx Query object\n", - "\n", - "In order to develop and test cloud data access functionality, here we search for an arbitrary granule over Greenland that was previously determined to be available on s3 using [Earthdata Search](https://search.earthdata.nasa.gov/). s3 availability is not yet included in CMR metadata, so it cannot be determined programmatically." + "Create an icepyx Query object" ] }, { @@ -58,8 +56,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Construct the granule s3 urls\n", - "Since cloud data available is not yet included as part of the standard granule metadata, there is no way for us to check whether or not these s3 bucket urls are valid, since they are constructed from other granule metadata. Thus, you may get FileNotFound Errors when trying to use these urls." + "## Get the granule s3 urls\n", + "You must specify `cloud=True` to get the needed s3 urls.\n", + "This function returns a list containing the list of the granule IDs and a list of the corresponding urls." ] }, { @@ -68,7 +67,7 @@ "metadata": {}, "outputs": [], "source": [ - "gran_ids = reg.avail_granules(ids=True, s3urls=True)\n", + "gran_ids = reg.avail_granules(ids=True, cloud=True)\n", "gran_ids" ] }, @@ -77,7 +76,9 @@ "metadata": {}, "source": [ "## Log in to Earthdata and generate an s3 token\n", - "You can use icepyx's existing login functionality to generate your s3 data access token, which should be good for five hours. We currently do not have this set up to automatically renew, but if you're interested in adding this functionality please get in touch or submit a PR!" + "You can use icepyx's existing login functionality to generate your s3 data access token, which will be valid for *one* hour.\n", + "\n", + "We currently do not have this set up to automatically renew, but [earthaccess](), which icepyx will soon be adopting for authentication, is working on handling the limits imposed by expiring s3 tokens. If you're interested in working on helping icepyx and NSIDC (and DAACs more broadly) address these challenges, please get in touch or submit a PR. Documentation/example testers are always appreciated (so you don't have to understand the code)!" ] }, { @@ -88,7 +89,7 @@ }, "outputs": [], "source": [ - "reg.earthdata_login(\"icepyx_dev\",\"icepyx_dev@gmail.com\", s3token=True)" + "reg.earthdata_login(\"icepyx_devteam\",\"icepyx_dev@gmail.com\", s3token=True)" ] }, { @@ -132,7 +133,7 @@ "metadata": {}, "source": [ "## Select an s3 url and access the data\n", - "Development is underway for data read in capabilities, which will include options for cloud data access. Stay tuned and we'd love for you to join us and contribute!\n", + "Data read in capabilities for cloud data are coming soon in icepyx (targeted Winter 2022-2023). Stay tuned and we'd love for you to join us and contribute!\n", "\n", "**Note: If you get a PermissionDenied Error when trying to read in the data, you may not be sending your request from an AWS hub in us-west2. We're currently working on how to alert users if they will not be able to access ICESat-2 data in the cloud for this reason**" ] @@ -143,6 +144,8 @@ "metadata": {}, "outputs": [], "source": [ + "# the first index, [1], gets us into the list of s3 urls\n", + "# the second index, [0], gets us the first entry in that list.\n", "s3url = gran_ids[1][0]\n", "# s3url = 's3://nsidc-cumulus-prod-protected/ATLAS/ATL03/004/2019/11/30/ATL03_20191130221008_09930503_004_01.h5'" ] @@ -178,9 +181,9 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python [conda env:notebook] *", "language": "python", - "name": "python3" + "name": "conda-env-notebook-py" }, "language_info": { "codemirror_mode": { @@ -192,7 +195,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.4" + "version": "3.8.6" } }, "nbformat": 4, diff --git a/icepyx/core/granules.py b/icepyx/core/granules.py index 7a58df789..5a7972963 100644 --- a/icepyx/core/granules.py +++ b/icepyx/core/granules.py @@ -35,7 +35,7 @@ def info(grans): # DevNote: currently this fn is not tested # DevNote: could add flag to separate ascending and descending orbits based on ATL03 granule region -def gran_IDs(grans, ids=True, cycles=False, tracks=False, dates=False, s3urls=False): +def gran_IDs(grans, ids=True, cycles=False, tracks=False, dates=False, cloud=False): """ Returns a list of granule information for each granule dictionary in the input list of granule dictionaries. Granule info may be from a list of those available from NSIDC (for ordering/download) @@ -53,7 +53,7 @@ def gran_IDs(grans, ids=True, cycles=False, tracks=False, dates=False, s3urls=Fa Return a list of the available Reference Ground Tracks (RGTs) for the granule dictionary dates : boolean, default False Return a list of the available dates for the granule dictionary. - s3urls : boolean, default False + cloud : boolean, default False Return a a list of AWS s3 urls for the available granules in the granule dictionary. Note: currently, NSIDC does not provide metadata on which granules are available on s3. Thus, all of the urls may not be valid and may return FileNotFoundErrors. @@ -76,8 +76,6 @@ def gran_IDs(grans, ids=True, cycles=False, tracks=False, dates=False, s3urls=Fa if int(gran["producer_granule_id"][3:5]) > 13: continue - # ultimately use this to get the s3urls from the metadata - # gran_s3urls.append(gran["links"][]) else: # PRD: ICESat-2 product @@ -112,9 +110,14 @@ def gran_IDs(grans, ids=True, cycles=False, tracks=False, dates=False, s3urls=Fa gran_dates.append( str(datetime.datetime(year=int(YY), month=int(MM), day=int(DD)).date()) ) - gran_s3urls.append( - f"s3://nsidc-cumulus-prod-protected/ATLAS/{PRD}/{RL}/{YY}/{MM}/{DD}/{producer_granule_id}" - ) + + try: + for link in gran["links"]: + if link["href"].startswith("s3") and link["href"].endswith(".h5"): + gran_s3urls.append(link["href"]) + except KeyError: + pass + # list of granule parameters gran_list = [] # granule IDs @@ -130,12 +133,7 @@ def gran_IDs(grans, ids=True, cycles=False, tracks=False, dates=False, s3urls=Fa if dates: gran_list.append(gran_dates) # AWS s3 url - if s3urls: - warnings.filterwarnings("always") - warnings.warn( - "You MUST be pre-authenticated by NSIDC as a beta tester to have cloud access to ICESat-2 data", - UserWarning, - ) + if cloud: gran_list.append(gran_s3urls) # return the list of granule parameters return gran_list diff --git a/icepyx/core/query.py b/icepyx/core/query.py index 1020d1a0b..a13c61345 100644 --- a/icepyx/core/query.py +++ b/icepyx/core/query.py @@ -908,7 +908,7 @@ def is_ec2(): self._email = email # DevGoal: check to make sure the see also bits of the docstrings work properly in RTD - def avail_granules(self, ids=False, cycles=False, tracks=False, s3urls=False): + def avail_granules(self, ids=False, cycles=False, tracks=False, cloud=False): """ Obtain information about the available granules for the query object's parameters. By default, a complete list of available granules is @@ -926,8 +926,10 @@ def avail_granules(self, ids=False, cycles=False, tracks=False, s3urls=False): tracks : boolean, default False Indicates whether the function should return a list of RGTs. - s3urls : boolean, default False - Indicates whether the function should return a list of potential AWS s3 urls. + cloud : boolean, default False + Indicates whether the function should return data available in the cloud. + Note: except in rare cases while data is in the process of being appended to, + data available in the cloud and for download via on-premesis will be identical. Examples -------- @@ -952,16 +954,16 @@ def avail_granules(self, ids=False, cycles=False, tracks=False, s3urls=False): try: self.granules.avail except AttributeError: - self.granules.get_avail(self.CMRparams, self.reqparams) + self.granules.get_avail(self.CMRparams, self.reqparams, cloud=cloud) - if ids or cycles or tracks or s3urls: - # list of outputs in order of ids, cycles, tracks, s3urls + if ids or cycles or tracks or cloud: + # list of outputs in order of ids, cycles, tracks, cloud return granules.gran_IDs( self.granules.avail, ids=ids, cycles=cycles, tracks=tracks, - s3urls=s3urls, + cloud=cloud, ) else: return granules.info(self.granules.avail) From 4015a3dacec54687c77e3c526011d4759cfc134f Mon Sep 17 00:00:00 2001 From: Jessica Scheick Date: Fri, 28 Oct 2022 16:57:23 -0400 Subject: [PATCH 43/44] Release v0.6.4 (#385) --- doc/source/user_guide/changelog/index.rst | 10 ++++- doc/source/user_guide/changelog/v0.6.4.rst | 52 ++++++++++++++++++++++ 2 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 doc/source/user_guide/changelog/v0.6.4.rst diff --git a/doc/source/user_guide/changelog/index.rst b/doc/source/user_guide/changelog/index.rst index 34110e5fc..117e08651 100644 --- a/doc/source/user_guide/changelog/index.rst +++ b/doc/source/user_guide/changelog/index.rst @@ -6,9 +6,17 @@ icepyx ChangeLog This is the list of changes made to icepyx in between each release. Full details can be found in the `commit logs `_. -Latest Release (Version 0.6.3) +Latest Release (Version 0.6.4) ------------------------------ +.. toctree:: + :maxdepth: 2 + + v0.6.4 + +Version 0.6.3 +------------- + .. toctree:: :maxdepth: 2 diff --git a/doc/source/user_guide/changelog/v0.6.4.rst b/doc/source/user_guide/changelog/v0.6.4.rst new file mode 100644 index 000000000..e23cccb23 --- /dev/null +++ b/doc/source/user_guide/changelog/v0.6.4.rst @@ -0,0 +1,52 @@ +.. _whatsnew_064: + +What's new in 0.6.4 (28 October 2022) +----------------------------------- + +These are the changes in icepyx 0.6.4 See :ref:`release` for a full changelog +including other versions of icepyx. + + +New Features +~~~~~~~~~~~~ + +- create spatial class, automatic polygon closure functionality (#322) +- add cross-date line flag and handling (including in function to create geodataframe) (#331) + + +Bug fixes +~~~~~~~~~ + +- fixed several geospatial/cross-date line issues (see New Features) + + +Deprecations +~~~~~~~~~~~~ + +- in `ipx.Query.avail_granules` and `ipx.core.granules.gran_IDs`, + the `s3urls` keyword has been changed to `cloud`. + + +Maintenance +^^^^^^^^^^^ + +- add existing contributors using the AllContributors bot (#332-333, #335-360, #365-368, #370-371) +- clean up after adding all contribs via bot (#334) +- add provider flag to CMR request (needed with new cloud availability) (#380) +- update traffic data and scripts (#363, #369, #383) +- enable support for Python 3.10 and 3.11 (#372) + + +Documentation +^^^^^^^^^^^^^ + +- update bib file and contribs formatting (#364) +- update cloud tutorial to work with publicly accessible cloud data (#381) + + + + +Contributors +~~~~~~~~~~~~ + +.. contributors:: v0.6.3..v0.6.4|HEAD \ No newline at end of file From 66201bd8e74e9609941b60acc9e4193116d72fe2 Mon Sep 17 00:00:00 2001 From: Jessica Scheick Date: Mon, 31 Oct 2022 12:09:06 -0400 Subject: [PATCH 44/44] update options file version for testing (#387) --- doc/source/user_guide/changelog/v0.6.4.rst | 1 + .../tests/{ATL06v04_options.json => ATL06v05_options.json} | 0 icepyx/tests/test_behind_NSIDC_API_login.py | 6 +++--- 3 files changed, 4 insertions(+), 3 deletions(-) rename icepyx/tests/{ATL06v04_options.json => ATL06v05_options.json} (100%) diff --git a/doc/source/user_guide/changelog/v0.6.4.rst b/doc/source/user_guide/changelog/v0.6.4.rst index e23cccb23..2f0adf132 100644 --- a/doc/source/user_guide/changelog/v0.6.4.rst +++ b/doc/source/user_guide/changelog/v0.6.4.rst @@ -35,6 +35,7 @@ Maintenance - add provider flag to CMR request (needed with new cloud availability) (#380) - update traffic data and scripts (#363, #369, #383) - enable support for Python 3.10 and 3.11 (#372) +- update json file with subsetting options to v005 of ATL06 (#387) Documentation diff --git a/icepyx/tests/ATL06v04_options.json b/icepyx/tests/ATL06v05_options.json similarity index 100% rename from icepyx/tests/ATL06v04_options.json rename to icepyx/tests/ATL06v05_options.json diff --git a/icepyx/tests/test_behind_NSIDC_API_login.py b/icepyx/tests/test_behind_NSIDC_API_login.py index 12f7be547..d01e1e0ec 100644 --- a/icepyx/tests/test_behind_NSIDC_API_login.py +++ b/icepyx/tests/test_behind_NSIDC_API_login.py @@ -13,7 +13,7 @@ @pytest.fixture(scope="module") def reg(): live_reg = ipx.Query( - "ATL06", [-55, 68, -48, 71], ["2019-02-22", "2019-02-28"], version="004" + "ATL06", [-55, 68, -48, 71], ["2019-02-22", "2019-02-28"], version="005" ) yield live_reg del live_reg @@ -39,8 +39,8 @@ def session(reg): def test_get_custom_options_output(session): - obs = is2ref._get_custom_options(session, "ATL06", "004") - with open("ATL06v04_options.json") as exp_json: + obs = is2ref._get_custom_options(session, "ATL06", "005") + with open("./icepyx/tests/ATL06v05_options.json") as exp_json: exp = json.load(exp_json) assert all(keys in obs.keys() for keys in exp.keys()) assert all(obs[key] == exp[key] for key in exp.keys())