internlm/SWE-Fixer-Train-110K huggingface dataset:
Repository: OBOFoundry/OBOFoundry.github.io

Issue:
Export RDF file containing prefix declarations
This can use the shacl vocab, e.g.

```
[
  sh:declare [
    sh:prefix "ZFA" ;
    sh:namespace "http://purl.obolibrary.org/obo/ZFA_"^^xsd:anyURI
  ] ,
  [
    sh:prefix "UBERON" ;
    sh:namespace "http://purl.obolibrary.org/obo/UBERON_"^^xsd:anyURI 
  ]
].
    
```




Discussion:

Resolving patch:
diff --git a/util/make-shacl-prefixes.py b/util/make-shacl-prefixes.py
new file mode 100755
--- /dev/null
+++ b/util/make-shacl-prefixes.py
@@ -0,0 +1,55 @@
+#!/usr/bin/env python3
+
+import csv
+import sys
+import yaml
+
+from argparse import ArgumentParser
+
+
+def main(args):
+  """
+  Takes ontologies.yml file and makes a triple file with SHACL prefixes.
+
+  For example, for uberon it will generate:
+
+      [ sh:prefix "UBERON" ; sh:namespace "http://purl.obolibrary.org/obo/UBERON_"]
+
+  We always assume the CURIE prefix is uppercase, unless 'preferred_prefix' is specified
+  (for mixed-case prefixes, e.g. FBbt)
+
+  This can be useful for converting an OBO class PURL to a prefix without assumption-embedding string conversions.
+  It can be used to interconvert PURLs to CURIEs.
+
+  Note that while prefixes can sometimes be seen in RDF files, this is part of the syntax and not part of the data,
+  the prefixes are expanded at parse time. The obo_prefixes.ttl file makes these explicit.
+
+  We use the SHACL vocabulary since it provides convenient predicates for putting prefixes in the domain of discourse;
+  however, it does not entail any use of SHACL
+
+  """
+  parser = ArgumentParser(description='''
+  Takes ontologies.yml file and makes a triple file with shacl prefixes''')
+  parser.add_argument('input')
+  args = parser.parse_args()
+  stream = open(args.input, 'r')
+  data = yaml.load(stream, Loader=yaml.SafeLoader)
+
+  print('@prefix sh:	<http://www.w3.org/ns/shacl#> .')
+  print('@prefix xsd:    <http://www.w3.org/2001/XMLSchema#> .')
+  print('[')
+  print(' sh:declare')
+  sep = ''
+  for ont in data['ontologies']:
+    if ont.get('is_obsolete',False):
+      continue
+    prefix = ont.get('preferredPrefix', ont['id'].upper())
+    print(f'{sep}[ sh:prefix "{prefix}" ; sh:namespace "http://purl.obolibrary.org/obo/{prefix}_"]')
+    sep = ','
+  print(']')
+    
+    
+  
+
+if __name__ == '__main__':
+  main(sys.argv)


Test patch:
Repository: OBOFoundry/OBOFoundry.github.io

Issue:
Implement schema for usages
Issue #1179 asks to add usage information to the ontology detail pages. Before we can do that, we need to standardize that information. #1008 points out that there are different formats in the registry right now. The current schema just allows the `usages` key without any constraint:

https://github.com/OBOFoundry/OBOFoundry.github.io/blob/master/util/schema/registry_schema.json#L417

So the steps are:

- [ ] implement a JSON Schema for usages based on @beckyjackson's suggestion in #1008 
- [ ] update all registry entries to conform to the new schema
- [ ] update [ontology_detail.html](https://github.com/OBOFoundry/OBOFoundry.github.io/blob/master/_layouts/ontology_detail.html) layout to add the usages #1179 


Discussion:
Good one.

I can help with fixing the metadata if needed.

Resolving patch:
diff --git a/util/validate-metadata.py b/util/validate-metadata.py
--- a/util/validate-metadata.py
+++ b/util/validate-metadata.py
@@ -79,7 +79,7 @@ def get_schema():
     with open(file, 'r') as s:
       schema = json.load(s)
   except Exception as e:
-    print('Unable to load %s: %s' % (f, str(e)))
+    print('Unable to load %s: %s' % (file, str(e)))
   return schema
 
 


Test patch:
Repository: OBOFoundry/OBOFoundry.github.io

Issue:
Names with non ASCII characters deteriorate during metadata integration
Raw data:
https://github.com/OBOFoundry/OBOFoundry.github.io/blob/master/ontology/lepao.md?plain=1#L7

Result:
https://github.com/OBOFoundry/OBOFoundry.github.io/pull/1690/files#diff-ecec67b0e1d7e17a83587c6d27b6baaaa133f42482b07bd3685c77f34b62d883R3310


Discussion:
@JCGiron Can you, until this problem is solved, change lepao.md and colao.md to use your names without the special characters?
Sure thing!
https://github.com/OBOFoundry/OBOFoundry.github.io/pull/1696
https://github.com/OBOFoundry/OBOFoundry.github.io/pull/1697

Thank you so much!
Probably can be fixed with the settings of the yaml dumper

https://github.com/OBOFoundry/OBOFoundry.github.io/blob/9e41ff3cf5c42f54c7494efe78c694c3174c5e64/util/extract-metadata.py#L221
Tried it, setting _allow_unicode_ results in 

![image](https://user-images.githubusercontent.com/7070631/146245063-6753d99a-c9ea-4919-879b-b7e7b2f9a99c.png)

That looks like JSON, that's a different one. You need `ensure_ascii=False` for JSON dumps
It was ruaml yaml.. 

https://newbedev.com/pyyaml-dump-unicode-with-special-characters-i-e-accents

Resolving patch:
diff --git a/util/sort-ontologies.py b/util/sort-ontologies.py
--- a/util/sort-ontologies.py
+++ b/util/sort-ontologies.py
@@ -73,9 +73,8 @@ def sort_ontologies(data, sort_order):
 def write_data(data, output):
   '''Given the ontologies data as a dictionary and an output YAML file to
   write to, write the data to the file. '''
-  yaml_str = yaml.dump(data)
   with open(output, 'w') as f:
-    f.write(yaml_str)
+    yaml.safe_dump(data, f, allow_unicode=True)
 
 
 if __name__ == '__main__':
diff --git a/util/yaml2json.py b/util/yaml2json.py
--- a/util/yaml2json.py
+++ b/util/yaml2json.py
@@ -15,5 +15,5 @@
 with open(args.yaml_file, 'r') as stream:
   data = yaml.load(stream, Loader=yaml.SafeLoader)
 data['@context'] = "http://obofoundry.github.io/registry/context.jsonld"
-json = json.dumps(data, sort_keys=True, indent=4, separators=(',', ': '))
+json = json.dumps(data, sort_keys=True, indent=4, ensure_ascii=False, separators=(',', ': '))
 print(json)


Test patch:
Repository: OBOFoundry/OBOFoundry.github.io

Issue:
Generalize "biochemistry" domain to "chemistry and biochemistry"
I dont know the difference - we could rename biochemistry to `chemistry` or `chemistry and biochemistry`? Maybe adding `chemistry` and `biochemistry` makes it hard for some people to chose which is more suitable?

_Originally posted by @matentzn in https://github.com/OBOFoundry/OBOFoundry.github.io/pull/1884#discussion_r866634979_


Discussion:

Resolving patch:
diff --git a/util/bulk_domain_rename.py b/util/bulk_domain_rename.py
new file mode 100644
--- /dev/null
+++ b/util/bulk_domain_rename.py
@@ -0,0 +1,37 @@
+"""This script bulk renames a given domain.
+
+Run with: ``python bulk_domain_rename.py <old> <new>``.
+
+Author: `Charles Tapley Hoyt <https://cthoyt.com>`_.
+"""
+
+import pathlib
+
+import click
+
+HERE = pathlib.Path(__file__).parent.resolve()
+ONTOLOGY_DIRECTORY = HERE.parent.joinpath("ontology").resolve()
+
+
+@click.command()
+@click.argument("old_label")
+@click.argument("new_label")
+def main(old_label: str, new_label: str):
+    """Rename domains across all ontologies."""
+    old_line = f"domain: {old_label}"
+    new_line = f"domain: {new_label}"
+
+    for path in ONTOLOGY_DIRECTORY.glob("*.md"):
+        with path.open() as file:
+            lines = [line.rstrip("\n") for line in file]
+
+        with path.open("w") as file:
+            for line in lines:
+                if line == old_line:
+                    print(new_line, file=file)
+                else:
+                    print(line, file=file)
+
+
+if __name__ == "__main__":
+    main()


Test patch:
Repository: OBOFoundry/OBOFoundry.github.io

Issue:
OBO prefix map should include prefixes of obsolete ontologies
I think OBO prefix map should contain prefixes of obsolete ontologies. Sometimes, like [here](https://github.com/OBOFoundry/OBOFoundry.github.io/pull/1974/files) one ontology is merged into another, with identifiers and all - it would still be useful to be able to loop these up.

@jamesaoverton objects to that?


Discussion:
I agree that the prefix map should keep all old prefixes. In other words, we should only be adding more prefixes to the prefix map, not removing them.

We don't want to accidentally reuse a prefix for a new project B, when there may be old data / links out there that used the same prefix for an obsolete project A.
Thank you!

Resolving patch:
diff --git a/util/make-shacl-prefixes.py b/util/make-shacl-prefixes.py
--- a/util/make-shacl-prefixes.py
+++ b/util/make-shacl-prefixes.py
@@ -43,8 +43,9 @@ def main(args):
     print(" sh:declare")
     sep = ""
     for ont in data["ontologies"]:
-        if ont.get("is_obsolete", False):
-            continue
+        # if ont.get("is_obsolete", False):
+        #    continue
+        # See https://github.com/OBOFoundry/OBOFoundry.github.io/issues/1976
         prefix = ont.get("preferredPrefix", ont["id"].upper())
         print(
             f'{sep}[ sh:prefix "{prefix}" ; sh:namespace "http://purl.obolibrary.org/obo/{prefix}_"]'


Test patch:
Repository: OBOFoundry/OBOFoundry.github.io

Issue:
JSON-LD context does not expand as intended
https://purl.obolibrary.org/meta/obo_context.jsonld

We can't have trailing underscores on expansions (and have it behave as expected). Sorry, I don't make the rules

More context here:

- https://github.com/w3c/json-ld-syntax/issues/329

These would all have to be modified to be nested

```json
      "RO": {
         "@id": "http://purl.obolibrary.org/obo/RO_",
         "@prefix": true
      }
```


Discussion:
@erik-whiting do you feel comfortable taking this on?
There’s a few design decisions here. Do we continue my original path of
hacking this with Perl? Switch to a more robust approach with rdflib?

On Sat, Jul 29, 2023 at 7:23 AM Nico Matentzoglu ***@***.***>
wrote:

> @erik-whiting <https://github.com/erik-whiting> do you feel comfortable
> taking this on?
>
> —
> Reply to this email directly, view it on GitHub
> <https://github.com/OBOFoundry/OBOFoundry.github.io/issues/2410#issuecomment-1656741809>,
> or unsubscribe
> <https://github.com/notifications/unsubscribe-auth/AAAMMOJ75OO7CDCXMYSGEXTXSUMFJANCNFSM6AAAAAA224EHX4>
> .
> You are receiving this because you authored the thread.Message ID:
> ***@***.***>
>


Resolving patch:
diff --git a/util/processor.py b/util/processor.py
--- a/util/processor.py
+++ b/util/processor.py
@@ -109,7 +109,10 @@ def has_obo_prefix(obj):
     for obj in ontologies:
         if has_obo_prefix(obj):
             prefix = obj.get("preferredPrefix") or obj["id"].upper()
-            prefix_map[prefix] = "http://purl.obolibrary.org/obo/" + prefix + "_"
+            prefix_map[prefix] = {
+                "@id": "http://purl.obolibrary.org/obo/" + prefix + "_",
+                "@prefix": True,
+            }
 
     print(
         dumps(


Test patch:
Repository: geopandas/geopandas

Issue:
Minor typo?
It looks like line 121 in geoseries.py (in function `_series_unary_op`) should read: 

``` python
return Series([getattr(geom, op) for geom in self],
```

rather than

``` python
return GeoSeries([getattr(geom, op) for geom in self],
```

This is a very minor bug, so I didn't bother with a PR, but am happy to do one if that helps.



Discussion:

Resolving patch:
diff --git a/geopandas/geoseries.py b/geopandas/geoseries.py
--- a/geopandas/geoseries.py
+++ b/geopandas/geoseries.py
@@ -118,7 +118,7 @@ def _geo_unary_op(self, op):
 
     def _series_unary_op(self, op):
         """Unary operation that returns a Series"""
-        return GeoSeries([getattr(geom, op) for geom in self],
+        return Series([getattr(geom, op) for geom in self],
                          index=self.index)
 
     #


Test patch:
diff --git a/tests/test_geoseries.py b/tests/test_geoseries.py
--- a/tests/test_geoseries.py
+++ b/tests/test_geoseries.py
@@ -1,6 +1,7 @@
 import unittest
 import numpy as np
 from numpy.testing import assert_array_equal
+from pandas import Series
 from shapely.geometry import Polygon, Point, LineString
 from shapely.geometry.base import BaseGeometry
 from geopandas import GeoSeries
@@ -38,6 +39,7 @@ def setUp(self):
                                    crs={'init': 'epsg:4326', 'no_defs': True})
 
     def test_area(self):
+        assert type(self.g1.area) is Series
         assert_array_equal(self.g1.area.values, np.array([0.5, 1.0]))
 
     def test_in(self):
Repository: geopandas/geopandas

Issue:
to_file(): 'long' isn't a valid Fiona property type
The question http://gis.stackexchange.com/questions/89206/geopandas-error-when-writing-to-file-valueerror-long-is-not-in-list revealed a bug to me.

If you pass schema={'geometry': 'Point', 'properties': {'foo': 'long'}} into fiona.open(), the type 'long' isn't found at https://github.com/Toblerity/Fiona/blob/master/src/fiona/ogrext.pyx#L973. OGR doesn't distinguish between long and int, so converting 'long' to 'int' within Fiona may help...
## But :)

Fiona will always return 'int' in the .schema attribute and this could cause trouble for programs that pass 'long' and expect it to stick. So, let's fix up geopandas so it always uses 'int' and never 'long'.



Discussion:

Resolving patch:
diff --git a/geopandas/geodataframe.py b/geopandas/geodataframe.py
--- a/geopandas/geodataframe.py
+++ b/geopandas/geodataframe.py
@@ -283,7 +283,10 @@ def to_file(self, filename, driver="ESRI Shapefile", **kwargs):
         def convert_type(in_type):
             if in_type == object:
                 return 'str'
-            return type(np.asscalar(np.zeros(1, in_type))).__name__
+            out_type = type(np.asscalar(np.zeros(1, in_type))).__name__
+            if out_type == 'long':
+                out_type = 'int'
+            return out_type
             
         def feature(i, row):
             return {


Test patch:
diff --git a/tests/test_geodataframe.py b/tests/test_geodataframe.py
--- a/tests/test_geodataframe.py
+++ b/tests/test_geodataframe.py
@@ -268,6 +268,17 @@ def test_to_file(self):
         self.assertTrue(len(df) == 5)
         self.assertTrue(np.alltrue(df['BoroName'].values == self.boros))
 
+    def test_to_file_types(self):
+        """ Test various integer type columns (GH#93) """
+        tempfilename = os.path.join(self.tempdir, 'int.shp')
+        int_types = [np.int, np.int8, np.int16, np.int32, np.int64, np.intp,
+                     np.uint8, np.uint16, np.uint32, np.uint64, np.long]
+        geometry = self.df2.geometry
+        data = dict((str(i), np.arange(len(geometry), dtype=dtype))
+                     for i, dtype in enumerate(int_types))
+        df = GeoDataFrame(data, geometry=geometry)
+        df.to_file(tempfilename)
+
     def test_mixed_types_to_file(self):
         """ Test that mixed geometry types raise error when writing to file """
         tempfilename = os.path.join(self.tempdir, 'test.shp')
Repository: geopandas/geopandas

Issue:
Remove mapquest from geocoder
The mapquest API is now only available to enterprise customers and has been removed from geopy.

See [geopy docs](https://geopy.readthedocs.org/en/1.10.0/#id4)



Discussion:

Resolving patch:
diff --git a/geopandas/tools/geocoding.py b/geopandas/tools/geocoding.py
--- a/geopandas/tools/geocoding.py
+++ b/geopandas/tools/geocoding.py
@@ -124,7 +124,6 @@ def _query(data, forward, provider, **kwargs):
     coders = {'googlev3': geopy.geocoders.GoogleV3,
               'bing': geopy.geocoders.Bing,
               'yahoo': Yahoo,
-              'mapquest': geopy.geocoders.MapQuest,
               'openmapquest': geopy.geocoders.OpenMapQuest,
               'nominatim': geopy.geocoders.Nominatim}
 


Test patch:
diff --git a/requirements.test.txt b/requirements.test.txt
--- a/requirements.test.txt
+++ b/requirements.test.txt
@@ -1,6 +1,6 @@
 psycopg2>=2.5.1
 SQLAlchemy>=0.8.3
-geopy==0.99
+geopy==1.10.0
 matplotlib>=1.2.1
 descartes>=1.0
 mock>=1.0.1  # technically not need for python >= 3.3
diff --git a/tests/test_geocode.py b/tests/test_geocode.py
--- a/tests/test_geocode.py
+++ b/tests/test_geocode.py
@@ -1,7 +1,5 @@
 from __future__ import absolute_import
 
-import sys
-
 from fiona.crs import from_epsg
 import pandas as pd
 import pandas.util.testing as tm
@@ -124,13 +122,12 @@ def test_forward(self):
 
         n = len(self.locations)
         self.assertIsInstance(g, gpd.GeoDataFrame)
-        expected = GeoSeries([Point(float(x)+0.5, float(x)) for x in range(n)],
+        expected = GeoSeries([Point(float(x) + 0.5, float(x)) for x in range(n)],
                              crs=from_epsg(4326))
         assert_geoseries_equal(expected, g['geometry'])
         tm.assert_series_equal(g['address'],
                                pd.Series(self.locations, name='address'))
 
-
     def test_reverse(self):
         with mock.patch('geopy.geocoders.googlev3.GoogleV3.reverse',
                         ReverseMock()) as m:
@@ -141,6 +138,6 @@ def test_reverse(self):
 
         expected = GeoSeries(self.points, crs=from_epsg(4326))
         assert_geoseries_equal(expected, g['geometry'])
-        tm.assert_series_equal(g['address'],
-                               pd.Series('address' + str(x) 
-                                    for x in range(len(self.points))))
+        address = pd.Series(['address' + str(x) for x in range(len(self.points))],
+                            name='address')
+        tm.assert_series_equal(g['address'], address)
Repository: geopandas/geopandas

Issue:
geodataframe.plot does not have any documentation
.plot_dataframe has a nice documentation - yet, I can't see it through `?` as I call .plot instead (a wrapper around .plot_dataframe



Discussion:
@Casyfill You are fully correct that the `plot` docstring should be updated to match this of `plot_dataframe`. See also #107

Regarding the first version of the title of this issue, "markersize does not work on geodataframe.plot", this should be solved in master after https://github.com/geopandas/geopandas/pull/260


Resolving patch:
diff --git a/geopandas/geodataframe.py b/geopandas/geodataframe.py
--- a/geopandas/geodataframe.py
+++ b/geopandas/geodataframe.py
@@ -435,8 +435,11 @@ def copy(self, deep=True):
         return GeoDataFrame(data).__finalize__(self)
 
     def plot(self, *args, **kwargs):
+
         return plot_dataframe(self, *args, **kwargs)
 
+    plot.__doc__ = plot_dataframe.__doc__
+
 
 def _dataframe_set_geometry(self, col, drop=False, inplace=False, crs=None):
     if inplace:
diff --git a/geopandas/geoseries.py b/geopandas/geoseries.py
--- a/geopandas/geoseries.py
+++ b/geopandas/geoseries.py
@@ -239,9 +239,10 @@ def __contains__(self, other):
         else:
             return False
 
-
     def plot(self, *args, **kwargs):
         return plot_series(self, *args, **kwargs)
+    
+    plot.__doc__ = plot_series.__doc__
 
     #
     # Additional methods


Test patch:
Repository: geopandas/geopandas

Issue:
Allow 'k' number of classes greater than 9 for choropleth schemes
Setting a maximum value of 9 for choropleth schemes is unnecessarily limiting.



Discussion:
Yes, I agree. Interested in doing a PR to change this?

Yes. Is there a desire to catch k in range within geopandas or just leave it to the underlying module (e.g. PySAL). For Fisher Jenks, PySAL allows k to be from 1 to the number of unique values, and raises ValueErrors.

If you think geopandas should have a range check on k, do you have an opinion on a max k?

I think we could just leave it to PySAL to handle the `k` value


Resolving patch:
diff --git a/geopandas/plotting.py b/geopandas/plotting.py
--- a/geopandas/plotting.py
+++ b/geopandas/plotting.py
@@ -324,10 +324,6 @@ class identifier and the bins.
             scheme = 'quantiles'
             warnings.warn('Unrecognized scheme "{0}". Using "Quantiles" '
                           'instead'.format(s0), UserWarning, stacklevel=3)
-        if k < 2 or k > 9:
-            warnings.warn('Invalid k: {0} (2 <= k <= 9), setting k=5 '
-                          '(default)'.format(k), UserWarning, stacklevel=3)
-            k = 5
         binning = schemes[scheme](values, k)
         return binning
     except ImportError:


Test patch:
Repository: geopandas/geopandas

Issue:
Invalid scheme should raise exception instead of being modified to 'Quantiles'
IMO, an invalid, unsupported, or typo scheme should not [revert to using Quantiles](https://github.com/geopandas/geopandas/blob/master/geopandas/plotting.py#L324). Warning messages aren't always visible, and an unsupported scheme being used is clearly an error scenario. I think an exception should be raised.



Discussion:

Resolving patch:
diff --git a/geopandas/plotting.py b/geopandas/plotting.py
--- a/geopandas/plotting.py
+++ b/geopandas/plotting.py
@@ -318,12 +318,9 @@ class identifier and the bins.
         schemes['equal_interval'] = Equal_Interval
         schemes['quantiles'] = Quantiles
         schemes['fisher_jenks'] = Fisher_Jenks
-        s0 = scheme
         scheme = scheme.lower()
         if scheme not in schemes:
-            scheme = 'quantiles'
-            warnings.warn('Unrecognized scheme "{0}". Using "Quantiles" '
-                          'instead'.format(s0), UserWarning, stacklevel=3)
+            raise ValueError("Invalid scheme. Scheme must be in the set: %r" % schemes.keys())
         binning = schemes[scheme](values, k)
         return binning
     except ImportError:


Test patch:
diff --git a/geopandas/tests/test_plotting.py b/geopandas/tests/test_plotting.py
--- a/geopandas/tests/test_plotting.py
+++ b/geopandas/tests/test_plotting.py
@@ -290,6 +290,12 @@ def test_legend(self):
         expected = [u'0.00 - 26.07', u'26.07 - 41.97', u'41.97 - 68.89']
         self.assertEqual(labels, expected)
 
+    def test_invalid_scheme(self):
+        with self.assertRaises(ValueError):
+            scheme = 'invalid_scheme_*#&)(*#'
+            ax = self.tracts.plot(column='CRIME', scheme=scheme, k=3,
+                                  cmap='OrRd', legend=True)
+
 
 def _check_colors(collection, expected_colors, alpha=None):
Repository: geopandas/geopandas

Issue:
bbox filter from read_file doesn't take advantage of fiona filtering
In line: https://github.com/geopandas/geopandas/blob/master/geopandas/io/file.py#L28

The function goes through the trouble of checking if `bbox` is not null, but just calls `f` in `from_features` just the same.

Line 28 just needs to be changed to the intended `f_filt` to return filtered results or non-filtered if no bbox is passed in.



Discussion:
@nickwg03 Good catch! Do you want to make a pull request to fix this?

Sure, I'll make the fix here in the next day or so.


Resolving patch:
diff --git a/geopandas/io/file.py b/geopandas/io/file.py
--- a/geopandas/io/file.py
+++ b/geopandas/io/file.py
@@ -25,7 +25,7 @@ def read_file(filename, **kwargs):
             f_filt = f.filter(bbox=bbox)
         else:
             f_filt = f
-        gdf = GeoDataFrame.from_features(f, crs=crs)
+        gdf = GeoDataFrame.from_features(f_filt, crs=crs)
 
     return gdf
 


Test patch:
diff --git a/geopandas/io/tests/test_io.py b/geopandas/io/tests/test_io.py
--- a/geopandas/io/tests/test_io.py
+++ b/geopandas/io/tests/test_io.py
@@ -54,3 +54,15 @@ def test_read_file(self):
         df = self.df.rename(columns=lambda x: x.lower())
         validate_boro_df(self, df)
         self.assert_(df.crs == self.crs)
+
+    def test_filtered_read_file(self):
+        full_df_shape = self.df.shape
+        nybb_filename, nybb_zip_path = download_nybb()
+        vfs = 'zip://' + nybb_filename
+        bbox = (1031051.7879884212, 224272.49231459625, 1047224.3104931959, 244317.30894023244)
+        filtered_df = read_file(nybb_zip_path, vfs=vfs, bbox=bbox)
+        filtered_df_shape = filtered_df.shape
+        assert(full_df_shape != filtered_df_shape)
+        assert(filtered_df_shape == (2, 5))
+
+