From 6f648673f682c1ffdf88eb9d09dee24b3fb492de Mon Sep 17 00:00:00 2001 From: boX <442572328@qq.com> Date: Sun, 29 Sep 2024 19:42:19 +0800 Subject: [PATCH] updated smart_coding large model benchmark Signed-off-by: boX <442572328@qq.com> --- core/common/constant.py | 1 + .../singletask_learning.py | 5 +- core/testenvmanager/dataset/dataset.py | 68 +- docs/guides/images/ianvs_arch.png | Bin 144302 -> 121617 bytes .../Smart Coding benchmark suite Proposal.md | 4 +- examples/data/data_java.json | 2421 +++++ examples/data/data_python.json | 2343 +++++ examples/data/issue_comment.json | 8264 +++++++++++++++++ examples/data/request_issue.py | 49 + examples/data/test_data.json | 38 + .../singletask_learning_bench/imgs/img.png | Bin 0 -> 344769 bytes examples/llm_simple_qa/README.md | 54 + examples/llm_simple_qa/benchmarkingjob.yaml | 72 + .../llm_simple_qa/testalgorithms/data.jsonl | 23 + .../testalgorithms/gen/basemodel.py | 98 + .../testalgorithms/gen/gen_algorithm.yaml | 18 + .../testalgorithms/gen/op_eval.py | 21 + examples/llm_simple_qa/testenv/acc.py | 45 + examples/llm_simple_qa/testenv/testenv.yaml | 14 + .../comment/benchmarkingjob.yaml | 72 + .../comment/testalgorithms/gen/basemodel.py | 130 + .../testalgorithms/gen/gen_algorithm.yaml | 18 + .../comment/testalgorithms/gen/op_eval.py | 21 + .../comment/testenv/llm_judgement.py | 47 + .../comment/testenv/testenv.yaml | 14 + .../issue/benchmarkingjob.yaml | 72 + .../issue/testalgorithms/gen/basemodel.py | 130 + .../testalgorithms/gen/gen_algorithm.yaml | 18 + .../issue/testalgorithms/gen/op_eval.py | 21 + .../issue/testenv/llm_judgement.py | 47 + .../issue/testenv/testenv.yaml | 14 + 31 files changed, 14133 insertions(+), 9 deletions(-) create mode 100644 examples/data/data_java.json create mode 100644 examples/data/data_python.json create mode 100644 examples/data/issue_comment.json create mode 100644 examples/data/request_issue.py create mode 100644 examples/data/test_data.json create mode 100644 examples/government/singletask_learning_bench/imgs/img.png create mode 100644 examples/llm_simple_qa/README.md create mode 100644 examples/llm_simple_qa/benchmarkingjob.yaml create mode 100644 examples/llm_simple_qa/testalgorithms/data.jsonl create mode 100644 examples/llm_simple_qa/testalgorithms/gen/basemodel.py create mode 100644 examples/llm_simple_qa/testalgorithms/gen/gen_algorithm.yaml create mode 100644 examples/llm_simple_qa/testalgorithms/gen/op_eval.py create mode 100644 examples/llm_simple_qa/testenv/acc.py create mode 100644 examples/llm_simple_qa/testenv/testenv.yaml create mode 100644 examples/smart_coding/smart_coding_learning_bench/comment/benchmarkingjob.yaml create mode 100644 examples/smart_coding/smart_coding_learning_bench/comment/testalgorithms/gen/basemodel.py create mode 100644 examples/smart_coding/smart_coding_learning_bench/comment/testalgorithms/gen/gen_algorithm.yaml create mode 100644 examples/smart_coding/smart_coding_learning_bench/comment/testalgorithms/gen/op_eval.py create mode 100644 examples/smart_coding/smart_coding_learning_bench/comment/testenv/llm_judgement.py create mode 100644 examples/smart_coding/smart_coding_learning_bench/comment/testenv/testenv.yaml create mode 100644 examples/smart_coding/smart_coding_learning_bench/issue/benchmarkingjob.yaml create mode 100644 examples/smart_coding/smart_coding_learning_bench/issue/testalgorithms/gen/basemodel.py create mode 100644 examples/smart_coding/smart_coding_learning_bench/issue/testalgorithms/gen/gen_algorithm.yaml create mode 100644 examples/smart_coding/smart_coding_learning_bench/issue/testalgorithms/gen/op_eval.py create mode 100644 examples/smart_coding/smart_coding_learning_bench/issue/testenv/llm_judgement.py create mode 100644 examples/smart_coding/smart_coding_learning_bench/issue/testenv/testenv.yaml diff --git a/core/common/constant.py b/core/common/constant.py index 5444e289..3d61562a 100644 --- a/core/common/constant.py +++ b/core/common/constant.py @@ -25,6 +25,7 @@ class DatasetFormat(Enum): CSV = "csv" TXT = "txt" JSON = "json" + JSONL = "jsonl" class ParadigmType(Enum): diff --git a/core/testcasecontroller/algorithm/paradigm/singletask_learning/singletask_learning.py b/core/testcasecontroller/algorithm/paradigm/singletask_learning/singletask_learning.py index 19972538..3194b7cd 100644 --- a/core/testcasecontroller/algorithm/paradigm/singletask_learning/singletask_learning.py +++ b/core/testcasecontroller/algorithm/paradigm/singletask_learning/singletask_learning.py @@ -84,5 +84,8 @@ def _inference(self, job, trained_model): inference_output_dir = os.path.join(self.workspace, "output/inference/") os.environ["RESULT_SAVED_URL"] = inference_output_dir job.load(trained_model) - infer_res = job.predict(inference_dataset.x) + if hasattr(inference_dataset, 'need_other_info'): + infer_res = job.predict(inference_dataset) + else: + infer_res = job.predict(inference_dataset.x) return infer_res diff --git a/core/testenvmanager/dataset/dataset.py b/core/testenvmanager/dataset/dataset.py index 16bd038f..ba795af9 100644 --- a/core/testenvmanager/dataset/dataset.py +++ b/core/testenvmanager/dataset/dataset.py @@ -16,9 +16,10 @@ import os import tempfile +import json import pandas as pd -from sedna.datasources import CSVDataParse, TxtDataParse, JSONDataParse +from sedna.datasources import CSVDataParse, TxtDataParse, JSONDataParse, JsonlDataParse, JSONMetaDataParse from core.common import utils from core.common.constant import DatasetFormat @@ -38,12 +39,28 @@ class Dataset: def __init__(self, config): self.train_url: str = "" self.test_url: str = "" + self.train_index: str = "" + self.test_index: str = "" + self.train_data: str = "" + self.test_data: str = "" + self.train_data_info: str = "" + self.test_data_info: str = "" self.label: str = "" self._parse_config(config) def _check_fields(self): - self._check_dataset_url(self.train_url) - self._check_dataset_url(self.test_url) + if self.train_index: + self._check_dataset_url(self.train_index) + if self.test_index: + self._check_dataset_url(self.test_index) + if self.train_data: + self._check_dataset_url(self.train_data) + if self.test_data: + self._check_dataset_url(self.test_data) + if self.train_data_info: + self._check_dataset_url(self.train_data_info) + if self.test_data_info: + self._check_dataset_url(self.test_data_info) def _parse_config(self, config): for attr, value in config.items(): @@ -103,6 +120,20 @@ def _process_index_file(self, file_url): return None + def _process_data_file(self, file_url): + file_format = utils.get_file_format(file_url) + if file_format == DatasetFormat.JSONL.value: + return file_url + + return None + + def _process_data_info_file(self, file_url): + file_format = utils.get_file_format(file_url) + if file_format == DatasetFormat.JSON.value: + return file_url + + return None + def process_dataset(self): """ process dataset: @@ -111,9 +142,26 @@ def process_dataset(self): in the index file(e.g.: txt index file). """ + if self.train_index: + self.train_url = self._process_index_file(self.train_index) + elif self.train_data: + self.train_url = self._process_data_file(self.train_data) + elif self.train_data_info: + self.train_url = self._process_data_info_file(self.train_data_info) + # raise NotImplementedError('to be done') + else: + raise NotImplementedError('not one of train_index/train_data/train_data_info') + + if self.test_index: + self.test_url = self._process_index_file(self.test_index) + elif self.test_data: + self.test_url = self._process_data_file(self.test_data) + elif self.test_data_info: + self.test_url = self._process_data_info_file(self.test_data_info) + # raise NotImplementedError('to be done') + else: + raise NotImplementedError('not one of test_index/test_data/test_data_info') - self.train_url = self._process_index_file(self.train_url) - self.test_url = self._process_index_file(self.test_url) # pylint: disable=too-many-arguments def split_dataset(self, dataset_url, dataset_format, ratio, method="default", @@ -388,6 +436,11 @@ def load_data(cls, file: str, data_type: str, label=None, use_raw=False, feature e.g.: TxtDataParse, CSVDataParse. """ + if file.split('/')[-1] == "metadata.json": + data = JSONMetaDataParse(data_type=data_type, func=feature_process) + data.parse(file) + return data + data_format = utils.get_file_format(file) data = None @@ -397,11 +450,14 @@ def load_data(cls, file: str, data_type: str, label=None, use_raw=False, feature if data_format == DatasetFormat.TXT.value: data = TxtDataParse(data_type=data_type, func=feature_process) - #print(file) data.parse(file, use_raw=use_raw) if data_format == DatasetFormat.JSON.value: data = JSONDataParse(data_type=data_type, func=feature_process) data.parse(file) + if data_format == DatasetFormat.JSONL.value: + data = JsonlDataParse(data_type=data_type, func=feature_process) + data.parse(file) + return data diff --git a/docs/guides/images/ianvs_arch.png b/docs/guides/images/ianvs_arch.png index 4b6c4e80a585917707eeb623fc56c054c99260e8..480ffdd6ac276b32ef0cdd3b66af19a167915a88 100644 GIT binary patch literal 121617 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
@8|u0+QDRNvyc?yxBph5oU=L-WZVsJ0`m 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 literal 144302 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%0DN)LD!nMWxaTVz4x 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 ZVb0Q7g*A^^{{y&ASy-DF9CyF@{{S!ET4MkJ diff --git a/docs/proposals/scenarios/Smart_Coding/Smart Coding benchmark suite Proposal.md b/docs/proposals/scenarios/Smart_Coding/Smart Coding benchmark suite Proposal.md index b612a1ad..1887c628 100644 --- a/docs/proposals/scenarios/Smart_Coding/Smart Coding benchmark suite Proposal.md +++ b/docs/proposals/scenarios/Smart_Coding/Smart Coding benchmark suite Proposal.md @@ -75,13 +75,13 @@ The format of the issue test set is as follows: "body":"This is not possible right now afaik :/\r\n\r\nMaybe we could have something like this ? wdyt ?\r\n\r\n```python\r\nds = interleave_datasets(\r\n [shuffled_dataset_a, dataset_b],\r\n probabilities=probabilities,\r\n stopping_strategy='all_exhausted',\r\n reshuffle_each_iteration=True,\r\n)", "answer_1": { "user_login": "name", - "created_at":"time" + "created_at":"time", "updated_at": "time", "body":"This is not possible right now afaik :/\r\n\r\nMaybe we could have something like this ? wdyt ?\r\n\r\n```python\r\nds = interleave_datasets(\r\n [shuffled_dataset_a, dataset_b],\r\n probabilities=probabilities,\r\n stopping_strategy='all_exhausted',\r\n reshuffle_each_iteration=True,\r\n)", }, "answer_2": { "user_login": "name", - "created_at":"time" + "created_at":"time", "updated_at": "time", "body":"XXXX" }, diff --git a/examples/data/data_java.json b/examples/data/data_java.json new file mode 100644 index 00000000..45aabdbb --- /dev/null +++ b/examples/data/data_java.json @@ -0,0 +1,2421 @@ +[ + { + "code_snippet":" private void drawURL(Graphics g) {\n\tString sense = (String)getAttribute(\"Sensitive\");\n\tif (sense != null && sense.length() > 0) {\n\t Rectangle r = displayBox();\n\t g.setColor(Color.red);\n\t g.setFont(dialogFont);\n\t g.drawString(\"url=\" + sense, r.x, r.y + r.height);\n\t}\n }\n", + "comment": "draws the map of the figure\n" + }, + { + "code_snippet":" protected SVGDrawingPanel createDrawingComponent() {\n SVGDrawingPanel p = new SVGDrawingPanel();\n DefaultDrawingEditor editor = new DefaultDrawingEditor();\n p.setEditor(new DefaultDrawingEditor());\n\n return p;\n }\n", + "comment": "creates the drawing component\n" + }, + { + "code_snippet":" public PropertyChangeListener getTarget() {\n return weakRef.get();\n }\n", + "comment": "returns the target of this proxy\n" + }, + { + "code_snippet":" protected Method getSetter() {\n try {\n return source.getClass().getMethod(\"set\" + Character.toUpperCase(propertyName.charAt(0)) + propertyName.substring(1), type);\n } catch (Exception e) {\n InternalError ie = new InternalError(\"Couldn't find setter for property \\\"\" + propertyName + \"\\\" in \" + source);\n ie.initCause(e);\n throw ie;\n }\n }\n", + "comment": "returns the setter for the property\n" + }, + { + "code_snippet":" public void add(JMenu submenu) {\n JMenuItem item = getPopupMenu().add(submenu);\n updateItemFont(submenu);\n }\n", + "comment": "adds a sub menu to the popup menu\n" + }, + { + "code_snippet":" protected Connector findConnectableConnector(Figure connectableFigure, Point2D.Double p) {\n Connector target = (connectableFigure == null) ? null : connectableFigure.findConnector(p, getConnection());\n\n if ((connectableFigure != null) && connectableFigure.isConnectable() && !connectableFigure.includes(getOwner()) && getConnection().canConnect(connector, target)) {\n return target;\n }\n return null;\n }\n", + "comment": "finds a connection end figure\n" + }, + { + "code_snippet":" public void setDrawingEditor(DrawingEditor newValue) {\n DrawingEditor oldValue = drawingEditor;\n if (drawingEditor != null) {\n drawingEditor.removePropertyChangeListener(eventHandler);\n }\n this.drawingEditor = newValue;\n if (drawingEditor != null) {\n drawingEditor.addPropertyChangeListener(new WeakPropertyChangeListener(eventHandler));\n }\n updateActiveView();\n }\n", + "comment": "attaches the figure attribute editor handler to the specified drawing editor\n" + }, + { + "code_snippet":" protected InputMap createInputMap() {\n return null;\n }\n", + "comment": "override this method to create a tool specific input map which\n" + }, + { + "code_snippet":" protected ActionMap createActionMap() {\n return null;\n }\n", + "comment": "override this method to create a tool specific action map which\n" + }, + { + "code_snippet":" public ImageIcon getIconProperty(String key, Class baseClass) {\n try {\n String rsrcName = getStringRecursive(key + \".icon\");\n\n if (rsrcName.equals(\"\")) {\n return null;\n }\n\n URL url = baseClass.getResource(rsrcName);\n if (isVerbose && url == null) {\n System.err.println(\"Warning ResourceBundleUtil[\" + baseName + \"].getIconProperty \\\"\" + key + \".icon\\\" resource:\" + rsrcName + \" not found.\");\n }\n return (url == null) ? null : new ImageIcon(url);\n } catch (MissingResourceException e) {\n if (isVerbose) {\n System.err.println(\"Warning ResourceBundleUtil[\" + baseName + \"].getIconProperty \\\"\" + key + \".icon\\\" not found.\");\n //e.printStackTrace();\n }\n return null;\n }\n }\n", + "comment": "get an image icon from the resource bundle\n" + }, + { + "code_snippet":" protected void addAction(JMenu m, View view, String actionID) {\n addAction(m, getAction(view, actionID));\n }\n", + "comment": "adds the specified action as a menu item to the supplied menu\n" + }, + { + "code_snippet":" protected void maybeAddSeparator(JMenu m) {\n m.putClientProperty(\"needsSeparator\", Boolean.TRUE);\n }\n", + "comment": "adds a separator to the supplied menu\n" + }, + { + "code_snippet":" protected void updateView(View oldValue, View newValue) {\n // We only need to do this, if the view has not been explicitly set\n if (view == null) {\n if (oldValue != null) {\n uninstallViewListeners(oldValue);\n }\n if (newValue != null) {\n installViewListeners(newValue);\n }\n firePropertyChange(VIEW_PROPERTY, oldValue, newValue);\n updateEnabled(oldValue != null && oldValue.isEnabled(),\n newValue != null && newValue.isEnabled());\n updateView();\n }\n }\n", + "comment": "updates the listeners of this action depending on the current view\n" + }, + { + "code_snippet":" protected void updateEnabled(boolean oldValue, boolean newValue) {\n firePropertyChange(\"enabled\", oldValue, isEnabled());\n }\n", + "comment": "updates the enabled state of this action depending on the new enabled\n" + }, + { + "code_snippet":" protected void notifyPropertyChangeListener(String property, Object oldValue, Object newValue) {\n // make a copy of the listener vector to synchronized not needed for transmit\n Vector v;\n synchronized(this)\n {\n v = (Vector) listeners.clone();\n }\n if (log.isDebugEnabled()) log.debug(\"notify \"+v.size()\n +\" listeners about property \"\n +property);\n // forward to all listeners\n int cnt = v.size();\n for (int i=0; i < cnt; i++) {\n PropertyChangeListener client = (PropertyChangeListener) v.elementAt(i);\n client.propertyChange(new PropertyChangeEvent(this, property, oldValue, newValue));\n }\n }\n", + "comment": "trigger the notification of all property change listeners\n" + }, + { + "code_snippet":" public void update() {\n\tpreviousValue = currentValue;\n\t currentValue = component.getPollData();\n }\n", + "comment": "save the last value from the component and then get the latest value\n" + }, + { + "code_snippet":" public void poll() {\n\tcontroller.poll();\n\n\tfor (JInputComponent c: components)\n\t c.update();\n }\n", + "comment": "poll the current state of the jinput device\n" + }, + { + "code_snippet":" private void startPolling() {\n\t\tif ((pollTimer != null) ) {\n\t\t if (!pollTimer.isRunning())\n\t\t \tpollTimer.start();\n\t\t}\n }\n", + "comment": "setup a timer to start polling the jinput devices at a specified time\n" + }, + { + "code_snippet":" private void stopPolling() {\n\t\tif ((pollTimer != null) && (listenerList.getListenerCount() <= 0)) {\n\t\t if (pollTimer.isRunning())\n\t\t \tpollTimer.stop();\n\t\t}\n } \n", + "comment": "stop polling if there are no registered listeners\n" + }, + { + "code_snippet":"\tpublic boolean hasFixedLength() {\n\t\treturn length != 0;\n\t}\n", + "comment": "returns whether or not the property has a fixed length\n" + }, + { + "code_snippet":"\tpublic int getFixedLength() {\n\t\treturn length;\n\t}\n", + "comment": "returns the fixed length of the property or code 0 code if the\n" + }, + { + "code_snippet":"\tpublic boolean supportsFrameFileAlterDiscard() {\n\t\treturn false;\n\t}\n", + "comment": "returns whether or not this spec supports the file alteration discard\n" + }, + { + "code_snippet":"\tpublic boolean supportsFrameReadOnly() {\n\t\treturn false;\n\t}\n", + "comment": "returns whether or not this spec supports read only mode\n" + }, + { + "code_snippet":"\tpublic boolean supportsFrameGroupID() {\n\t\treturn false;\n\t}\n", + "comment": "returns whether or not this spec supports a group id\n" + }, + { + "code_snippet":"\tpublic boolean supportsFrameCompression() {\n\t\treturn false;\n\t}\n", + "comment": "returns whether or not this spec supports the compression of\n" + }, + { + "code_snippet":"\tpublic boolean supportsFrameEncryption() {\n\t\treturn false;\n\t}\n", + "comment": "returns whether or not this spec supports the encryption of\n" + }, + { + "code_snippet":"\tpublic boolean supportsFrameUnsynchronisation() {\n\t\treturn false;\n\t}\n", + "comment": "returns whether or not this spec supports unsynchronisation on frame\n" + }, + { + "code_snippet":"\tpublic void addPropertyChangeListener(PropertyChangeListener l) {\n\t\tchangeSupport.addPropertyChangeListener(l);\n\t}\n", + "comment": "adds the specified property change listener to receive property change\n" + }, + { + "code_snippet":"\tpublic boolean supportsTagUnsynchronisation() {\n\t\treturn false;\n\t}\n", + "comment": "returns whether or not this implementation supports tag wide\n" + }, + { + "code_snippet":"\tpublic void removePropertyChangeListener(PropertyChangeListener l) {\n\t\tchangeSupport.removePropertyChangeListener(l);\n\t}\n", + "comment": "removes the specified property change listener so that it no longer\n" + }, + { + "code_snippet":"\tpublic boolean supportsTagFooter() {\n\t\treturn false;\n\t}\n", + "comment": "returns whether or not this implementation supports the include of a tag\n" + }, + { + "code_snippet":"\tpublic Object createFrameSpecDataObject(ID3v2Frame frame) {\n\t\treturn null;\n\t}\n", + "comment": "subclasses may override this method to return an object where spec\n" + }, + { + "code_snippet":"\tpublic boolean supports(int frameType) {\n\t\treturn (frameType == ID3v2Frame.UNDEFINED_FRAME_TYPE) ||\n\t\t\t (getFrameDefinition(frameType) != defUndefinedFrame);\n\t}\n", + "comment": "returns whether or not the frame type code frame type code is supported\n" + }, + { + "code_snippet":"\tprotected byte getByteValue(String framePropertyValue) {\n\t\tbyte[] byteArray = getByteArrayValue(framePropertyValue);\n\t\tif (byteArray.length > 0)\n\t\t\treturn byteArray[0];\n\t\treturn 0x00;\n\t}\n", + "comment": "returns the byte value that is represented by the frame property value\n" + }, + { + "code_snippet":"\tpublic int getFrameType(String frameID) {\n\t\tInteger type = (Integer) frameIDToTypeMappings.get(frameID);\n\t\tif (type == null) {\n\t\t\treturn ID3v2Frame.UNDEFINED_FRAME_TYPE;\n\t\t}\n\t\treturn type.intValue();\n\t}\n", + "comment": "returns the spec independent frame type for the spec dependent frame id\n" + }, + { + "code_snippet":"\tpublic FrameDefinition getFrameDefinition(int type) {\n\t\tFrameDefinition definition = frameTypeToDefinitionMappings[type];\n\t\tif (definition == null) {\n\t\t\tdefinition = defUndefinedFrame;\n\t\t}\n\t\treturn definition;\n\t}\n", + "comment": "returns the default frame definition for a frame of type\n" + }, + { + "code_snippet":"\tpublic FrameDefinition getFrameDefinition(int frameType, String id) {\n\t\tFrameDefinition def = (FrameDefinition) getFrameDefinition(frameType);\n\t\tif (frameType == ID3v2Frame.UNDEFINED_FRAME_TYPE) {\n\t\t\tdef = (FrameDefinition) def.clone();\n\t\t\tdef.id = id;\n\t\t}\n\t\treturn def;\n\t}\n", + "comment": "creates a unique frame definition object for the frame\n" + }, + { + "code_snippet":"\tpublic boolean equals(Object o) {\n\t\tif (!(o instanceof ID3v2Frame))\n\t\t\treturn false;\n\t\tID3v2Frame frame = (ID3v2Frame) o;\n\t\tif (frame == this)\n\t\t\treturn true;\n\t\tif (frame.getType() == type) {\n\t\t\tfor (int i = 0; i < definition.propertyDefinitions.length; ++i) {\n\t\t\t\tif (! definition.propertyDefinitions[i].equals(frame.getPropertyAt(i)))\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n", + "comment": "returns whether or not the\n" + }, + { + "code_snippet":"\tpublic boolean equals(Object o) {\n\t\tif (o instanceof ID3v2Spec) {\n\t\t\tID3v2Spec spec = (ID3v2Spec) o;\n\t\t\tif (spec.getVersion() == this.getVersion()\n\t\t\t\t\t&& spec.getRevision() == this.getRevision())\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n", + "comment": "returns whether or not this spec and the code object code\n" + }, + { + "code_snippet":"\tpublic Object getSpecData() {\n\t\treturn specData;\n\t}\n", + "comment": "returns the object an\n" + }, + { + "code_snippet":"\tprotected void setTagSize(ID3v2Tag tag, int size) {\n\t\ttag.setSize(size);\n\t}\n", + "comment": "really ugly method that subclasses may use to set the tags size without\n" + }, + { + "code_snippet":"\tpublic ID3v2Spec getSpec() {\n\t\treturn spec;\n\t}\n", + "comment": "returns the spec used by this frame\n" + }, + { + "code_snippet":"\tpublic String getID() {\n\t\treturn definition.id;\n\t}\n", + "comment": "returns the spec dependent lexical id identifying this frame just as you\n" + }, + { + "code_snippet":"\tpublic Iterator properties() {\n\t\treturn new Iterator() {\n\t\t\tint index = 0;\n\n\t\t\tpublic boolean hasNext() {\n\t\t\t\treturn index < properties.length;\n\t\t\t}\n\n\t\t\tpublic Object next() throws NoSuchElementException {\n\t\t\t\tif (index >= definition.propertyDefinitions.length - 1)\n\t\t\t\t\tthrow new NoSuchElementException();\n\t\t\t\tFrameProperty property = properties[index++];\n\t\t\t\treturn property;\n\t\t\t}\n\n\t\t\tpublic void remove() throws UnsupportedOperationException {\n\t\t\t\tthrow new UnsupportedOperationException();\n\t\t\t}\n\t\t};\n\t}\n", + "comment": "returns an enumeration of all\n" + }, + { + "code_snippet":"\tpublic int getPropertyCount() {\n\t\treturn definition.propertyDefinitions.length;\n\t}\n", + "comment": "returns the property count of this frame\n" + }, + { + "code_snippet":"\tpublic boolean contains(int type) {\n\t\tfor (int i = 0; i < definition.propertyDefinitions.length; ++i)\n\t\t\tif (properties[i].getDefinition().getID() == type)\n\t\t\t\treturn true;\n\t\treturn false;\n\t}\n", + "comment": "returns whether or not this frame contains a code frame property code\n" + }, + { + "code_snippet":"\tpublic FrameProperty get(int type) {\n\t\tfor (int i = 0; i < definition.propertyDefinitions.length; ++i) {\n\t\t\tif (properties[i].getDefinition().getID() == type) {\n\t\t\t\treturn properties[i];\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n", + "comment": "returns the code frame property code of type code type code or\n" + }, + { + "code_snippet":"\tpublic FrameProperty getPropertyAt(int index) {\n\t\treturn properties[index];\n\t}\n", + "comment": "returns the frame property at index code index code\n" + }, + { + "code_snippet":"\tpublic boolean isReadOnly() {\n\t\treturn isReadOnly;\n\t}\n", + "comment": "returns whether or not the frames data is supposed to be read only\n" + }, + { + "code_snippet":"\tpublic boolean getUseGroupID() {\n\t\treturn useGroupID;\n\t}\n", + "comment": "returns whether or not a group id was set for this frame\n" + }, + { + "code_snippet":"\tpublic boolean getUseEncryption() {\n\t\treturn useEncryption;\n\t}\n", + "comment": "returns whether or not the frames data is to be encrypted\n" + }, + { + "code_snippet":"\tpublic boolean getUseCompression() {\n\t\treturn useCompression;\n\t}\n", + "comment": "returns whether or not the frames data is to be compressed\n" + }, + { + "code_snippet":"\tpublic boolean getUseUnsynchronisation() {\n\t\treturn useUnsynchronisation;\n\t}\n", + "comment": "returns whether or not this frames data is to be unsynchronised\n" + }, + { + "code_snippet":"\tpublic void setTagAlterDiscard(boolean b) {\n\t\tif (!spec.supportsFrameTagAlterDiscard() && b) {\n\t\t\ttestChange();\n\t\t\ttag.requestSpecWhich(\"supportsFrameTagAlterDiscard\");\n\t\t}\n\t\tthis.tagAlterDiscard = b;\n\t\tif (tag != null)\n\t\t\ttag.notifyFlagChanged(this);\n\t}\n", + "comment": "marks this frame to be discardered on tag alteration\n" + }, + { + "code_snippet":"\tpublic void setReadOnly(boolean b) throws IllegalTagStateException {\n\t\tif (!spec.supportsFrameReadOnly() && b) {\n\t\t\ttestChange();\n\t\t\ttag.requestSpecWhich(\"supportsFrameReadOnly\");\n\t\t}\n\t\tthis.isReadOnly = b;\n\t\tif (tag != null)\n\t\t\ttag.notifyFlagChanged(this);\n\t}\n", + "comment": "tries to set the frames data to be read only\n" + }, + { + "code_snippet":"\tpublic void setUseCompression(boolean b) {\n\t\tboolean oldValue = useCompression;\n\t\tboolean newValue = b;\n\t\tif (!spec.supportsFrameCompression() && newValue) {\n\t\t\ttestChange();\n\t\t\ttag.requestSpecWhich(\"supportsFrameCompression\");\n\t\t}\n\t\tthis.useCompression = newValue;\n\t\tchangeSupport.firePropertyChange(\n\t\t\tUSE_COMPRESSION_PROPERTY,\n\t\t\toldValue,\n\t\t\tnewValue);\n\t\tif (tag != null)\n\t\t\ttag.notifyFlagChanged(this);\n\t}\n", + "comment": "tries to set the frames data to be compressed\n" + }, + { + "code_snippet":"\tpublic void setUseGroupID(boolean useGroupID, byte groupID) {\n\t\tboolean oldValue = this.useGroupID;\n\t\tboolean newValue = useGroupID;\n\t\tif (!spec.supportsFrameGroupID() && newValue) {\n\t\t\ttestChange();\n\t\t\ttag.requestSpecWhich(\"supportsFrameGroupID\");\n\t\t}\n\t\tthis.useGroupID = newValue;\n\t\tthis.groupID = groupID;\n\t\tchangeSupport.firePropertyChange(\n\t\t\tUSE_GROUP_ID_PROPERTY,\n\t\t\toldValue,\n\t\t\tnewValue);\n\t\tif (tag != null)\n\t\t\ttag.notifyFlagChanged(this);\n\t}\n", + "comment": "tries to set a group id for this frame\n" + }, + { + "code_snippet":"\tpublic boolean equals(Object object) {\n\t\tif (!(object instanceof FrameProperty))\n\t\t\treturn false;\n\t\tFrameProperty property = (FrameProperty) object;\n\t\tif (definition.getDataType() == property.getDefinition().getDataType())\n\t\t\tif (value.equals(property.toString()))\n\t\t\t\treturn true;\n\t\treturn false;\n\t}\n", + "comment": "returns whether or not the object code object code is equal to this\n" + }, + { + "code_snippet":"\tpublic byte toByte() {\n\t\tbyte[] bytes = toByteArray();\n\t\tif (bytes.length == 0)\n\t\t\treturn 0x00;\n\t\treturn bytes[0];\n\t}\n", + "comment": "returns the byte value of the property\n" + }, + { + "code_snippet":"\tpublic ID3v2Frame getFrame() {\n\t\treturn frame;\n\t}\n", + "comment": "returns the frame this property belongs to\n" + }, + { + "code_snippet":"\tpublic void setFrame(ID3v2Frame f) {\n\t\tthis.frame = f;\n\t}\n", + "comment": "sets the code id3v2 frame code this property belongs to\n" + }, + { + "code_snippet":"\tpublic void setValue(String newValue) throws IllegalArgumentException {\n\t\tif (frame != null) {\n\t\t\tif (! frame.getSpec().supports(definition.getID(), newValue))\n\t\t\t\tthrow new IllegalArgumentException(value);\n\t\t}\n\t\tString oldValue = value;\n\t\tthis.value = newValue;\n\t\tif (frame != null) {\n\t\t\tframe.notifyFramePropertyChanged(this, oldValue, newValue);\n\t\t}\n\t}\n", + "comment": "sets the string value for this property to the value\n" + }, + { + "code_snippet":"\tpublic void setValue(byte value) throws IllegalArgumentException {\n\t\tsetValue(new byte[] { value }, 0, 1);\n\t}\n", + "comment": "sets the byte value for this property to the value code value code\n" + }, + { + "code_snippet":"\tpublic void setValue(byte[] value) throws IllegalArgumentException {\n\t\tsetValue(value, 0, value.length);\n\t}\n", + "comment": "sets the binary value for this property to the value\n" + }, + { + "code_snippet":"\tpublic void add(ID3v2Frame frame) throws IllegalArgumentException {\n\t\t//if (frame.get(FrameProperty.MAIN).toString().equals(\"\"))\n\t\t//\tthrow new IllegalArgumentException(\"FrameProperty.MAIN must not be empty\");\n\t\tif (frames.contains(frame)) {\n\t\t\tthrow new IllegalArgumentException(\"frame is already part of the tag.\");\n\t\t}\n\n\t\tframe.setTag(this);\n\t\tframes.add(frame);\n\n\t\tint frameCount = getFrameCount();\n\t\tchangeSupport.firePropertyChange(\n\t\t\tFRAME_COUNT_PROPERTY,\n\t\t\tframeCount - 1,\n\t\t\tframeCount);\n\n\t\tsizeChanged = true;\n\t}\n", + "comment": "adds the frame code frame code to the tag\n" + }, + { + "code_snippet":"\tpublic boolean remove(ID3v2Frame frame) {\n\t\tboolean success = frames.remove(frame);\n\n\t\tif (success) {\n\t\t\tframe.setTag(null);\n\t\t\tint frameCount = getFrameCount();\n\t\t\tchangeSupport.firePropertyChange(\n\t\t\t\tFRAME_COUNT_PROPERTY,\n\t\t\t\tframeCount + 1,\n\t\t\t\tframeCount);\n\n\t\t\tsizeChanged = true;\n\t\t}\n\t\treturn success;\n\t}\n", + "comment": "removes the frame code frame code from the tag\n" + }, + { + "code_snippet":"\tpublic void remove(int type) {\n\t\tremove(type, 0);\n\t}\n", + "comment": "removes the first frame of type code type code in the tag\n" + }, + { + "code_snippet":"\tpublic void removeAll(int type) {\n\t\tfor (int i = 0; i < frames.size(); ++i) {\n\t\t\tID3v2Frame frame = (ID3v2Frame) frames.elementAt(i);\n\t\t\tif (frame.getType() == type) {\n\t\t\t\tremove(frame);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n", + "comment": "removes all frames of type code type code in the tag\n" + }, + { + "code_snippet":"\tpublic void removeAll() {\n\t\tint frameCount = frames.size();\n\t\tframes.clear();\n\t\tif (frameCount > 0) {\n\t\t\tchangeSupport.firePropertyChange(\n\t\t\t\tFRAME_COUNT_PROPERTY,\n\t\t\t\tframeCount,\n\t\t\t\t0);\n\t\t}\n\t}\n", + "comment": "removes all frames from the tag\n" + }, + { + "code_snippet":"\tpublic void recalculateSize() {\n\t\ttry {\n\t\t\tthis.contentSize = spec.getSize(this);\n\t\t} catch (RuntimeException e) {\n\t\t\tlogger.error(\"ID3v2Tag::recalculateSize(): \"\n\t\t\t\t+ \"Unexpected exception in spec \"+spec+\" getSize(ID3v2Tag).\\n\"\n\t\t\t\t+ \"Spec is probably buggy.\", e);\n\t\t\tthrow e;\n\t\t}\n\t\tsizeChanged = false;\n\t}\n", + "comment": "recalculates the binary size of the tag\n" + }, + { + "code_snippet":"\tpublic int getSize() {\n\t\trecalculateSizeIfNeccessary();\n\t\tif (preferredSizeMode == ID3Constants.ABSOLUTE)\n\t\t\treturn (contentSize < preferredSize ? preferredSize : contentSize);\n\t\telse /* if (preferredSizeType == ID3Constants.RELATIVE) */\n\t\t\treturn contentSize + preferredSize;\n\t}\n", + "comment": "returns the tags size including the padding\n" + }, + { + "code_snippet":"\tpublic int getPreferredSize() {\n\t\treturn preferredSize;\n\t}\n", + "comment": "returns the preferred size of the tag\n" + }, + { + "code_snippet":"\tpublic int getContentSize() {\n\t\trecalculateSizeIfNeccessary();\n\t\treturn contentSize;\n\t}\n", + "comment": "returns the tag size excluding the padding\n" + }, + { + "code_snippet":"\tpublic int getPaddingSize() {\n\t\tif (preferredSizeMode == ID3Constants.ABSOLUTE) {\n\t\t\trecalculateSizeIfNeccessary();\n\t\t\treturn (contentSize < preferredSize ? preferredSize - contentSize : 0);\n\t\t} else {\n\t\t\treturn preferredSize;\n\t\t}\n\t}\n", + "comment": "returns the amount of padding being used by the tag\n" + }, + { + "code_snippet":"\tpublic int getSpecPolicy() {\n\t\treturn specPolicy;\n\t}\n", + "comment": "returns the current spec policy\n" + }, + { + "code_snippet":"\tpublic int getVersion() {\n\t\treturn spec.getVersion();\n\t}\n", + "comment": "returns the version number of the current spec\n" + }, + { + "code_snippet":"\tpublic int getRevision() {\n\t\treturn spec.getRevision();\n\t}\n", + "comment": "returns the revision number of the current spec\n" + }, + { + "code_snippet":"\tpublic String getVersionString() {\n\t\treturn spec.toString();\n\t}\n", + "comment": "returns a string formatted 2\n" + }, + { + "code_snippet":"\tpublic boolean contains(int type) {\n\t\tID3v2Frame frame = get(type, 0);\n\t\tif (frame != null)\n\t\t\tlastRequestedFrame = frame;\n\t\treturn frame != null;\n\t}\n", + "comment": "returns whether or not the tag contains a frame of type\n" + }, + { + "code_snippet":"\tpublic int getFrameCount() {\n\t\treturn frames.size();\n\t}\n", + "comment": "returns the total amount of frames in the tag\n" + }, + { + "code_snippet":"\tpublic int getFrameCount(int type) {\n\t\tint count = 0;\n\t\tfor (int i = 0; i < frames.size(); ++i) {\n\t\t\tID3v2Frame current = (ID3v2Frame) frames.get(i);\n\t\t\tif (current.getType() == type)\n\t\t\t\t++count;\n\t\t}\n\t\treturn count;\n\t}\n", + "comment": "returns the amount of frames of type code type code in the tag\n" + }, + { + "code_snippet":"\tpublic ID3v2Frame get(int type) {\n\t\tif (lastRequestedFrame != null)\n\t\t\tif (lastRequestedFrame.getType() == type)\n\t\t\t\treturn lastRequestedFrame;\n\t\tlastRequestedFrame = get(type, 0);\n\t\treturn lastRequestedFrame;\n\t}\n", + "comment": "this method is a convenience for code get id 0 code\n" + }, + { + "code_snippet":"\tpublic ID3v2Frame get(int frameType, int propertyType, byte value) {\n\t\treturn get(frameType, propertyType, new byte[] { value });\n\t}\n", + "comment": "returns the frame which is of type code type code and additionally\n" + }, + { + "code_snippet":"\tpublic ID3v2Frame get(int frameType, int propertyType, byte[] value) {\n\t\ttry {\n\t\t\treturn get(\n\t\t\t\tframeType,\n\t\t\t\tpropertyType,\n\t\t\t\tnew String(value, 0, value.length, \"8859_1\"));\n\t\t} catch (UnsupportedEncodingException e) {\n\t\t\treturn null;\n\t\t}\n\t}\n", + "comment": "returns the frame which is of type code type code and additionally\n" + }, + { + "code_snippet":"\tpublic ID3v2Frame get(int frameType, int propertyType, String value) {\n\t\tfor (int i = 0; i < frames.size(); ++i) {\n\t\t\tID3v2Frame current = (ID3v2Frame) frames.elementAt(i);\n\t\t\tif (current.getType() == frameType)\n\t\t\t\tif (current.get(propertyType).toString().equals(value))\n\t\t\t\t\treturn current;\n\t\t}\n\t\treturn null;\n\t}\n", + "comment": "returns the frame which is of type code type code and additionally\n" + }, + { + "code_snippet":"\tpublic Iterator frames() {\n\t\treturn frames.iterator();\n\t}\n", + "comment": "returns an iteration over all frames in the tag\n" + }, + { + "code_snippet":"\tpublic boolean isExperimental() {\n\t\treturn experimental;\n\t}\n", + "comment": "returns whether or not the tag is to be considered experimental\n" + }, + { + "code_snippet":"\tpublic boolean getUseCRC() {\n\t\treturn useCRC;\n\t}\n", + "comment": "returns whether or not a crc32 is included in the binary tag\n" + }, + { + "code_snippet":"\tpublic boolean isRestricted() {\n\t\treturn restrictions != null;\n\t}\n", + "comment": "returns whether or not this tag is restricted in some way\n" + }, + { + "code_snippet":"\tpublic ID3v2Restrictions getRestrictions() {\n\t\treturn restrictions;\n\t}\n", + "comment": "returns the restrictions that affect this tag or code null code if\n" + }, + { + "code_snippet":"\tpublic void setSpecPolicy(int policy) throws IllegalArgumentException {\n\t\tif (policy != ID3Constants.FIXED_SPEC\n\t\t\t&& policy != ID3Constants.DYNAMIC_SPEC)\n\t\t\tthrow new IllegalArgumentException(String.valueOf(policy));\n\t\tthis.specPolicy = policy;\n\t}\n", + "comment": "sets the spec policy which may either be code id3 constants\n" + }, + { + "code_snippet":"\tpublic void setPreferredSize(int value, int preferredSizeMode) throws IllegalArgumentException {\n\t\tif ((preferredSizeMode != ID3Constants.ABSOLUTE\n\t\t\t&& preferredSizeMode != ID3Constants.RELATIVE)\n\t\t\t|| (value < 0))\n\t\t\tthrow new IllegalArgumentException();\n\n\t\tthis.preferredSize = value;\n\t\tthis.preferredSizeMode = preferredSizeMode;\n\t}\n", + "comment": "sets the preferred size of the tag\n" + }, + { + "code_snippet":"\tpublic void setExperimental(boolean b) throws IllegalTagStateException {\n\t\tif (!spec.supportsTagIsExperimentalIndicator())\n\t\t\trequestSpecWhich(\"supportsTagIsExperimentalIndicator\");\n\t\tboolean oldValue = experimental;\n\t\tboolean newValue = b;\n\t\tif (oldValue != newValue) {\n\t\t\tthis.experimental = newValue;\n\t\t\tchangeSupport.firePropertyChange(\n\t\t\t\tEXPERIMENTAL_PROPERTY,\n\t\t\t\toldValue,\n\t\t\t\tnewValue);\n\t\t}\n\t\tthis.sizeChanged = true;\n\t}\n", + "comment": "sets whether or not the tag is to be considered experimental\n" + }, + { + "code_snippet":"\tpublic int write(OutputStream out) throws IOException {\n\t\tif (frames.size() == 0)\n\t\t\tthrow new IOException(\"Tag does not have any frames\");\n\t\tlogger.debug(\"ID3v2Tag::write(OutputStream): \"\n\t\t\t+ \"Writing tag. Calling spec.write(this, out)\");\n\t\treturn spec.write(this, out);\n\t}\n", + "comment": "writes the tag to the\n" + }, + { + "code_snippet":"\tpublic K getKey(V value) {\n\t\treturn valueKeyMap.get(value);\n\t}\n", + "comment": "returns key for the given value\n" + }, + { + "code_snippet":"\tpublic String getErrorMessage() {\n\t\treturn hasNegativeCapacities ? ERROR_MESSAGE : \"\";\n\t}\n", + "comment": "if any errors exist return error message\n" + }, + { + "code_snippet":"\tpublic boolean hasNegativeCapacities() {\n\t\treturn hasNegativeCapacities;\n\t}\n", + "comment": "checks whether given graph had edges with negative capacities\n" + }, + { + "code_snippet":"\tpublic V extractMin() {\n\t\tif (isEmpty()) {\n\t\t\treturn null;\n\t\t}\n\t\tV tmp = heap.get(0);\n\t\tvalueIndexMap.remove(tmp);\n\t\tvalueKeyMap.remove(tmp);\n\t\theap.set(0, heap.get(size() - 1));\n\t\tvalueIndexMap.put(heap.get(0), 0);\n\t\theap.remove(size() - 1);\n\t\tsiftDown(0);\n\t\treturn tmp;\n\t}\n", + "comment": "removes the minimal element of this binary heap and returns it\n" + }, + { + "code_snippet":"\tpublic int getMaximumFlowSize() {\n\t\tif (hasNegativeCapacities()) {\n\t\t\tthrow new IllegalStateException(\"This graph has negative capacities. Ford-Falkerson doesn't work correctly.\");\n\t\t}\n\t\treturn maxFlowSize;\n\t}\n", + "comment": "return maximum flow size\n" + }, + { + "code_snippet":"\tpublic V getMin() {\n\t\tif (isEmpty()) {\n\t\t\treturn null;\n\t\t}\n\t\treturn heap.get(0);\n\t}\n", + "comment": "returns but not removes the minimal element of this binary heap\n" + }, + { + "code_snippet":"\tpublic void decreaseKey(V value, K newKey) {\n\t\tInteger tmp = valueIndexMap.get(value);//myData.indexOf(element);\n\t\tif (tmp == null) {\n\t\t\tthrow new NoSuchElementException();\n\t\t}\n\t\tif (valueKeyMap.get(value).compareTo(newKey) < 0) {\n\t\t\tthrow new IllegalArgumentException(\"The key replaced is less than the new one\");\n\t\t}\n\t\tvalueKeyMap.put(value, newKey);\n\t\tsiftUp(tmp);\n\t}\n", + "comment": "decreases key of the given element\n" + }, + { + "code_snippet":"\tpublic boolean hasLoops() {\n\t\treturn !loopEdges.isEmpty();\n\t}\n", + "comment": "checks whether graph has loops\n" + }, + { + "code_snippet":"\tpublic String getErrorMessage() {\n\t\treturn hasNegativeWeights ? ERROR_MESSAGE : \"\";\n\t}\n", + "comment": "if any errors exist return error message\n" + }, + { + "code_snippet":"\tpublic void increaseKey(V value, K newKey) {\n\t\tInteger tmp = valueIndexMap.get(value);//myData.indexOf(element);\n\t\tif (tmp == null) {\n\t\t\tthrow new NoSuchElementException();\n\t\t}\n\t\tif (valueKeyMap.get(value).compareTo(newKey) >= 0) {\n\t\t\tthrow new IllegalArgumentException(\"The key replaced is greater than the new one\");\n\t\t}\n\t\tvalueKeyMap.put(value, newKey);\n\t\tsiftDown(tmp);\n\t}\n", + "comment": "increases key of the given element\n" + }, + { + "code_snippet":"\tpublic String getErrorMessage() {\n\t\tif (hasLoops()) {\n\t\t\treturn ERROR_MESSAGE;\n\t\t}\n\t\treturn \"\";\n\t}\n", + "comment": "if any errors exist return error message\n" + }, + { + "code_snippet":"\tpublic boolean hasNegativeWeights() {\n\t\treturn hasNegativeWeights;\n\t}\n", + "comment": "checks whether givaen graph had edges with negative weights\n" + }, + { + "code_snippet":"\tpublic String getErrorMessage() {\n\t\treturn !isConnected() ? ERROR_MESSAGE : \"\";\n\t}\n", + "comment": "if any errors exist return error message\n" + }, + { + "code_snippet":"\tpublic void pushCommand(Command command) {\n\t\tredoCommands.clear();\n\t\tif (undoCommands.size() == capacity) {\n\t\t\tundoCommands.remove(0);\n\t\t}\n\t\tundoCommands.add(command);\n\t}\n", + "comment": "pushes new command to this buffer\n" + }, + { + "code_snippet":"\tpublic void performLayout() {\n\t\tfor (VertexPresentation vp : positionMap.keySet()) {\n\t\t\tvp.setCenter(positionMap.get(vp));\n\t\t}\n\t}\n", + "comment": "performs this layout\n" + }, + { + "code_snippet":"\tpublic void clear() {\n\t\tundoCommands.clear();\n\t\tredoCommands.clear();\n\t}\n", + "comment": "clears this buffer\n" + }, + { + "code_snippet":"\tpublic boolean hasUndo() {\n\t\treturn (undoCommands.size() > 0);\n\t}\n", + "comment": "checks whether there are command for undoing\n" + }, + { + "code_snippet":"\tpublic boolean hasRedo() {\n\t\treturn (redoCommands.size() > 0);\n\t}\n", + "comment": "checks whether there are command for redoing\n" + }, + { + "code_snippet":"\tpublic void addVisualStateListener(VisualStateListener listener) {\n\t\tlisteners.add(listener);\n\t}\n", + "comment": "adds the specified visual state listaner to recive notification about state\n" + }, + { + "code_snippet":"\tpublic void removeVisualStateListener(VisualStateListener listener) {\n\t\tlisteners.remove(listener);\n\t}\n", + "comment": "removes the specified visual state listaner from this presentation\n" + }, + { + "code_snippet":"\tpublic void setGraphPresentation(GraphPresentation graphPresentation) {\n\t\tthis.graphPresentation = graphPresentation;\n\t\tunselect();\n\t}\n", + "comment": "sets new graph presentation\n" + }, + { + "code_snippet":"\tpublic void setGraphPresentation(GraphPresentation graphPresentation) {\n\t\tthis.graphPresentation = graphPresentation;\n\t\tunmark();\n\t}\n", + "comment": "sets new graph presentation\n" + }, + { + "code_snippet":"\tpublic void paint(Graphics gr, Color backgroundColor) {\n\t\tGraphics2D gr2D = (Graphics2D) gr;\n\t\tStroke prevStroke = gr2D.getStroke();\n\t\tgr2D.setStroke(DASHED_STROKE);\n\t\timaginaryEdge.paint(gr2D, backgroundColor);\n\t\tgr2D.setStroke(prevStroke);\n\t}\n", + "comment": "paints imaginary edge\n" + }, + { + "code_snippet":"\tpublic void markEdges(Collection edgesToMark, boolean isError) {\n\t\tfor (Edge edge : edgesToMark) {\n\t\t\tgraphPresentation.getPresentationForEdge(edge).mark(isError ? ERROR_COLOR : MARK_COLOR);\n\t\t\tmarkedEdges.add(graphPresentation.getPresentationForEdge(edge));\n\t\t}\n\t\tfireVisualStateChange();\n\t}\n", + "comment": "marks presentations of given edges\n" + }, + { + "code_snippet":"\tpublic void selectEdge(EdgePresentation ep) {\n\t\tselectedEdges.add(ep);\n\t\tfireVisualStateChange();\n\t}\n", + "comment": "selects givet edge presentation\n" + }, + { + "code_snippet":"\tpublic boolean select(Point point) {\n\t\treturn selectVerticesOnPoint(point) || selectEdgesOnPoint(point);\n\t}\n", + "comment": "finds and marks element containing given point\n" + }, + { + "code_snippet":"\tpublic void selectInRect(int x1, int y1, int x2, int y2) {\n\t\tfor (VertexPresentation vp : graphPresentation.getVertexPresentations()) {\n\t\t\tif (vp.isInRect(x1, y1, x2, y2)) {\n\t\t\t\tselectedVertices.add(vp);\n\t\t\t}\n\t\t}\n\t\tfor (EdgePresentation ep : graphPresentation.getEdgePresentations()) {\n\t\t\tif (ep.isInRect(x1, y1, x2, y2)) {\n\t\t\t\tselectedEdges.add(ep);\n\t\t\t}\n\t\t}\n\t\tif ((selectedEdges.size() != 0) || (selectedVertices.size() != 0)) {\t\n\t\t\tfireVisualStateChange();\n\t\t}\n\t}\n", + "comment": "selects all item within given rectangle\n" + }, + { + "code_snippet":"\tpublic boolean isInSelectedItem(Point point) {\n\t\tfor (VertexPresentation vp : selectedVertices) {\n\t\t\tif (vp.containsPoint(point)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\tfor (EdgePresentation ep : selectedEdges) {\n\t\t\tif (ep.containsPoint(point)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n", + "comment": "checkes whether given point lies whithin an already selected item\n" + }, + { + "code_snippet":"\tpublic void markVertex(VertexPresentation vp) {\n\t\tmarkedVertices.add(vp);\n\t\tfireVisualStateChange();\n\t}\n", + "comment": "markes selected vertex\n" + }, + { + "code_snippet":"\tpublic void unselect() {\n\t\tselectedEdges.clear();\n\t\tselectedVertices.clear();\n\t\tfireVisualChandesCancelled();\n\t}\n", + "comment": "unselects previously selected elements\n" + }, + { + "code_snippet":"\tpublic void markVertices(Collection verticesToMark) {\n\t\tfor (Vertex vertex : verticesToMark) {\n\t\t\tmarkedVertices.add(graphPresentation.getPresentationForVertex(vertex));\t\t\t\n\t\t}\n\t\tfireVisualStateChange();\n\t}\n", + "comment": "markes given vertices\n" + }, + { + "code_snippet":"\tpublic void unmark() {\n\t\tfor (Iterator it = markedEdges.iterator(); it.hasNext();) {\n\t\t\tEdgePresentation ep = it.next();\n\t\t\tep.unmark();\n\t\t\tit.remove();\n\t\t}\n\t\tverticesData.clear();\n\t\tedgesData.clear();\n\t\tmarkedVertices.clear();\n\t\tfireVisualChandesCancelled();\n\t}\n", + "comment": "unmarks previously marked elements\n" + }, + { + "code_snippet":"\tpublic void unmarkEdges() {\n\t\tfor (Iterator it = markedEdges.iterator(); it.hasNext();) {\n\t\t\tEdgePresentation ep = it.next();\n\t\t\tep.unmark();\n\t\t\tit.remove();\n\t\t}\n\t\t//if ((verticesData.size() == 0) && (markedVertices.size() == 0)) {\n\t\t//\tfireVisualChandesCancelled();\n\t\t//} else {\n\t\t\tfireVisualStateChange();\n\t\t//}\n\t}\n", + "comment": "unmarks previously marked edges\n" + }, + { + "code_snippet":"\tpublic EdgePresentation getEdgeWithSelectedWeight(Point point) {\n\t\tif (!graphPresentation.isWeighted()) {\n\t\t\treturn null;\n\t\t}\n\t\tfor (EdgePresentation ep : graphPresentation.getEdgePresentations()) {\n\t\t\tif (ep.isWeightSelected(point)) {\n\t\t\t\treturn ep;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n", + "comment": "if graph is weighted and weight of some edge contains selected point\n" + }, + { + "code_snippet":"\tpublic void unmarkVertices() {\n\t\tmarkedVertices.clear();\n\t\tfireVisualStateChange();\n\t}\n", + "comment": "unmarks previously marked vertices\n" + }, + { + "code_snippet":"\tpublic EdgePresentation getEdgeWithSelectedEnd(Point point) {\n\t\tfor (EdgePresentation ep : selectedEdges) {\n\t\t\tif (isEdgeEndSelected(ep, point) || isEdgeStartSelected(ep, point)) {\n\t\t\t\treturn ep;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n", + "comment": "if any selected edge end mark contains given point returns this edge\n" + }, + { + "code_snippet":"\tpublic void setGraphPresentation(GraphPresentation presentation) {\n\t\tremoveCurrentPresentation();\n\t\tundoClear();\n\t\tattachNewPresentation(presentation);\n\t}\n", + "comment": "sets new graph presentation to this component\n" + }, + { + "code_snippet":"\tpublic boolean isEdgeEndSelected(EdgePresentation ep, Point point) {\n\t\treturn (square(ep.getEnd().x - point.x) + square(ep.getEnd().y - point.y) < square(EDGE_SELECTION_RADIX));\n\t}\n", + "comment": "veryfies whether edge end mark was selected\n" + }, + { + "code_snippet":"\tpublic boolean isEdgeStartSelected(EdgePresentation ep, Point point) {\n\t\treturn (square(ep.getStart().x - point.x) + square(ep.getStart().y - point.y) < square(EDGE_SELECTION_RADIX));\n\t}\n", + "comment": "veryfies whether edge start mark was selected\n" + }, + { + "code_snippet":"\tpublic Command getNewAddVertexCommand(Point point) {\n\t\treturn new AddVertexCommand(point, graphPresentation, graphSelection);\n\t}\n", + "comment": "returns new add vertex command\n" + }, + { + "code_snippet":"\tpublic Command getNewAddEdgeCommand(VertexPresentation sourcePr, VertexPresentation destinPr) {\n\t\treturn new AddEdgeCommand(sourcePr, destinPr, graphPresentation, graphSelection);\n\t}\n", + "comment": "returns new add edge command\n" + }, + { + "code_snippet":"\tpublic Command getNewEdgeEndEditCommand(EdgePresentation edge, VertexPresentation sourcePr, VertexPresentation destinPr) {\n\t\treturn new EdgeEndEditCommand(edge, sourcePr, destinPr, graphPresentation, graphSelection);\n\t}\n", + "comment": "returns new edge end editing command\n" + }, + { + "code_snippet":"\tpublic Command getNewDeleteCommand() {\n\t\treturn new DeleteCommand(graphPresentation, graphSelection);\n\t}\n", + "comment": "returns new delete command\n" + }, + { + "code_snippet":"\tpublic Command getNewDragCommand(Point start, Point end) {\n\t\treturn new DragCommand(start, end, graphPresentation, graphSelection);\n\t}\n", + "comment": "returns new drag command\n" + }, + { + "code_snippet":"\tpublic Command getNewDragCommand(Map beforeDragPositions) {\n\t\treturn new DragCommand(beforeDragPositions, graphPresentation, graphSelection);\n\t}\n", + "comment": "returns new drag command\n" + }, + { + "code_snippet":"\tpublic void setTool(Tool tool) {\n\t\tcurrentTool.finalActions();\n\t\tcurrentTool = tool;\n\t}\n", + "comment": "sets a tool to handle events\n" + }, + { + "code_snippet":"\tpublic Command getNewLayoutCommand(Layout layout) {\n\t\treturn new LayoutCommand(layout, graphPresentation);\n\t}\n", + "comment": "returns new layout command\n" + }, + { + "code_snippet":"\tpublic GraphPresentation getGraphPresentation() {\n\t\treturn graphPresentation;\n\t}\n", + "comment": "returns graph presentation\n" + }, + { + "code_snippet":"\tpublic Command getWeightChangeCommand(int oldWeight, int newWeight, EdgePresentation edge) {\n\t\treturn new WeightChangeCommand(oldWeight, newWeight, edge, graphSelection);\n\t}\n", + "comment": "returns new weight change command\n" + }, + { + "code_snippet":"\tpublic Command getConvertToWeightedCommand(PresentationController controller) {\n\t\treturn new ConvertToWeightedCommand(graphPresentation, controller);\n\t}\n", + "comment": "returns new convert to weighted command\n" + }, + { + "code_snippet":"\tpublic Command getConvertToUnweightedCommand(PresentationController controller) {\n\t\treturn new ConvertToUnweightedCommand(graphPresentation, controller);\n\t}\n", + "comment": "returns new convert to unweighted command\n" + }, + { + "code_snippet":"\tpublic Command getConvertToUndirectedCommand(PresentationController controller) {\n\t\treturn new ConvertToUndirectedCommand(graphPresentation, controller);\n\t}\n", + "comment": "returns new convert to undirected command\n" + }, + { + "code_snippet":"\tpublic Tool getSelectTool() {\n\t\tselectTool.returnToInitialState();\n\t\treturn selectTool;\n\t}\n", + "comment": "returns select tool\n" + }, + { + "code_snippet":"\tpublic Tool getAddVertexTool() {\n\t\treturn addVertexTool;\n\t}\n", + "comment": "returns add vertex tool\n" + }, + { + "code_snippet":"\tpublic Tool getAddEdgeTool() {\n\t\treturn addEdgeTool;\n\t}\n", + "comment": "returns add edge tool\n" + }, + { + "code_snippet":"\tpublic Tool getDijkstraSelectionTool() {\n\t\tdijkstraSelectTool.returnToInitialState();\n\t\treturn dijkstraSelectTool;\n\t}\n", + "comment": "returns dijkstra selection tool\n" + }, + { + "code_snippet":"\tpublic Tool getMaxFlowSelectionTool() {\n\t\tmaxFlowSelectionTool.returnToInitialState();\n\t\treturn maxFlowSelectionTool;\n\t}\n", + "comment": "returns max flow selection tool\n" + }, + { + "code_snippet":"\tpublic ToolFactory getToolFactory() {\n\t\treturn toolFactory;\n\t}\n", + "comment": "returns tool factory\n" + }, + { + "code_snippet":"\tpublic EditingActionsFactory getEditingActionsFactory() {\n\t\treturn editingActionsFactory;\n\t}\n", + "comment": "returns component editing actions factory\n" + }, + { + "code_snippet":"\tpublic AlgorythmActionsFactory getAlgorythmActionsFactory() {\n\t\treturn algorythmActionsFactory;\n\t}\n", + "comment": "returns component algorythm actions factory\n" + }, + { + "code_snippet":"\tpublic boolean isDirected() {\n\t\tif (!wasTypeChoosen) {\n\t\t\tthrow new IllegalStateException(\"User didn't choose anything\");\n\t\t}\n\t\treturn isDirected;\n\t}\n", + "comment": "returns whether user has choosen directed or undirected graph\n" + }, + { + "code_snippet":"\tpublic ConvertionActionsFactory getConvertionActionsFactory() {\n\t\treturn convertionActionsFactory;\n\t}\n", + "comment": "returns component convertion actions factory\n" + }, + { + "code_snippet":"\tpublic boolean isWeighted() {\n\t\tif (!wasTypeChoosen) {\n\t\t\tthrow new IllegalStateException(\"User didn't choose anything\");\n\t\t}\n\t\treturn isWeighted;\n\t}\n", + "comment": "returns whether user has choosen directed or undirected graph\n" + }, + { + "code_snippet":"\tpublic void addTempComponent(Component component) {\n\t\tadd(component);\n\t\trevalidate();\n\t\trepaint();\n\t}\n", + "comment": "adds temrorary component to this component\n" + }, + { + "code_snippet":"\tpublic void removeTempComponent(Component component) {\n\t\tremove(component);\n\t\trevalidate();\n\t\trepaint();\n\t}\n", + "comment": "removes temprorary component from this component\n" + }, + { + "code_snippet":"\tpublic void addCommand(Command command) {\n\t\twasChanged = true;\n\t\tundoBuffer.pushCommand(command);\n\t\teditingActionsFactory.getUndoAction().setEnabled(true);\n\t\teditingActionsFactory.getRedoAction().setEnabled(false);\n\t}\n", + "comment": "adds new command to this component\n" + }, + { + "code_snippet":"\tpublic void finalActions() {\n\t}\n", + "comment": "performs required actions before another tool is set\n" + }, + { + "code_snippet":"\tpublic void setState(ToolState state) {\n\t\t\n\t}\n", + "comment": "sets new state for this tool\n" + }, + { + "code_snippet":"\tpublic void paint(Graphics g, Color backgroundColor) {\n\n\t}\n", + "comment": "performs any additional painting required\n" + }, + { + "code_snippet":"\tpublic void addAlgorythmErrorListener(AlgorythmMessageListener listener) {\n\t\tlisteners.add(listener);\n\t}\n", + "comment": "adds the specified algorythm error listener to recive notification about state\n" + }, + { + "code_snippet":"\tpublic ToggleAction getSelectAction() {\n\t\treturn selectAction;\n\t}\n", + "comment": "returns an action for selecting mode\n" + }, + { + "code_snippet":"\tpublic void removeAlgorythmErrorListener(AlgorythmMessageListener listener) {\n\t\tlisteners.remove(listener);\n\t}\n", + "comment": "removes the specified algorythm error listener from this presentation\n" + }, + { + "code_snippet":"\tpublic void addButton(AbstractButton button) {\n\t\tbuttons.add(button);\n\t}\n", + "comment": "adds button to the list of users\n" + }, + { + "code_snippet":"\tpublic ToggleAction getAddVertexAction() {\n\t\treturn addVertexAction;\n\t}\n", + "comment": "returns an action for adding vertices mode\n" + }, + { + "code_snippet":"\tpublic ToggleAction getAddEdgeAction() {\n\t\treturn addEdgeAction;\n\t}\n", + "comment": "returns an action for adding edges mode\n" + }, + { + "code_snippet":"\tpublic Action getToWeightedAction() {\n\t\treturn toWeightedAction;\n\t}\n", + "comment": "returns an action for converting graph from unweighted to weighted\n" + }, + { + "code_snippet":"\tpublic Action getToUnweightedAction() {\n\t\treturn toUnweightedAction;\n\t}\n", + "comment": "returns an action for converting graph from weighted to unweighted\n" + }, + { + "code_snippet":"\tpublic Action getToUndirectedAction() {\n\t\treturn toUndirectedAction;\n\t}\n", + "comment": "returns an action for converting graph from directed to undirected\n" + }, + { + "code_snippet":"\tpublic Action getCircleLayoutAction() {\n\t\treturn circleLayoutAction;\n\t}\n", + "comment": "returns an action for layout\n" + }, + { + "code_snippet":"\tpublic void messageUnactive() {\n\t\tif (isMessageActive) {\n\t\t\tfireMessageUnactive();\n\t\t}\n\t}\n", + "comment": "makes required actions if message is no longer active\n" + }, + { + "code_snippet":"\tpublic Action getDiscardHighlightingAction() {\n\t\treturn discardHighlightingAction;\n\t}\n", + "comment": "return an action for manually discaring highlighting\n" + }, + { + "code_snippet":"\tpublic void meaasgeActive(String message, boolean isErrorMessage) {\n\t\tfireMessageRecieved(message, isErrorMessage);\n\t}\n", + "comment": "makes required actions if message is active\n" + }, + { + "code_snippet":"\tpublic Action getExitAction() {\n\t\treturn exitAction;\n\t}\n", + "comment": "returns an action for exit\n" + }, + { + "code_snippet":"\tpublic Action getTopSortAction() {\n\t\treturn topSortAction;\n\t}\n", + "comment": "returns an action for topological sort\n" + }, + { + "code_snippet":"\tpublic Action getDijkstraTreeAction() {\n\t\treturn dijkstraAction;\n\t}\n", + "comment": "returns an action for dijkstra algorythm\n" + }, + { + "code_snippet":"\tpublic Action getMinSpanningTreeAction() {\n\t\treturn mstAction;\n\t}\n", + "comment": "returns an action for minimal spanning tree algorythm\n" + }, + { + "code_snippet":"\tpublic Action getMaxFlowAction() {\n\t\treturn maxFlowAction;\n\t}\n", + "comment": "returns an action for maximum flow algorythm\n" + }, + { + "code_snippet":"\tpublic Action getSaveAsAction() {\n\t\treturn saveAsAction;\n\t}\n", + "comment": "returns an action for saving as\n" + }, + { + "code_snippet":"\tpublic void addElementStateListener(ElementStateListener listener) {\n\t\tlisteners.add(listener);\n\t}\n", + "comment": "adds the specified element state listaner to recive notification about state\n" + }, + { + "code_snippet":"\tpublic void removeElementStateListener(ElementStateListener listener) {\n\t\tlisteners.remove(listener);\n\t}\n", + "comment": "removes the specified element state listaner from this presentation\n" + }, + { + "code_snippet":"\tpublic Point getCenter() {\n\t\treturn (Point) center.clone();\n\t}\n", + "comment": "retrieves the center point of this presentation\n" + }, + { + "code_snippet":"\tpublic void setCenter(Point center) {\n\t\tthis.center.setLocation(center);\n\t\tfirePositionChanged();\n\t}\n", + "comment": "sets the center point of this presentation\n" + }, + { + "code_snippet":"\tpublic void paint(Graphics g) {\n\t\tg.setColor(Color.WHITE);\n\t\tg.fillOval(center.x - RADIX, center.y - RADIX, 2 * RADIX, 2 * RADIX);\n\t\tg.setColor(borderColor);\n\t\tg.drawOval(center.x - RADIX, center.y - RADIX, 2 * RADIX, 2 * RADIX);\n\t}\n", + "comment": "paints this vertex using given graphics\n" + }, + { + "code_snippet":"\tpublic boolean containsPoint(Point point) {\n\t\treturn (square(point.x - center.x) + square(point.y - center.y) < square(RADIX) );\n\t}\n", + "comment": "verifies whether this presentation contains given point\n" + }, + { + "code_snippet":"\tpublic boolean isInRect(int x1, int y1, int x2, int y2) {\n\t\treturn (Math.min(x1, x2) <= center.x) && (Math.max(x1, x2) >= center.x) && (Math.min(y1, y2) <= center.y) && (Math.max(y1, y2) >= center.y);\n\t}\n", + "comment": "verifies whether this presentation lays whithin giver rectangle\n" + }, + { + "code_snippet":"\tpublic void addGraphStateListener(GraphStateListener listener) {\n\t\tlisteners.add(listener);\n\t}\n", + "comment": "adds the specified graph state listaner to recive notification about state\n" + }, + { + "code_snippet":"\tpublic void removeGraphStateListener(GraphStateListener listener) {\n\t\tlisteners.remove(listener);\n\t}\n", + "comment": "removes the specified graph state listaner from this presentation\n" + }, + { + "code_snippet":"\tpublic void pauseFiringChanges() {\n\t\tisPaused = true;\n\t}\n", + "comment": "pauses all changes firing until resume is not called\n" + }, + { + "code_snippet":"\tpublic void resumeFiringChanges() {\n\t\tisPaused = false;\n\t\tif (wasPositionChangedRecieved) {\n\t\t\tfirePositionChanged();\n\t\t\twasPositionChangedRecieved = false;\n\t\t}\n\t\tif (wasStructureChangedRecieved) {\n\t\t\tfireStructureChanged();\n\t\t\twasStructureChangedRecieved = false;\n\t\t}\n\t}\n", + "comment": "resumes firing changes\n" + }, + { + "code_snippet":"\tpublic Point getStart() {\n\t\tVertexPresentation sourcePresentation = verticesMap.get(edge\n\t\t\t\t.getSource());\n\t\tPoint sourceCenter = sourcePresentation.getCenter();\n\t\tVertexPresentation destinationPresentation = verticesMap.get(edge\n\t\t\t\t.getDestination());\n\t\tPoint destinationCenter = destinationPresentation.getCenter();\n\t\treturn calculatePoint(destinationCenter, sourceCenter);\n\t}\n", + "comment": "returns edge start point\n" + }, + { + "code_snippet":"\tpublic void paint(Graphics gr, Color backgroundColor) {\n\t\tfor (EdgePresentation ep : edges) {\n\t\t\tep.paint(gr, backgroundColor);\n\t\t}\n\t\tfor (VertexPresentation vp : vertices) {\n\t\t\tvp.paint(gr);\n\t\t}\n\t}\n", + "comment": "paints this graph using given graphics\n" + }, + { + "code_snippet":"\tpublic void addVertex(VertexPresentation vp) {\n\t\tgraph.addVertex(vp.getVertex());\n\t\tvertices.add(vp);\n\t\tverticesMap.put(vp.getVertex(), vp);\n\t\tvp.addElementStateListener(elementStateListener);\n\t\tfireStructureChanged();\n\t}\n", + "comment": "adds this vertex presentation to graph presentation\n" + }, + { + "code_snippet":"\tpublic void removeVertex(VertexPresentation vp) {\n\t\tfor (Edge edge : vp.getVertex().getOutgoingEdges()) {\n\t\t\tEdgePresentation ep = edgesMap.remove(edge);\n\t\t\tedges.remove(ep);\n\t\t}\n\t\tfor (Edge edge : vp.getVertex().getIncomingEdges()) {\n\t\t\tEdgePresentation ep = edgesMap.remove(edge);\n\t\t\tedges.remove(ep);\n\t\t}\n\t\tgraph.removeVertex(vp.getVertex());\n\t\tvertices.remove(vp);\n\t\tverticesMap.remove(vp);\n\t\tvp.removeElementStateListener(elementStateListener);\n\t\tfireStructureChanged();\n\t}\n", + "comment": "removes this vertex presentation from graph presentation\n" + }, + { + "code_snippet":"\tpublic void paint(Graphics gr, Color backgroundColor) {\n\t\tgr.setColor(color);\n\t\tPoint start = getStart();\n\t\tPoint end = getEnd();\n\t\t\n\t\tgr.drawLine(start.x, start.y, end.x, end.y);\n\t\tif (isDirected) {\n\t\t\tdrawArrow(gr, start, end);\n\t\t}\n\t\tif (isWeighted) {\n\t\t\tdrawWeight(gr, start, end, backgroundColor);\n\t\t}\n\t}\n", + "comment": "paints this edge using given graphics\n" + }, + { + "code_snippet":"\tpublic void addEdge(EdgePresentation ep) {\n\t\tgraph.addEdge(ep.getEdge());\n\t\tedges.add(ep);\n\t\tedgesMap.put(ep.getEdge(), ep);\n\t\tep.addElementStateListener(elementStateListener);\n\t\tfireStructureChanged();\n\t}\n", + "comment": "adds this edge presentation to graph presentation\n" + }, + { + "code_snippet":"\tpublic void removeEdge(EdgePresentation ep) {\n\t\tgraph.disconnect(ep.getEdge().getSource(), ep.getEdge()\n\t\t\t\t.getDestination());\n\t\tedges.remove(ep);\n\t\tedgesMap.remove(ep);\n\t\tep.removeElementStateListener(elementStateListener);\n\t\tfireStructureChanged();\n\t}\n", + "comment": "removes this edge presentation from graph presentation\n" + }, + { + "code_snippet":"\tpublic boolean areConnected(VertexPresentation sourcePr, VertexPresentation destinPr) {\n\t\treturn graph.areConnected(sourcePr.getVertex(), destinPr.getVertex());\n\t}\n", + "comment": "checks whether given vertices are connected\n" + }, + { + "code_snippet":"\tprivate void validate() throws ParserConfigurationException, SAXException, IOException {\n\t\tDocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();\n\t\tfactory.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);\n\t\tfactory.setAttribute(JAXP_SCHEMA_SOURCE, new File(ClassLoader\n\t\t\t\t\t.getSystemResource(MY_SCHEMA).getFile()));\n\t\t\n\t\t\n\t\tDocumentBuilder builder = factory.newDocumentBuilder();\n\t\tbuilder.setErrorHandler(errorHandler);\n\t\tdocument = builder.parse(file);\n\t\tif (getErrorMessages().size() != 0) {\n\t\t\tthrow new SAXException();\n\t\t}\n\t}\n", + "comment": "validates file according to xml schema\n" + }, + { + "code_snippet":"\tpublic Dimension getPreferredSize() {\n\t\tint resultX = 0;\n\t\tint resultY = 0;\n\t\tfor (VertexPresentation vp : vertices) {\n\t\t\tresultX = Math.max(resultX, vp.getCenter().x + VertexPresentation.RADIX + 1);\n\t\t\tresultY = Math.max(resultY, vp.getCenter().y + VertexPresentation.RADIX + 1);\n\t\t}\n\t\treturn new Dimension(resultX, resultY);\n\t}\n", + "comment": "returns preferred graph view size\n" + }, + { + "code_snippet":"\tpublic void parseGraph() throws ParserConfigurationException, SAXException, IOException {\n\t\tvalidate();\n\t\t\n\t\tElement root = document.getDocumentElement();\n\t\tNode graphNode = root.getElementsByTagName(\"model\").item(0);\n\t\tNodeList vertices = root.getElementsByTagName(\"vertex\");\n\t\tNodeList edges = root.getElementsByTagName(\"edge\");\n\t\t\n\t\tif (\"yes\".equals(graphNode.getAttributes().getNamedItem(\"directed\").getNodeValue())) {\n\t\t\tgraph = new DirectedGraph();\n\t\t\tisDirected = true;\n\t\t} else {\n\t\t\tgraph = new UndirectedGraph();\n\t\t\tisDirected = false;\n\t\t}\n\t\t\n\t\tparseGraphElements(vertices, edges);\n\t}\n", + "comment": "parses graph from file\n" + }, + { + "code_snippet":"\tpublic AbstractGraph getGraph() {\n\t\treturn graph;\n\t}\n", + "comment": "returns model graph of this presentation\n" + }, + { + "code_snippet":"\tpublic void parsePresentation() throws ParserConfigurationException, SAXException, IOException {\n\t\tparseGraph();\n\t\t\n\t\tElement root = document.getDocumentElement();\n\t\tNode presentationNode = root.getElementsByTagName(\"presentation\").item(0);\n\t\tNodeList centers = root.getElementsByTagName(\"center\");\n\t\t\n\t\tif (\"yes\".equals(presentationNode.getAttributes().getNamedItem(\"weighted\").getNodeValue())) {\n\t\t\tpresentation = new GraphPresentation(graph, isDirected, true);\n\t\t} else {\n\t\t\tpresentation = new GraphPresentation(graph, isDirected, false);\n\t\t}\n\t\t\n\t\tparseVertexCenters(centers);\n\t}\n", + "comment": "parses graph presentation from file\n" + }, + { + "code_snippet":"\tpublic boolean isWeighted() {\n\t\treturn isWeighted;\n\t}\n", + "comment": "checks whether this presentation is weighted\n" + }, + { + "code_snippet":"\tpublic void setWeight(int weight) {\n\t\tedge.setWeight(weight);\n\t\tfireStructureChanged();\n\t}\n", + "comment": "sets weight of this presentation\n" + }, + { + "code_snippet":"\tpublic AbstractGraph getGraph() {\n\t\tif (graph == null) {\n\t\t\tthrow new IllegalStateException(\"Graph hasn't been parsed yet!\");\n\t\t}\n\t\treturn graph;\n\t}\n", + "comment": "returns parsed graph\n" + }, + { + "code_snippet":"\tpublic GraphPresentation getGraphPresentation() {\n\t\tif (presentation == null) {\n\t\t\tthrow new IllegalStateException(\"Presentation hasn't been parsed yet!\");\n\t\t}\n\t\treturn presentation;\n\t}\n", + "comment": "returns parsed graph presentation\n" + }, + { + "code_snippet":"\tpublic int getWeight() {\n\t\treturn edge.getWeight();\n\t}\n", + "comment": "returns this presentation weight\n" + }, + { + "code_snippet":"\tpublic void saveGraph(AbstractGraph graph) throws ParserConfigurationException, TransformerException {\n\t\tcreateDOMTreeRoot();\n\t\tgraphElement.appendChild(createModelElement(graph));\n\t\twriteTreeToFile();\n\t}\n", + "comment": "saves given graph to xml file\n" + }, + { + "code_snippet":"\tpublic void saveGraphPresentation(GraphPresentation graphPresentation) throws ParserConfigurationException, TransformerException {\n\t\tcreateDOMTreeRoot();\n\t\tgraphElement.appendChild(createModelElement(graphPresentation.getGraph()));\n\t\tgraphElement.appendChild(createPresentationElement(graphPresentation));\n\t\twriteTreeToFile();\n\t}\n", + "comment": "saves given graph presentation to xml file\n" + }, + { + "code_snippet":"\tpublic Point getUpperLeftWeightPoint() {\n\t\tif (!isWeighted) {\n\t\t\treturn null;\n\t\t}\n\t\tint x = (getStart().x + getEnd().x) / 2;\n\t\tint y = (getStart().y + getEnd().y) / 2;\n\t\treturn new Point(x - WEIGHT_SHIFT / 2, y - weightHeight / 2 - WEIGHT_SHIFT\n\t\t\t\t/ 2);\n\t}\n", + "comment": "return upper left point of weight rect\n" + }, + { + "code_snippet":"\tpublic void mark(Color markColor) {\n\t\tthis.color = markColor;\n\t}\n", + "comment": "marks this presentation\n" + }, + { + "code_snippet":"\tpublic Vertex getDestination() {\n\t\treturn destination;\n\t}\n", + "comment": "returns a destination vertex of this edge\n" + }, + { + "code_snippet":"\tpublic Vertex getOppositeVertex(Vertex vertex) {\n\t\treturn vertex.equals(source) ? destination : (vertex\n\t\t\t\t.equals(destination) ? source : null);\n\t}\n", + "comment": "returns a vertex opposite to the given one\n" + }, + { + "code_snippet":"\tpublic void unmark() {\n\t\tcolor = Color.black;\n\t}\n", + "comment": "unmarks this presentation\n" + }, + { + "code_snippet":"\tpublic void addVertex(Vertex vertex) {\n\t\tif (vertices.contains(vertex)) {\n\t\t\tthrow new IllegalArgumentException(\"Vertex already in graph\");\n\t\t}\n\t\tif ((vertex.getOutgoingEdges().size() != 0) || (vertex.getIncomingEdges().size() != 0)) {\n\t\t\tthrow new IllegalArgumentException(\"Vertex has adjusted edges\");\n\t\t}\n\t\tvertices.add(vertex);\n\t}\n", + "comment": "adds given vertex to graph\n" + }, + { + "code_snippet":"\tpublic boolean containsPoint(Point point) {\n\t\tPoint start = getStart();\n\t\tPoint end = getEnd();\n\t\tint scalarProdWithStart = scalarProduct(point.x - start.x, point.y\n\t\t\t\t- start.y, end.x - start.x, end.y - start.y);\n\t\tint scalarProdWithEnd = scalarProduct(point.x - end.x, point.y - end.y,\n\t\t\t\tend.x - start.x, end.y - start.y);\n\t\tif ((scalarProdWithStart >= 0) && (scalarProdWithEnd <= 0)) {\n\t\t\treturn (distanceToEdge(point, start, end) <= SELECTING_DISTANCE);\n\n\t\t}\n\t\treturn false;\n\t}\n", + "comment": "verifies whether this presentation contains given point\n" + }, + { + "code_snippet":"\tpublic boolean areConnected(Vertex source, Vertex destination) {\n\t\treturn (getConnectingEdge(source, destination) != null);\n\t}\n", + "comment": "checkes whether two given vertices are connected with an edge\n" + }, + { + "code_snippet":"\tpublic boolean isInRect(int x1, int y1, int x2, int y2) {\n\t\treturn isPointInRect(getStart(), x1, y1, x2, y2)\n\t\t\t\t&& isPointInRect(getEnd(), x1, y1, x2, y2);\n\t}\n", + "comment": "verifies whether this presentation lays whithin giver rectangle\n" + }, + { + "code_snippet":"\tprotected void testVertexToConnect(Vertex source, Vertex destination) {\n\t\ttestVertices(source, destination);\n\t\tif (areConnected(source, destination)) {\n\t\t\tthrow new IllegalArgumentException(\"Vertices already connected\");\n\t\t}\n\t}\n", + "comment": "checkes all contracts of connect\n" + }, + { + "code_snippet":"\tprotected void addVertexToGraph(Vertex vertex) {\n\t\tvertices.add(vertex);\n\t}\n", + "comment": "enables subclasses to add vertices to graph\n" + }, + { + "code_snippet":"\tprotected void removeVertexFromGraph(Vertex vertex) {\n\t\tvertex.removeEdges();\n\t\tvertices.remove(vertex);\n\t}\n", + "comment": "enables subclasses to remove vertices from graph\n" + }, + { + "code_snippet":"\tpublic boolean isWeightSelected(Point point) {\n\t\tint x = (getStart().x + getEnd().x) / 2;\n\t\tint y = (getStart().y + getEnd().y) / 2;\n\t\treturn (isWeighted && (x - WEIGHT_SHIFT / 2) <= point.x)\n\t\t\t\t&& (point.x <= (x + weightWidth + WEIGHT_SHIFT))\n\t\t\t\t&& ((y - weightHeight - WEIGHT_SHIFT / 2) <= point.y)\n\t\t\t\t&& (point.y <= (y + weightHeight + WEIGHT_SHIFT));\n\t}\n", + "comment": "verifies whether given point is in this prenentation weight rect\n" + }, + { + "code_snippet":"\tprotected boolean isVertexInGraph(Vertex vertex) {\n\t\treturn vertices.contains(vertex);\n\t}\n", + "comment": "checks whether the given vertex is in graph\n" + }, + { + "code_snippet":"\tprotected void testVertices(Vertex source, Vertex destination) {\n\t\tif (!isVertexInGraph(source)) {\n\t\t\tthrow new IllegalArgumentException(\n\t\t\t\t\t\"Source vertex not in this graph.\");\n\t\t}\n\t\tif (!isVertexInGraph(destination)) {\n\t\t\tthrow new IllegalArgumentException(\n\t\t\t\t\t\"Destination vertex not in this graph.\");\n\t\t}\n\t}\n", + "comment": "checks whether the given vertices are in graph\n" + }, + { + "code_snippet":"\tpublic void testWrongDisconnection() {\n\t\tAssert.assertTrue(!graph.disconnect(vertices[0], vertices[3]));\n\t}\n", + "comment": "tests special case of\n" + }, + { + "code_snippet":" public Class getComponentType() {\n return type;\n }\n", + "comment": "get the component type\n" + }, + { + "code_snippet":" public Object getComponentKey() {\n return ckey;\n }\n", + "comment": "get the component key\n" + }, + { + "code_snippet":" public int getOrdinalPosition() {\n return num;\n }\n", + "comment": "get the ordinal position of the parameter starting from 0\n" + }, + { + "code_snippet":" public ComponentMonitor getComponentMonitor(){\n return (ComponentMonitor)java.lang.reflect.Proxy.newProxyInstance(\n getClass().getClassLoader(), new Class[]{ComponentMonitor.class},\n new java.lang.reflect.InvocationHandler(){\n public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {\n return fire(method, args);\n }\n }\n );\n }\n", + "comment": "to create a component monitor instance that sequentially invoke\n" + }, + { + "code_snippet":" public Signature getSource() {\n return source;\n }\n", + "comment": "to get the signature of the method call that caused this error\n" + }, + { + "code_snippet":" public Object getPropertyKey() {\n return lkey;\n }\n", + "comment": "get the property key\n" + }, + { + "code_snippet":" public Class getParameterType() {\n return type;\n }\n", + "comment": "get the expected property type\n" + }, + { + "code_snippet":" public boolean isPooled(){\n return pooled;\n }\n", + "comment": "is this pool currently having something in cache\n" + }, + { + "code_snippet":" public Object getObject() throws Exception {\n return yan.instantiateComponent(cc);\n }\n", + "comment": "instantiate the component\n" + }, + { + "code_snippet":" public Class getObjectType() {\n return cc.getType();\n }\n", + "comment": "get the static type of the component\n" + }, + { + "code_snippet":" public Component getComponent() {\n return cc;\n }\n", + "comment": "get the component in this object\n" + }, + { + "code_snippet":" public Container getContainer() {\n return yan;\n }\n", + "comment": "get the container in this object\n" + }, + { + "code_snippet":" public int getBeanDefinitionCount() {\n final Set keys = yan.keys();\n int ret = 0;\n for(Iterator it=keys.iterator(); it.hasNext();){\n final Object key = it.next();\n if(key instanceof String){\n ret++;\n }\n }\n return ret;\n }\n", + "comment": "get the number of components registered under a string key\n" + }, + { + "code_snippet":" public Object getState() {\n return null;\n }\n", + "comment": "gets the user state of this component\n" + }, + { + "code_snippet":" public Component withState(Object obj){\n return Components.withState(this, obj);\n }\n", + "comment": "create a new component object with the specified user state\n" + }, + { + "code_snippet":" public Component singleton(){\n return Components.singleton(this);\n }\n", + "comment": "create a new component that utilizes singleton pattern when creating instance\n" + }, + { + "code_snippet":" public Component singleton(Pool scope){\n return Components.singleton(this, scope);\n }\n", + "comment": "create a new component that utilizes singleton pattern\n" + }, + { + "code_snippet":" public Component factory(Class factory_type, String toString){\n return Components.factory(this, factory_type, toString);\n }\n", + "comment": "create a component that instantiates a factory interface\n" + }, + { + "code_snippet":" public Map getBeansOfType(Class type) throws BeansException {\n return getBeansOfType(type, true, true);\n }\n", + "comment": "get the string object map of all components with the given type\n" + }, + { + "code_snippet":" public Component factory(Class factory_type){\n return factory(factory_type, factory_type.getName());\n }\n", + "comment": "create a component that instantiates a factory interface\n" + }, + { + "code_snippet":" public Component ctor(Constructor ctor){\n return Components.fun(ctor(ctor, mon));\n }\n", + "comment": "create a component for a constructor with monitoring support\n" + }, + { + "code_snippet":" public Object getDuplicatedKey() {\n return key;\n }\n", + "comment": "get the key object duplicated\n" + }, + { + "code_snippet":" public Component factory(String toString){\n return Components.factory(this, toString);\n }\n", + "comment": "create a component that instantiates the\n" + }, + { + "code_snippet":" public Component factory(){\n return factory(\"factory\");\n }\n", + "comment": "create a component that instantiates the\n" + }, + { + "code_snippet":" public Component guard(){\n return Components.guard(this);\n }\n", + "comment": "decorate this component so that\n" + }, + { + "code_snippet":" public Component method(Object obj, Method mtd){\n return Components.fun(method(obj, mtd, mon));\n }\n", + "comment": "create a component for a method with monitoring support\n" + }, + { + "code_snippet":" public Object getBean(final String name) throws BeansException {\n /*\n if(BeanFactoryUtils.isFactoryDereference(name)){\n final String factoryname = BeanFactoryUtils.transformedBeanName(name);\n return getFactoryBean(findComponent(factoryname));\n }\n else{\n return instantiate(findComponent(name)); \n }*/\n return getBean(name, null);\n }\n", + "comment": "get a bean object\n" + }, + { + "code_snippet":" public Component bindArguments(ParameterBinder binder){\n return Components.bindArguments(this, binder);\n }\n", + "comment": "create a new component object that\n" + }, + { + "code_snippet":" public Component bindArgument(int k, ParameterBinder binder){\n return Components.bindArgument(this, k, binder);\n }\n", + "comment": "create a new component object that\n" + }, + { + "code_snippet":" public Component withArguments(Part part){\n return Components.withArguments(this, part);\n }\n", + "comment": "create a new component object that\n" + }, + { + "code_snippet":" public Component withProperty(Object k, Creator factory){\n return Components.withProperty(this, k, factory);\n }\n", + "comment": "create a new component object that\n" + }, + { + "code_snippet":" public Component withProperty(Object k, Part p){\n return Components.withProperty(this, k, p);\n }\n", + "comment": "create a new component object that\n" + }, + { + "code_snippet":" public Component withProperties(Map props){\n return Components.withProperties(this, props);\n }\n", + "comment": "create a new component object that\n" + }, + { + "code_snippet":" public Component withProperties(String[] keys, Creator[] creators){\n return Components.withProperties(this, keys, creators);\n }\n", + "comment": "create a new component object that\n" + }, + { + "code_snippet":" public Component bindProperties(PropertyBinder binder){\n return Components.bindProperties(this, binder);\n }\n", + "comment": "create a new component object that\n" + }, + { + "code_snippet":" public Registrar getChild() {\n return child;\n }\n", + "comment": "get the child container\n" + }, + { + "code_snippet":" public Registrar getParent() {\n return parent;\n }\n", + "comment": "get the parent container\n" + }, + { + "code_snippet":" public Component bindProperty(Object k, PropertyBinder binder){\n return Components.bindProperty(this, k, binder);\n }\n", + "comment": "create a new component object that\n" + }, + { + "code_snippet":" public void registerComponent(Object key, Component cc) {\n child.registerComponent(key, cc);\n }\n", + "comment": "registers the component to the child container\n" + }, + { + "code_snippet":" public void unregisterComponentsOfType(Class type){\n child.unregisterComponentsOfType(type);\n }\n", + "comment": "unregisters components of a provided type from child container\n" + }, + { + "code_snippet":" public void unregisterComponent(Object key) {\n child.unregisterComponent(key);\n //parent.unregisterComponent(key);\n }\n", + "comment": "unregisters a component identified by a key\n" + }, + { + "code_snippet":" public Component getComponent(Object key) {\n Component cc = child.getComponent(key);\n if(cc==null) return parent.getComponent(key);\n else return cc;\n }\n", + "comment": "retrieves a component identified by a key\n" + }, + { + "code_snippet":" public Component getComponentOfType(Class type){\n Component c1 = getComponent(type);\n if(c1!=null) return c1;\n c1 = child.getComponentOfType(type);\n if(c1!=null) return c1;\n else return parent.getComponentOfType(type);\n }\n", + "comment": "retrieves a component of a provided type\n" + }, + { + "code_snippet":" public Component withProperties(Part p){\n return Components.withProperties(this, p);\n }\n", + "comment": "create a new component object that uses a part object\n" + }, + { + "code_snippet":" public Dependency getDependencyOfType(Class type, ComponentMap cmap){\n if(type==null || child.containsType(type))\n return child.getDependencyOfType(type, cmap);\n else return parent.getDependencyOfType(type, parent);\n }\n", + "comment": "gets the dependency object for a component of\n" + }, + { + "code_snippet":" public Component subsume(Class type){\n return Components.subsume(this, type);\n }\n", + "comment": "create a new component object that returns the given type\n" + }, + { + "code_snippet":" public void verify(ComponentMap cmap) {\n child.verify(cmap);\n parent.verify(parent);\n }\n", + "comment": "verifies all components in this container\n" + }, + { + "code_snippet":" public Component cast(Class type){\n return Components.cast(this, type);\n }\n", + "comment": "create a new component object that returns the given type\n" + }, + { + "code_snippet":" public Component transform(Object key, Component cc){\n return transform(cc);\n }\n", + "comment": "transforms one component object to another\n" + }, + { + "code_snippet":" public Component proxy(Class[] itfs){\n return Components.proxy(this, itfs);\n }\n", + "comment": "create a new component object that uses dynamic proxy\n" + }, + { + "code_snippet":" public Component proxy(Class itf){\n return Components.proxy(this, itf);\n }\n", + "comment": "create a new component object that uses dynamic proxy\n" + }, + { + "code_snippet":" public Component proxy(){\n return Components.proxy(this);\n }\n", + "comment": "create a new component object that uses dynamic proxy\n" + }, + { + "code_snippet":" public Object getComponentKey(){\n return key;\n }\n", + "comment": "get the component key\n" + }, + { + "code_snippet":" public Class getSource() {\n return source;\n }\n", + "comment": "to get the source of the exception\n" + }, + { + "code_snippet":" public Component map(jfun.yan.Map m){\n return Monad.map(this, m);\n }\n", + "comment": "create a new component that upon creation\n" + }, + { + "code_snippet":" public Component mutate(Mutation m){\n return Components.mutate(this, m);\n }\n", + "comment": "create a new component that upon creation\n" + }, + { + "code_snippet":" public Component incomplete(){\n return Components.incomplete(this);\n }\n", + "comment": "by default all components depended by this component\n" + }, + { + "code_snippet":" public Method getMethod() {\n return mtd;\n }\n", + "comment": "get the problematic method\n" + }, + { + "code_snippet":" public int getParameterCount() {\n return num_params;\n }\n", + "comment": "get the total number of parameters\n" + }, + { + "code_snippet":" public Map getParameters() {\n return params;\n }\n", + "comment": "get the parameters\n" + }, + { + "code_snippet":" public Map getProperties() {\n return props;\n }\n", + "comment": "get the properties\n" + }, + { + "code_snippet":" public Class getComponentType(){\n return rtype;\n }\n", + "comment": "get the property type\n" + }, + { + "code_snippet":" public void registerConstructor(Class c){\n registerConstructor(c, c);\n }\n", + "comment": "the component is transformed by\n" + }, + { + "code_snippet":" public Object getPropertyKey() {\n return key;\n }\n", + "comment": "gets the property key\n" + }, + { + "code_snippet":" public Object getObject() {\n return obj;\n }\n", + "comment": "gets the object that has the property\n" + }, + { + "code_snippet":" protected Component defaultTransform(Component comp){\n return comp.singleton();\n }\n", + "comment": "transforms a component by calling singleton\n" + }, + { + "code_snippet":" public Component ignoreProperty(Object key){\n return withProperty(key, Components.useDefault());\n }\n", + "comment": "ignore the property identified by a key and use the default mechanism\n" + }, + { + "code_snippet":" public void registerConstructor(Object key, Class c){\n registerComponent(key, defaultTransform(Components.ctor(c)));\n }\n", + "comment": "the component is transformed by\n" + }, + { + "code_snippet":" public void registerConstructor(Class c, Class[] param_types){\n registerConstructor(c, c, param_types);\n }\n", + "comment": "the component is transformed by\n" + }, + { + "code_snippet":" public Component optionalProperty(Object key){\n return Components.optionalProperty(this, key);\n }\n", + "comment": "make a property identified by a key optional\n" + }, + { + "code_snippet":" public void registerConstructor(Object key, Class c, Class[] param_types){\n registerComponent(key, \n defaultTransform(Components.ctor(c, param_types)));\n }\n", + "comment": "the component is transformed by\n" + }, + { + "code_snippet":" public void registerStaticMethod(Class c, String name){\n final Component comp = Components.static_method(c, name);\n registerComponent(defaultTransform(comp));\n }\n", + "comment": "the component is transformed by\n" + }, + { + "code_snippet":" public Class getActualType() {\n return actual_type;\n }\n", + "comment": "get the actual argument type\n" + }, + { + "code_snippet":" public Class getExpectedType() {\n return expected_type;\n }\n", + "comment": "get the expected type\n" + }, + { + "code_snippet":" public Component optionalProperties(){\n return Components.optionalProperties(this);\n }\n", + "comment": "make sure the properties are optional\n" + }, + { + "code_snippet":" public void registerStaticMethod(Object key, Class c, String name){\n registerComponent(key, \n defaultTransform(Components.static_method(c, name)));\n }\n", + "comment": "the component is transformed by\n" + }, + { + "code_snippet":" public void registerStaticMethod(Class c, String name, Class[] param_types){\n final Component comp = Components.static_method(c, name, param_types);\n registerComponent(defaultTransform(comp));\n }\n", + "comment": "the component is transformed by\n" + }, + { + "code_snippet":" public void registerStaticMethod(Object key, Class c, String name, Class[] param_types){\n registerComponent(key, \n defaultTransform(Components.static_method(c, name, param_types)));\n }\n", + "comment": "the component is transformed by\n" + }, + { + "code_snippet":" public Component optionalParameter(int ind){\n return Components.optionalParameter(this, ind);\n }\n", + "comment": "make a parameter optional\n" + }, + { + "code_snippet":" public void checkElement(int i, Class type){}\n", + "comment": "subclasses may choose to override this method\n" + }, + { + "code_snippet":" public ResourceLoader getPrimary(){\n return primary;\n }\n", + "comment": "get the primary resource\n" + }, + { + "code_snippet":" public ResourceLoader getAlternative(){\n return alt;\n }\n", + "comment": "get the alternative resource\n" + }, + { + "code_snippet":" public Component optionalParameters(){\n return Components.optionalParameters(this);\n }\n", + "comment": "make sure the parameters are optional\n" + }, + { + "code_snippet":" public Component withDefaultProperty(Object key, Creator def){\n return Components.withDefaultProperty(this, key, def);\n }\n", + "comment": "create a component object that will use an alternative creator object\n" + }, + { + "code_snippet":" public Component withDefaultArgument(int ind, Creator def){\n return Components.withDefaultArgument(this, ind, def);\n }\n", + "comment": "create a component object that will use an alternative creator object\n" + }, + { + "code_snippet":" public Constructor getConstructor(Class[] param_types){\n final Params params = new Params(param_types);\n return (Constructor)ctors.get(params);\n }\n", + "comment": "get the public constructor object identified by an array of parameter types\n" + }, + { + "code_snippet":" public Component optional(){\n return Monad.mplus(this, Components.useDefault());\n }\n", + "comment": "creates an optional component\n" + }, + { + "code_snippet":" public Component option(Object val){\n return Monad.mplus(this, Components.value(val));\n }\n", + "comment": "creates an optional component\n" + }, + { + "code_snippet":" public Component recover(Recovery r){\n return Monad.recover(this, r);\n }\n", + "comment": "create a new component object that will recover errors\n" + }, + { + "code_snippet":" public Component bind(Binder binder){\n return Monad.bind(this, binder);\n }\n", + "comment": "monadic bind operation\n" + }, + { + "code_snippet":" public Component bind(ComponentBinder binder){\n return Monad.bind(this, binder);\n }\n", + "comment": "monadic bind operation\n" + }, + { + "code_snippet":" public Component ifelse(Component yes, Component no){\n return Monad.ifelse(this, yes, no);\n }\n", + "comment": "create a component object according to the boolean value returned from this component\n" + }, + { + "code_snippet":" public Method getMethod(String name, Class[] param_types, boolean suppress_security){\n if(suppress_security)\n return getAnyMethod(name, param_types);\n else\n return getMethod(name, param_types);\n }\n", + "comment": "get the method identified by a signature\n" + }, + { + "code_snippet":" public Component followedBy(ComponentBinder binder){\n return Monad.followedBy(this, binder);\n }\n", + "comment": "create a staged component\n" + }, + { + "code_snippet":" protected Object getServiceKey(Service service){\n return \"service.\" + service.getSimpleName();\n }\n", + "comment": "get the key for caching a service\n" + }, + { + "code_snippet":" public Method getMethod(String name, Class[] param_types){\n return mtds.getMethod(new Sig(name, param_types));\n }\n", + "comment": "get the public method identified by a signature\n" + }, + { + "code_snippet":" public Component followedBy(Binder binder){\n return Monad.followedBy(this, binder);\n }\n", + "comment": "create a staged component\n" + }, + { + "code_snippet":" public Component followedBy(Creator c2){\n return Monad.followedBy(this, c2);\n }\n", + "comment": "create a staged component\n" + }, + { + "code_snippet":" public Factory getServant(){\n return servant;\n }\n", + "comment": "gets the factory that creates the servant object who backs this service\n" + }, + { + "code_snippet":" public Field getField(String name, boolean suppress_security){\n if(suppress_security)\n return getAnyField(name);\n else\n return getField(name);\n }\n", + "comment": "get the field object identified by name\n" + }, + { + "code_snippet":" public Component seq(Creator c2){\n return Monad.seq(this, c2);\n }\n", + "comment": "monadic sequence operation\n" + }, + { + "code_snippet":" public Field getField(String name){\n return flds.getField(name);\n }\n", + "comment": "get the public field object identified by name\n" + }, + { + "code_snippet":" public Component fromProperties(Object[] keys){\n return Components.fromProperties(this, keys);\n }\n", + "comment": "redirects resolution of arguments to properties\n" + }, + { + "code_snippet":" public Component fromArguments(Object[] keys){\n return Components.fromArguments(this, keys);\n }\n", + "comment": "redirects resolution of properties to arguments\n" + }, + { + "code_snippet":" public Component seal(){\n return Components.seal(this);\n }\n", + "comment": "create a sealed component\n" + }, + { + "code_snippet":" public Component getServant(){\n final Component cc = getComponent();\n if(cc!=null) return cc;\n if(this.implementationClass != null)\n return Components.ctor(this.implementationClass);\n if(this.serviceInterface != null)\n return Components.ctor(this.serviceInterface);\n throw raise(\n \"at least one of \\\"component\\\", \\\"serviceClass\\\" or \\\"implementationClass\\\" has to be specified.\"); \n }\n", + "comment": "get the component for the actual servant\n" + }, + { + "code_snippet":" public TypeFilteredPropertyPredicate addType(Class type){\n try{\n final BeanType btype = BeanType.instance(type);\n final Set names = btype.getPropertyNames();\n for(Iterator it=names.iterator();it.hasNext();){\n final String key = (String)it.next();\n final Method writer = btype.getWriter(key);\n if(writer!=null){\n addProperty(writer.getDeclaringClass(), key);\n }\n }\n }\n catch(IntrospectionException e){}\n return this;\n }\n", + "comment": "add property setters of an entire class to the filter list\n" + }, + { + "code_snippet":" public TypeFilteredPropertyPredicate addProperty(Class type, String key){\n final Object slot = filter_types.get(key);\n if(slot==null){\n filter_types.put(key, type);\n }\n else{\n final ArrayList list = toArrayList(slot);\n list.add(type);\n filter_types.put(key, list);\n }\n return this;\n }\n", + "comment": "add a single property of a type to the filter list\n" + }, + { + "code_snippet":" public Class getType() {\n return componentType;\n }\n", + "comment": "get the component type\n" + }, + { + "code_snippet":" public Class getType1() {\n return t1;\n }\n", + "comment": "gets the type of the first candidate component\n" + }, + { + "code_snippet":" public Class getType2() {\n return t2;\n }\n", + "comment": "gets the type of the second candidate component\n" + }, + { + "code_snippet":" public Function getFunction() {\n return f;\n }\n", + "comment": "gets the function object\n" + }, + { + "code_snippet":" public int getOrdinalPosition() {\n return pos;\n }\n", + "comment": "gets the ordinal position of the parameter\n" + }, + { + "code_snippet":" public Object getArrayObject() {\n return arr;\n }\n", + "comment": "get the array object that stores the elements\n" + }, + { + "code_snippet":" public Component method(final java.lang.reflect.Method mtd){\n return Components.bindMethod(this, mtd);\n }\n", + "comment": "creates a component that will call a certain method\n" + }, + { + "code_snippet":" public int getBegin() {\n return begin;\n }\n", + "comment": "get the begin index\n" + }, + { + "code_snippet":" public Set getSet() {\n return set;\n }\n", + "comment": "get the set object storing the component instances\n" + }, + { + "code_snippet":" public Component field(final java.lang.reflect.Field fld){\n return Components.bindField(this, fld);\n }\n", + "comment": "creates a component that will read a certain field\n" + }, + { + "code_snippet":" public Component repeat(int times){\n return Components.repeat(this, times);\n }\n", + "comment": "create a new component that repeatedly call this component for\n" + }, + { + "code_snippet":" public Component synchronize(){\n return Components.synchronizedComponent(this);\n }\n", + "comment": "create a component that the create method is put in a\n" + }, + { + "code_snippet":" public void contextInitialized(ServletContextEvent event) {\n this.yanLoader = createYanLoader();\n this.yanLoader.initContainer(event.getServletContext());\n }\n", + "comment": "initialize the root web application context\n" + }, + { + "code_snippet":" protected YanLoader createYanLoader() {\n return new YanLoader();\n }\n", + "comment": "create the yan loader to use\n" + }, + { + "code_snippet":" public void init() throws ServletException {\n this.YanLoader = createYanLoader();\n this.YanLoader.initContainer(getServletContext());\n }\n", + "comment": "initialize the root web application context\n" + }, + { + "code_snippet":" public YanLoader getYanLoader() {\n return yanLoader;\n }\n", + "comment": "return the yan loader used by this listener\n" + }, + { + "code_snippet":" public void contextDestroyed(ServletContextEvent event){\n if (this.yanLoader != null) {\n this.yanLoader.destroy(event.getServletContext());\n }\n }\n", + "comment": "close the root web application context\n" + }, + { + "code_snippet":" public void destroy() {\n if (this.YanLoader != null) {\n this.YanLoader.destroy(getServletContext());\n }\n }\n", + "comment": "close the root web application context\n" + }, + { + "code_snippet":" public void service(HttpServletRequest request, HttpServletResponse response) throws IOException {\n getServletContext().log(\n \"Attempt to call service method on YanLoaderServlet as [\" +\n request.getRequestURI() + \"] was ignored\");\n response.sendError(HttpServletResponse.SC_BAD_REQUEST);\n }\n", + "comment": "this should never even be called since no mapping to this servlet should\n" + }, + { + "code_snippet":" public ServletContext getServletContext(){\n return ctxt;\n }\n", + "comment": "to get the servlet context object\n" + }, + { + "code_snippet":" public ResourceLoader getResourceLoader(){\n return loader;\n }\n", + "comment": "to get the resource loader object\n" + }, + { + "code_snippet":" protected Object getMutex(){\n return getSession();\n }\n", + "comment": "this is not guaranteed to be safe\n" + }, + { + "code_snippet":" public Procedure getProcedure() {\n return proc;\n }\n", + "comment": "to get the procedure to invoke\n" + }, + { + "code_snippet":" public Container initContainer(ServletContext ctxt){\n return initContainer(\n ClassLoaderUtils.guessClassLoader(getClass().getClassLoader()),\n ctxt);\n }\n", + "comment": "initialize this object by instantiating container and life cycle manager\n" + }, + { + "code_snippet":" public boolean isEmpty(){\n return entries.isEmpty();\n }\n", + "comment": "is any life cycle phase defined at all\n" + }, + { + "code_snippet":" public ExceptionHandler getExceptionHandler() {\n return handler;\n }\n", + "comment": "to get the exception handler of this phase\n" + }, + { + "code_snippet":" public Object getPhaseKey() {\n return key;\n }\n", + "comment": "to get the key of this phase\n" + }, + { + "code_snippet":" public void put(Object key, Procedure proc, boolean reentrant){\n entries.put(key, new Entry(proc, reentrant));\n }\n", + "comment": "to add a phase\n" + }, + { + "code_snippet":" public void remove(Object key){\n entries.remove(key);\n }\n", + "comment": "to remove a phase definition\n" + }, + { + "code_snippet":" public boolean containsPhase(Object key){\n return procs.containsKey(key);\n }\n", + "comment": "to determine if a certain phase exists in the life cycle\n" + }, + { + "code_snippet":" public Entry get(Object key){\n return (Entry)entries.get(key);\n }\n", + "comment": "to get a phase entry\n" + }, + { + "code_snippet":" public Set keys(){\n return entries.keySet();\n }\n", + "comment": "to get all the phase keys\n" + }, + { + "code_snippet":" public Collection entries(){\n return Collections.unmodifiableCollection(entries.values());\n }\n", + "comment": "to get all the entries\n" + }, + { + "code_snippet":" public void addLiveObject(LiveObject lo){\n history.add(lo);\n }\n", + "comment": "add a live object into the lifecycle manager\n" + }, + { + "code_snippet":" public Component withLifecycle(Component c, Life life){\n return c.mutate(new InstanceTracker(life, history));\n }\n", + "comment": "to create a component object that enables life cycle support\n" + }, + { + "code_snippet":" public Set getManagedInstances(){\n return history;\n }\n", + "comment": "to get the managed\n" + }, + { + "code_snippet":" public void push(Object obj){\n trace.push(obj);\n }\n", + "comment": "pushes a resolution frame to the exception\n" + }, + { + "code_snippet":" public Stack getResolutionTrace(){\n return trace;\n }\n", + "comment": "get the resolution trace\n" + },{ + "code_snippet":" public void printResolutionTrace(PrintStream out){\n printResolutionTrace(new java.io.PrintWriter(out, true));\n }\n", + "comment": "print the resolution trace\n" + }, + { + "code_snippet":" public void printResolutionTrace(java.io.PrintWriter out){\n final int size = trace.size();\n for(int i=0; i\");\n }\n", + "comment": "make sure an object is not null\n" + }, + { + "code_snippet":" protected void checkDuplicate(String attrname, Object v){\n if(v!=null){\n raise(\"attribute <\"+attrname+\"> already specified.\");\n }\n }\n", + "comment": "makes sure that a certain attribute is not set yet\n" + }, + { + "code_snippet":" /*protected void checkSingleChild(Object[] vals){\n if(vals.length>1)\n throw raise(\"only one sub-element is allowed\");\n }*/\n", + "comment": "makes sure the array only contains one element\n" + }, + { + "code_snippet":" public ParameterBinder getParameterWiring(String mode){\n return env.getParameterWiringMode(mode, loc);\n }\n", + "comment": "to get the parameter binder object that encapsulates the auto wiring strategy\n" + }, + { + "code_snippet":" public PropertyBinder getPropertyWiring(String mode){\n return env.getPropertyWiringMode(mode, loc);\n }\n", + "comment": "to get the property binder object that encapsulates the auto wiring strategy\n" + }, + { + "code_snippet":" public boolean isDeserializable(Class type){\n return type.isAssignableFrom(String.class) \n || deserializers.get(type)!=null\n || PropertyEditorManager.findEditor(type)!=null;\n }\n", + "comment": "to determine if string literal can be converted to the target type\n" + }, + { + "code_snippet":" public Map preInstantiate(Container container, Map store){\n final UID[] keys = getOrderedUIDs();\n for(int i=0; i list:\n all_ready = False\n while not all_ready:\n self._instances = self.get_instances()\n if not self._instances:\n self._logger.warning(\n f\"No instance found, waiting {wait_time}s ...\",\n )\n sleep(wait_time)\n continue\n all_ready = True\n for instance in self._instances:\n if not instance[\"health\"]:\n self._logger.warning(\n f\"Instance {instance['name']} is not ready, waiting {wait_time}s ...\",\n )\n sleep(wait_time)\n all_ready = False\n break\n return self._instances" + }, + { + "comment": "Process a single Docker container instance and convert its information into a dictionary.", + "code_snippet": "def _to_instances(self, controller_instance) -> List[dict]:\n instance = {}\n instance[\"name\"] = controller_instance.name\n instance[\"hostname\"] = controller_instance.name\n instance[\"health\"] = controller_instance.status == \"running\" and controller_instance.attrs[\"State\"][\"Health\"][\"Status\"] == \"healthy\"\n instance[\"env\"] = {}\n for env in controller_instance.attrs[\"Config\"][\"Env\"]:\n variable = env.split(\"=\")[0]\n value = env.replace(f\"{variable}=\", \"\", 1)\n instance[\"env\"][variable] = value\n return [instance]" + }, + { + "comment": "Multiple attributes are combined to determine the health status of the instance.", + "code_snippet": "instance[\"health\"] = controller_instance.status == \"running\" and controller_instance.attrs[\"State\"][\"Health\"][\"Status\"] == \"healthy\"" + }, + { + "comment": "Use regular expressions to match variable names to determine whether they conform to a specific configuration item format.", + "code_snippet": "result = self.__custom_confs_rx.search(variable)" + }, + { + "comment": "Call the update_needed method to check whether the current configuration needs to be updated.", + "code_snippet": "if not self.update_needed(self._instances, self._services, configs=self._configs):" + }, + { + "comment": "Set values \u200B\u200Bin a grid map based on the shape of the polygon.", + "code_snippet": "def set_value_from_polygon(self, pol_x, pol_y, val, inside=True):\n \"\"\"set_value_from_polygon\n Setting value inside or outside polygon\n :param pol_x: x position list for a polygon\n :param pol_y: y position list for a polygon\n :param val: grid value\n :param inside: setting data inside or outside\n \"\"\"\n # making ring polygon\n if (pol_x[0] != pol_x[-1]) or (pol_y[0] != pol_y[-1]):\n np.append(pol_x, pol_x[0])\n np.append(pol_y, pol_y[0])\n # setting value for all grid\n for x_ind in range(self.width):\n for y_ind in range(self.height):\n x_pos, y_pos = self.calc_grid_central_xy_position_from_xy_index(\n x_ind, y_ind)\n flag = self.check_inside_polygon(x_pos, y_pos, pol_x, pol_y)\n if flag is inside:\n self.set_value_from_xy_index(x_ind, y_ind, val)" + }, + { + "comment": "A static method used to determine whether a point is inside a polygon.", + "code_snippet": "def check_inside_polygon(iox, ioy, x, y):\n n_point = len(x) - 1\n inside = False\n for i1 in range(n_point):\n i2 = (i1 + 1) % (n_point + 1)\n if x[i1] >= x[i2]:\n min_x, max_x = x[i2], x[i1]\n else:\n min_x, max_x = x[i1], x[i2]\n if not min_x <= iox < max_x:\n continue\n tmp1 = (y[i2] - y[i1]) / (x[i2] - x[i1])\n if (y[i1] + tmp1 * (iox - x[i1]) - ioy) > 0.0:\n inside = not inside\n return inside" + }, + { + "comment": "Check if the generated path conflicts with obstacles.", + "code_snippet": "if not check_car_collision(x_list, y_list, yaw_list, ox, oy, kd_tree):\n return None" + }, + { + "comment": "Add the node to the priority queue (implemented using a heap data structure).", + "code_snippet": "heapq.heappush(pq, (calc_cost(start_node, h_dp, config),\n calc_index(start_node, config)))" + }, + { + "comment": "Use the Reed-Shepp function to plan a path from the current position to the target position.", + "code_snippet": "def analytic_expansion(current, goal, ox, oy, kd_tree):\n start_x = current.x_list[-1]\n start_y = current.y_list[-1]\n start_yaw = current.yaw_list[-1]\n goal_x = goal.x_list[-1]\n goal_y = goal.y_list[-1]\n goal_yaw = goal.yaw_list[-1]\n max_curvature = math.tan(MAX_STEER) / WB\n paths = rs.calc_paths(start_x, start_y, start_yaw,\n goal_x, goal_y, goal_yaw,\n max_curvature, step_size=MOTION_RESOLUTION)\n if not paths:\n return None\n best_path, best = None, None\n for path in paths:\n if check_car_collision(path.x, path.y, path.yaw, ox, oy, kd_tree):\n cost = calc_rs_path_cost(path)\n if not best or best > cost:\n best = cost\n best_path = path\n return best_path" + }, + { + "comment": "Convert node coordinates to one-dimensional indices.", + "code_snippet": "def calc_index(node, x_width, x_min, y_min):\n return (node.y - y_min) * x_width + (node.x - x_min)" + }, + { + "comment": "Implement interpolation between two points to check if there is an obstacle blocking the line of sight.", + "code_snippet": "def in_line_of_sight(obs_grid, x1, y1, x2, y2):\n t = 0\n while t <= 0.5:\n xt = (1 - t) * x1 + t * x2\n yt = (1 - t) * y1 + t * y2\n if obs_grid[(int(xt), int(yt))]:\n return False, None\n xt = (1 - t) * x2 + t * x1\n yt = (1 - t) * y2 + t * y1\n if obs_grid[(int(xt), int(yt))]:\n return False, None\n t += 0.001\n dist = np.linalg.norm(np.array([x1, y1] - np.array([x2, y2])))\n return True, dist" + }, + { + "comment": "Adjust the calculation of heuristic cost and introduce dynamic weights to optimize search efficiency.", + "code_snippet": "if use_dynamic_weighting:\n w = (1 + epsilon - epsilon*depth/upper_bound_depth)" + }, + { + "comment": "Optimize the search process to reduce the number of nodes checked.", + "code_snippet": "if np.linalg.norm(np.array([x1, y1] -\n np.array([x2, y2]))) > max_corner:\n continue\n reachable, offset = in_line_of_sight(self.obs_grid, x1,\n y1, x2, y2)" + },{ + "comment": "Compute uniform or biased polar states for initialization of trajectory generation.", + "code_snippet": "angle_samples = [i / (nxy - 1) for i in range(nxy)]\n states = sample_states(angle_samples, a_min, a_max, d, p_max, p_min, nh)" + }, + { + "comment": "Compute lane-related states.", + "code_snippet": "def calc_lane_states(l_center, l_heading, l_width, v_width, d, nxy):\n \"\"\"\n calc lane states\n :param l_center: lane lateral position\n :param l_heading: lane heading\n :param l_width: lane width\n :param v_width: vehicle width\n :param d: longitudinal position\n :param nxy: sampling number\n :return: state list\n \"\"\"\n xc = d\n yc = l_center\n states = []\n for i in range(nxy):\n delta = -0.5 * (l_width - v_width) + \\\n (l_width - v_width) * i / (nxy - 1)\n xf = xc - delta * math.sin(l_heading)\n yf = yc + delta * math.cos(l_heading)\n yawf = l_heading\n states.append([xf, yf, yawf])\n return states" + }, + { + "comment": "Check if the Pinecone environment exists and initialize the Pinecone environment.", + "code_snippet": "def check_if_pinecone_environment_exists(\n environment: str,\n api_key: str,\n credential = None):\n \"\"\"_summary_\n Args:\n account_name (str): _description_\n database_name (str): _description_\n subscription_id (str): _description_\n resource_group (str): _description_\n credential: Azure credential to use for getting acs instance\n \"\"\"\n if credential is None:\n raise ValueError(\"credential cannot be None\")\n try:\n pinecone.init(api_key=api_key, environment=environment)\n except:\n raise BaseException(\"Invalid env or key\")" + }, + { + "comment": "Lazy loading model, initialization is called for the first time.", + "code_snippet": "def canny(img, res, l, h):\n img = resize_image(HWC3(img), res)\n global model_canny\n if model_canny is None:\n from annotator.canny import CannyDetector\n model_canny = CannyDetector()\n result = model_canny(img, l, h)\n return [result]" + }, + { + "comment": "Bind button click event and call canny function.", + "code_snippet": "run_button.click(fn=canny, inputs=[input_image, resolution, low_threshold, high_threshold], outputs=[gallery])" + }, + { + "comment": "Load the converted weights into the model.", + "code_snippet": "model.load_state_dict(target_dict, strict=True)\ntorch.save(model.state_dict(), output_path)" + }, + { + "comment": "Check parameters to ensure that the input path is valid.", + "code_snippet": "assert os.path.exists(input_path), 'Input model does not exist.'\nassert not os.path.exists(output_path), 'Output filename already exists.'\nassert os.path.exists(os.path.dirname(output_path)), 'Output path is not valid.'" + }, + { + "comment": "Modify the global Cookie policy to ensure that the Requests library can handle Cookies correctly.", + "code_snippet": "cookiejar.DefaultCookiePolicy = HTTPieCookiePolicy" + }, + { + "comment": "Determines whether the session name contains path separators to identify anonymous sessions.", + "code_snippet": "def is_anonymous_session(session_name: str) -> bool:\n return os.path.sep in session_name" + }, + { + "comment": "Convert each Cookie object in the CookieJar to a dictionary and return a list of dictionaries.", + "code_snippet": "def materialize_cookies(jar: RequestsCookieJar) -> List[Dict[str, Any]]:\n return [\n materialize_cookie(cookie)\n for cookie in jar\n ]" + }, + { + "comment": "Matches a valid MIME type and checks whether the specified MIME type is valid.", + "code_snippet": "MIME_RE = re.compile(r'^[^/]+/[^/]+$')\ndef is_valid_mime(mime):\n return mime and MIME_RE.match(mime)" + }, + { + "comment": "Calls all enabled plugins to format request headers.", + "code_snippet": "def format_headers(self, headers: str) -> str:\n for p in self.enabled_plugins:\n headers = p.format_headers(headers)\n return headers" + }, + { + "comment": "Split the input tensor and distribute it to different processes.", + "code_snippet": "def _all_to_all(\n input_: torch.Tensor,\n world_size: int,\n group: dist.ProcessGroup,\n scatter_dim: int,\n gather_dim: int,\n):\n input_list = [t.contiguous() for t in torch.tensor_split(input_, world_size, scatter_dim)]\n output_list = [torch.empty_like(input_list[0]) for _ in range(world_size)]\n dist.all_to_all(output_list, input_list, group=group)\n return torch.cat(output_list, dim=gather_dim).contiguous()" + }, + { + "comment": "Query a model's tables, columns, and data types.", + "code_snippet": "vn.train(ddl=\"CREATE TABLE my_table (id INT, name TEXT)\")" + }, + { + "comment": "If urllib3 version is less than 2.0.0, monkey-patch to force ssl_wrap_context to pass server_hostname regardless.", + "code_snippet": "if urllib3_version < (2, 0, 0):\n with contextlib.suppress(Exception):\n urllib3.util.IS_SECURETRANSPORT = urllib3.util.ssl_.IS_SECURETRANSPORT = True" + }, + { + "comment": "Filtering urllib3's log messages.", + "code_snippet": "class Urllib3LoggingFilter(logging.Filter):\n def filter(self, record):\n # Ignore HTTP request messages since HTTPConnection prints those\n return record.msg != '%s://%s:%s \"%s %s %s\" %s %s'" + }, + { + "comment": "Check the module path attribute.", + "code_snippet": "def _is_package(module):\n return '__path__' in vars(module)" + }, + { + "comment":"Create a function to calculate the sum of a sequence of integers.", + "code_snippet":"# Python code\ndef sum_sequence(sequence):\n sum = 0\n for num in sequence:\n sum += num\n return sum" + }, + { + "comment":"Generate a Python code for crawling a website for a specific type of data.", + "code_snippet":"import requests\nimport re\n\ndef crawl_website_for_phone_numbers(website):\n response = requests.get(website)\n phone_numbers = re.findall('\\d{3}-\\d{3}-\\d{4}', response.text)\n return phone_numbers\n \nif __name__ == '__main__':\n print(crawl_website_for_phone_numbers('www.example.com'))" + }, + { + "comment":"Create a Python list comprehension to get the squared values of a list [1, 2, 3, 5, 8, 13].", + "code_snippet":"[x*x for x in [1, 2, 3, 5, 8, 13]]" + }, + { + "comment":"Generate a python script to perform this action.", + "code_snippet":"def remove_duplicates(string): \n result = \"\" \n prev = '' \n\n for char in string:\n if char != prev: \n result += char\n prev = char\n return result\n\nresult = remove_duplicates(\"AAABBCCCD\")\nprint(result)" + }, + { + "comment":"Write a python script to generates random numbers between 0 and 9 that are divisible by 3.", + "code_snippet":"def generate_random_divisible_number():\n import random\n while True:\n # Generate a random number\n process = random.randint(0, 9)\n # Check if the number is divisible by 3\n if process % 3 == 0:\n # If it is divisible, return it\n return process" + }, + { + "comment":"Write a Python code to get the third largest element in a given row.", + "code_snippet":"def third_largest(lst):\n if len(lst) < 3:\n return\n distinct = []\n for i in lst:\n if i not in distinct:\n distinct.append(i)\n distinct.sort(reverse=True)\n return distinct[2]" + }, + { + "comment":"Generate a REST API with Python and Flask that allows users to create, read, update, and delete records from a database.", + "code_snippet":"from flask import Flask, request\nfrom flask_sqlalchemy import SQLAlchemy\n\napp = Flask(name)\napp.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:\/\/\/\/tmp\/test.db'\ndb = SQLAlchemy(app)\n\nclass Record(db.Model):\n id = db.Column(db.Integer, primary_key=True)\n name = db.Column(db.String(120), unique=True)\n\ndb.create_all()\n\n@app.route('\/records', methods=['GET'])\ndef get_records():\n records = Record.query.all()\n return {'records':[record.name for record in records]}\n\n@app.route('\/records', methods=['POST'])\ndef create_record():\n record = Record(name=request.json['name'])\n db.session.add(record)\n db.session.commit()\n return {'id': record.id}\n\n@app.route('\/records\/int:id', methods=['PUT'])\ndef update_record(id):\n record = Record.query.get(id)\n record.name = request.json['name']\n db.session.commit()\n return {'message': 'Record updated'}\n\n@app.route('\/records\/int:id', methods=['DELETE'])\ndef delete_record(id):\n Record.query.filter_by(id=id).delete()\n db.session.commit()\n return {'message': 'Record deleted'}\n\nif name == 'main':\n app.run(debug=True)" + }, + { + "comment":"Create a Python function that takes in a string and a list of words and returns true if the string contains all the words in the list.", + "code_snippet":"def contains_words(input_string, words):\n for word in words:\n if word not in input_string:\n return False\n return True\n\nprint(contains_words('This is a test', ['test', 'this', 'is'])) # True" + }, + { + "comment":"What should this Python program do?", + "code_snippet":"def is_palindrome(s):\n '''This function returns True if the string s is a palindrome and False if it isn't.''' \n return s == s[::-1] # Checks if s is the same as its reverse." + }, + { + "comment":"Create a Python program to sort and print out the elements of an array of integers.", + "code_snippet":"arr = [17, 41, 5, 22, 54, 6, 29, 3, 13]\n\narr.sort()\n\nprint(arr)\n\n# Output: [3, 5, 6, 13, 17, 22, 29, 41, 54]" + }, + { + "comment":"Generate a Python program that adds two then doubles the result.", + "code_snippet":"def double_add(num1, num2): \n return (num1 + num2) * 2" + }, + { + "comment":"Write a python program to extract the non-vowel words in a sentence.", + "code_snippet":"def extract_words(sentence):\n non_vowel_words = []\n words = sentence.split()\n vowels = ['a','e','i','o','u','A','E','I','O','U']\n for word in words:\n if not any(char in vowels for char in word):\n non_vowel_words.append(word) \n return non_vowel_words" + }, + { + "comment":"Write a Python program to calculate the average of a list of positive integers and output the result.", + "code_snippet":"list_of_positive_integers = [1, 5, 6, 7, 8]\ntotal = sum(list_of_positive_integers)\n\navg = total\/len(list_of_positive_integers)\n\nprint(\"The average of the list of positive integers is {}\".format(avg))"} + { + "comment":"Develop a function in Python that prints out the Pascal's triangle for a given number of rows.", + "code_snippet":"def pascal_triangle(n): \n trow = [1] \n y = [0] \n for x in range(max(n, 0)): \n print(trow) \n trow=[l+r for l,r in zip(trow + y, y + trow)] \n return n>=1\n\npascal_triangle(5)"} + { + "comment":"Implement a decision-making algorithm for a rock-paper-scissors game using Python.", + "code_snippet":"# Rock, paper, scissors game!\n\ndef play_game(player1, player2):\n # Define the winning rules\n rules = {'rock': 'scissors', 'scissors': 'paper', 'paper': 'rock'}\n if player1 == player2:\n return 'It is a draw!'\n elif rules[player1] == player2:\n return 'Player 1 wins!'\n elif rules[player2] == player1:\n return 'Player 2 wins!'\n\n# Get user input\nplayer1 = input('Player 1, make a choice: rock, paper, or scissors? ').lower()\nplayer2 = input('Player 2, make a choice: rock, paper, or scissors? ').lower()\n\n# Start the game and get the result\nresult = play_game(player1, player2)\nprint(result)"} + { + "comment":"Collate a machine learning model in Python that distinguishes between cats and dogs.", + "code_snippet":"import numpy as np\nimport keras\nfrom keras.layers import Dense, Conv2D, MaxPooling2D, Dropout, Flatten\nfrom keras.models import Sequential\nfrom keras.preprocessing.image import ImageDataGenerator\n\n# Create the neural network model\nmodel = Sequential()\n\n# Input layer\nmodel.add(Conv2D(32, (3, 3), input_shape = (64, 64, 3), activation = 'relu'))\n\n# Hidden layers\nmodel.add(MaxPooling2D(pool_size = (2, 2)))\nmodel.add(Dropout(0.3))\nmodel.add(Conv2D(64, (3, 3), activation = 'relu'))\nmodel.add(MaxPooling2D(pool_size = (2, 2)))\nmodel.add(Dropout(0.3))\nmodel.add(Conv2D(64, (3, 3), activation = 'relu'))\nmodel.add(MaxPooling2D(pool_size = (2, 2)))\nmodel.add(Dropout(0.3))\n\n# Output layer\nmodel.add(Flatten())\nmodel.add(Dense(units = 128, activation = 'relu'))\nmodel.add(Dense(units = 1, activation = 'sigmoid'))\n\n# Compile the model\nmodel.compile(loss = 'binary_crossentropy', optimizer = 'adam', metrics = ['accuracy'])\n\n# Create data generator\ndatagen = ImageDataGenerator(rescale = 1.\/255, shear_range = 0.2, zoom_range = 0.2, horizontal_flip = True)\n\n# Fit the model\ntrain_generator = datagen.flow_from_directory(directory = '\/path\/to\/dataset', target_size = (64, 64), color_mode = 'rgb', class_mode = 'binary', batch_size = 32)\nmodel.fit_generator(generator = train_generator, steps_per_epoch = 800, epochs = 5, validation_data = test_generator, validation_steps = 200)"} + { + "comment":"Write a Python program to find all the numbers divisible by a certain number within a certain range.", + "code_snippet":"def find_numbers_divisible_by(m, n, divisor):\n divisible_numbers = []\n for i in range(m, n+1):\n if i % divisor == 0:\n divisible_numbers.append(i)\n return divisible_numbers"} + { + "comment":"Implement a Python function that will take two strings and return true if the first string contains the second.", + "code_snippet":"def check_contains(query, word): \n if query.find(word) != -1:\n return True\n return False\n\nresult = check_contains(query, word)"} + { + "comment":"Write an algorithm in Python 3 that calculates the factorial of a number.", + "code_snippet":"def factorial(n):\n if n == 0:\n return 1\n else:\n return n * factorial(n-1)" + }, + { + "comment":"Develop a Python function to predict the class labels of a given set of data.", + "code_snippet":"# Load the dataset\nimport pandas as pd\ncsv_url = 'http:\/\/test.test\/test.csv'\ndf = pd.read_csv(csv_url)\n\n# Split the dataset into features and label\nX = df.iloc[:, 0:4].values\ny = df.iloc[:, 4].values\n\n# Import the ML model\nfrom sklearn.tree import DecisionTreeClassifier\n\n# Create and fit the model\nmodel = DecisionTreeClassifier()\nmodel.fit(X, y)\n\n# Predict the label\ndef predict(data):\n predicted_label = model.predict([data])\n return predicted_label"} + { + "comment":"Develop a Python program to generate random passwords that consist of 8 characters.", + "code_snippet":"import string\nimport random\n\ndef generate_password():\n chars = string.ascii_letters + string.digits\n return ''.join(random.choice(chars) for _ in range(8))\n\npassword = generate_password()\nprint(password)"} + { + "comment":"Generate a list using a while loop in Python and appends the current number to the list.", + "code_snippet":"my_list = []\n\nnum = 0\n\nwhile num < 10:\n my_list.append(num)\n num += 1\n\nprint(my_list)"}, + { + "comment":"Write a Python program to query Twitter to get the most recent tweets from a user.", + "code_snippet":"import tweepy\n\n# Authenticate to Twitter\nauth = tweepy.OAuthHandler(\"CONSUMER_KEY\", \"CONSUMER_SECRET\")\nauth.set_access_token(\"ACCESS_TOKEN\", \"ACCESS_TOKEN_SECRET\")\n# Create API object\napi = tweepy.API(auth)\n\n# Get the most recent tweets from the given user\ntweets = api.user_timeline(screen_name=\"@elonmusk\")\n\nfor tweet in tweets:\n print(tweet.text)" + }, + { + "comment":"Create a Python neural network model that takes in a given trajectory of stock prices and predicts the stock price for the next day.", + "code_snippet":"import numpy as np\nimport tensorflow as tf\n\ndef create_model():\n model = tf.keras.Sequential([\n tf.keras.layers.Dense(64, activation='relu', input_shape=(7, )),\n tf.keras.layers.Dense(1)\n ])\n\n model.compile(loss='mean_squared_error', \n optimizer='adam',\n metrics=['accuracy'])\n\n return model\n \nif __name__ == \"__main__\":\n model = create_model()\n\n input_data = np.array([[10, 10.4, 10.5, 10.6, 10.7, 10.9, 11]])\n predictions = model.predict(input_data)\n\n print(f\"Predicted stock price for the next day is: {predictions[0][0]}\")" + }, + { + "comment":"Create a way to encrypt a message using a key in Python.", + "code_snippet":"import hashlib\n\ndef encrypt(message, key):\n encrypted_msg = \"\"\n for char in message:\n encrypted_msg += chr(ord(char) + ord(key[0]))\n return encrypted_msg\n\nencrypted_msg = encrypt(message, key)\nprint(encrypted_msg)" + }, + { + "comment":"Create a function in Python that takes two parameters and prints out the larger of them.", + "code_snippet":"def printMax(parameter_1, parameter_2):\n if parameter_1 > parameter_2:\n print(parameter_1)\n else:\n print(parameter_2)" + }, + { + "comment":"Rewrite the following Python code by introducing list comprehensions.", + "code_snippet":"even_numbers = [i for i in range(1, 21) if i % 2 == 0]" + }, + { + "comment":"Develop an algorithm in Python to print Fibonacci series up to a given number.", + "code_snippet":"def fibonacci(n): \n a = 0\n b = 1\n if n < 0: \n print(\"Incorrect input\") \n elif n == 0: \n return a \n elif n == 1: \n return b \n else: \n for i in range(2,n): \n c = a + b \n a = b \n b = c \n return b \n \nn = int(input(\"Enter a number: \"))\nprint(fibonacci(n))" + }, + { + "comment":"Make the following code snippet into a function in Python3 capable of solving Any Sudoku puzzle", + "code_snippet":"def solve_sudoku(board): \n \n # Utility function to find vacant cells \n # Returns a boolean \n def find_vacant_cell(board, l): \n for row in range(9): \n for col in range(9): \n if board[row][col] == 0: \n l[0] = row \n l[1] = col \n return True\n return False\n \n # Utility function to check if a number \n # is not currently placed in a particular \n # row, column and block \n def is_safe(board, row, col, num): \n \n # Check if 'num' is not already placed \n # in current row, current column \n # and current 3x3 box \n for i in range(9): \n \n # Check the rows\n if(board[row][i] == num): \n return False\n \n # Check the columns \n if(board[i][col] == num): \n return False\n \n # Check the 3x3 boxes \n if(board[(row\/\/3)*3 + i\/\/3][(col\/\/3)*3 + i%3] == num): \n return False\n \n return True\n \n # Solve the sudoku \n def solve(board): \n # 'l' is a list variable that keeps \n # the record of row and col in \n # find_vacant_cell function \n l = [0, 0] \n \n # If there is no unassigned location, \n # we are done \n if (not find_vacant_cell(board, l)): \n return True\n \n # Assigning the list values\n row = l[0] \n col = l[1] \n \n # consider digits 1 to 9 \n for num in range(1, 10): \n \n # if it is a safe position\n if (is_safe(board, row, col, num)): \n \n # make tentative assignment \n board[row][col] = num \n \n # return if succcess\n if (solve(board)): \n return True\n \n # failure, unmake and try again \n board[row][col] = 0\n \n # trigger backtracking \n return False\n \n #Driver Program \n if (solve(board)): \n for row in board: \n print(row) \n else: \n print(\"No solution\")" + }, + { + "comment":"Write a function in Python to calculate the sum of the digits in a given number.", + "code_snippet":"def sum_digits(num):\n total = 0\n while num > 0:\n digit = num % 10\n total += digit\n num = num \/\/ 10\n return total" + }, + { + "comment":"Take the list of people below and create a Python dictionary with the names as keys and the ages as values.", + "code_snippet":"people_dict = {'John': 20, 'Jane': 40, 'Alex': 18, 'Peter': 45}" + }, + { + "comment":"Develop a Python program to clearly understand the concept of recursion.", + "code_snippet":"# This program is to understand recursion in Python.\n\n# Define a recursive function to calculate the factorial of a number\ndef factorial(n):\n if n == 1:\n return 1\n else:\n return n * factorial(n - 1)\n\n# Calculate factorial of number 5\nresult = factorial(5)\nprint(\"Factorial of 5 is \", result) \n\n# Output: Factorial of 5 is 120" + }, + { + "comment":"Generate a random 6-digits number in Python.", + "code_snippet":"import random\n\nnumber = random.randint(100000, 999999)\nprint(number)"}, + { + "comment":"Create a sorting algorithm in Python to sort strings by their length.", + "code_snippet":"def sort_by_length(strings):\n for i in range(len(strings) - 1):\n for j in range(i + 1, len(strings)):\n if len(strings[i]) > len(strings[j]):\n strings[i], strings[j] = strings[j], strings[i]\n return strings\n\nunsorted_list = [\"cat\", \"dog\", \"apple\", \"banana\"]\n\nsorted_list = sort_by_length(unsorted_list)\n\nprint(sorted_list)" + }, + { + "comment":"Write a Python function to get the maximum and minimum values in a given list.", + "code_snippet":"def get_max_min(lst):\n min_value = lst[0]\n max_value = lst[0]\n \n for i in range(1, len(lst)):\n if lst[i] > max_value:\n max_value = lst[i]\n if lst[i] < min_value:\n min_value = lst[i]\n \n return (min_value, max_value)" + }, + { + "comment":"Create a for loop in Python to iterate over a list of numbers and print only the even numbers.", + "code_snippet":"for num in my_list:\n if num % 2 == 0:\n print(num)" + }, + { + "comment":"Can you suggest a pure python alternative to declaring a Float32 array with numbers from 0 to 10?", + "code_snippet":"myArray = [float(i) for i in range(0,11)]" + }, + { + "comment":"Construct a neural network model in Python to classify the MNIST data set correctly.", + "code_snippet":"import keras\n\n# Input layer\ninput_layer = keras.layers.Input(shape=(784,))\n\n# Hidden layer\nhidden_layer = keras.layers.Dense(128, \n activation='relu')(input_layer)\n\n# Output layer\noutput_layer = keras.layers.Dense(10, \n activation='softmax')(hidden_layer)\n\n# Model\nmodel = keras.Model(inputs=input_layer, outputs=output_layer)\n\n# Compile model\nmodel.compile(optimizer='adam', \n loss='sparse_categorical_crossentropy',\n metrics=['accuracy'])" + }, + { + "comment": "In Python, create a function to find the maximum value within a nested dictionary.", + "code_snippet": "def findMaxValue(dict):\n max_val = None\n for key, value in dict.items():\n if isinstance(value, dict):\n max_val = max(findMaxValue(value), max_val)\n else:\n max_val = max(value, max_val)\n return max_val\n\nprint(findMaxValue(sample_dict))" + }, + { + "comment": "Write a function in Python that returns an object of the following time and date: Sunday March 7 5:30 PM.", + "code_snippet": "from datetime import datetime\n\ndef get_date_time():\n dt = datetime(year=2021, month=3, day=7, hour=17, minute=30)\n return dt\n\ndate_time = get_date_time()\nprint(date_time) # will output 2021-03-07 17:30:00" + }, + { + "comment": "Generate a Python program to perform matrix multiplication on two given matrices.", + "code_snippet": "def matrix_multiplication(A, B): \n rows_A = len(A) \n cols_A = len(A[0]) \n rows_B = len(B) \n cols_B = len(B[0]) \n result = [[0 for i in range(cols_B)] for j in range(rows_A)] \n for i in range(rows_A): \n for j in range(cols_B): \n for k in range(cols_A): \n result[i][j] += A[i][k] * B[k][j] \n return result" + }, + { + "comment": "Write a Python script to read an array from the user and then determine the mean and median of the array.", + "code_snippet": "def mean_median(arr): \n arr_sum = 0 \n for i in range(len(arr)): \n arr_sum += arr[i] \n \n mean = arr_sum/len(arr) \n \n arr = sorted(arr) \n if len(arr) % 2 != 0: \n median = arr[floor(len(arr)/2)] \n else: \n median = (arr[len(arr)//2] + arr[len(arr)//2 - 1]) / 2\n \n return mean, median\n\nmean, median = mean_median(arr) \nprint(\"Mean =\", mean) \nprint(\"Median =\", median)" + }, + { + "comment": "Create an algorithm in Python to check whether an array has even or odd number of elements.", + "code_snippet": "def is_array_even(arr): \n if len(arr)%2 == 0:\n return True\n else:\n return False" + }, + { + "comment": "Implement a Python function to calculate the Gini coefficient of a given dataset.", + "code_snippet": "def gini(x):\n \"\"\"Calculate Gini Coefficient of a given dataset.\"\"\"\n # calculate the frequency of each item in x\n x_value_counts = x.value_counts().sort_index() \n\n # calculate the cumulative sum of x_value_counts\n x_cum_sum = x_value_counts.cumsum()\n\n # calculate the Lorenz values\n n = len(x)\n lorenz = x_cum_sum / n\n lorenz = np.insert(lorenz, 0, 0) # add 0 to the beginning of array\n\n # calculate the Gini Coefficient\n width = lorenz[:-1] - lorenz[1:]\n gini_coef = (1 / n) * sum(width * (lorenz[1:] + lorenz[:-1]))\n\n return gini_coef\n\nif __name__ == '__main__':\n x = np.array([2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,21])\n gini_coef = gini(x)\n print(gini_coef) # should print 0.605" + }, + { + "comment": "Generate a neural network model with TensorFlow and Python for classifying hand-written digits from the MNIST dataset.", + "code_snippet": "import tensorflow as tf\n\n# Import MNIST data\nfrom tensorflow.examples.tutorials.mnist import input_data\nmnist = input_data.read_data_sets(\"/tmp/data\", one_hot=True)\n\n# Parameters\nlearning_rate = 0.001\ntraining_epochs = 15\nbatch_size = 100\ndisplay_step = 1\n\n# Network Parameters\nn_hidden_1 = 256 # 1st layer number of neurons\nn_hidden_2 = 256 # 2nd layer number of neurons\nn_input = 784 # MNIST data input (img shape: 28*28)\nn_classes = 10 # MNIST total classes (0-9 digits)\n\n# tf Graph input\nX = tf.placeholder(\"float\", [None, n_input])\nY = tf.placeholder(\"float\", [None, n_classes])\n\n# Store layers weight & bias\nweights = {\n 'h1': tf.Variable(tf.random_normal([n_input, n_hidden_1])),\n 'h2': tf.Variable(tf.random_normal([n_hidden_1, n_hidden_2])),\n 'out': tf.Variable(tf.random_normal([n_hidden_2, n_classes]))\n}\nbiases = {\n 'b1': tf.Variable(tf.random_normal([n_hidden_1])),\n 'b2': tf.Variable(tf.random_normal([n_hidden_2])),\n 'out': tf.Variable(tf.random_normal([n_classes]))\n}\n\n\n# Create model\ndef multilayer_perceptron(x):\n # Hidden fully connected layer with 256 neurons\n layer_1 = tf.add(tf.matmul(x, weights['h1']), biases['b1'])\n # Hidden fully connected layer with 256 neurons\n layer_2 = tf.add(tf.matmul(layer_1, weights['h2']), biases['b2'])\n # Output fully connected layer with a neuron for each class\n out_layer = tf.matmul(layer_2, weights['out']) + biases['out']\n return out_layer\n\n# Construct model\nlogits = multilayer_perceptron(X)\n\n# Define loss and optimizer\nloss_op = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(\n logits=logits, labels=Y))\noptimizer = tf.train.AdamOptimizer(learning_rate=learning_rate)\ntrain_op = optimizer.minimize(loss_op)\n\n# Initializing the variables\ninit = tf.global_variables_initializer()\n\n# Train model\nmodel = tf.Session()\nmodel.run(init)\n\n# Training cycle\nfor epoch in range(training_epochs):\n avg_cost = 0.\n total_batch = int(mnist.train.num_examples/batch_size)\n # Loop over all batches\n for i in range(total_batch):\n batch_x, batch_y = mnist.train.next_batch(batch_size)\n # Run optimization op (backprop) and cost op (to get loss value)\n _, c = model.run([train_op, loss_op], feed_dict={X: batch_x,\n Y: batch_y})\n # Compute average loss\n avg_cost += c / total_batch\n # Display logs per epoch step\n if epoch % display_step == 0:\n print(\"Epoch:\", '%04d' % (epoch+1), \"cost=\", \\\n \"{:.9f}\".format(avg_cost))\nprint(\"Optimization Finished!\")\n\n# Test model\npred = tf.nn.softmax(logits) # Apply softmax to logits\ncorrect_prediction = tf.equal(tf.argmax(pred, 1), tf.argmax(Y, 1))\n# Calculate accuracy\naccuracy = tf.reduce_mean(tf.cast(correct_prediction, \"float\"))\nprint(\"Accuracy:\", accuracy.eval({X: mnist.test.images, Y: mnist.test.labels}, model))" + }, + { + "comment": "Write a function to generate a prime number sequence using Python.", + "code_snippet": "def generate_prime_numbers(n): \n primes = [True for i in range(n+ 1)] \n p = 2\n while (p * p <= n): \n if (primes[p] == True): \n for i in range(p * p, n + 1, p): \n primes[i] = False\n p += 1\n primes[0] = False\n primes[1] = False\n for p in range(n + 1): \n if primes[p]: \n print(p)" + }, + { + "comment": "Write a Python program that removes duplicates from a list.", + "code_snippet": "def remove_duplicates(my_list):\n return list(dict.fromkeys(my_list))\n\nmy_list = [1, 2, 3, 4, 3, 2, 1]\n\nprint(remove_duplicates(my_list)) # output [1, 2, 3, 4]" + }, + { + "comment": "Generate a Python script to sort the given list of words.", + "code_snippet": "# function to sort the given list of words\ndef sort_words(words):\n # sort the list of words in alphabetical order\n words.sort()\n\n # print the sorted list of words\n print(words)\n\n# driver code\nwords = ['bubble', 'selection', 'quicksort', 'insertion']\nsort_words(words)\n\n# output\n['bubble', 'insertion', 'quicksort', 'selection']" + }, + { + "comment": "Generate a function for calculating the average of a list of numbers in Python.", + "code_snippet": "def avg_list(lst):\n sum = 0\n count = 0\n for i in lst:\n sum += i\n count += 1\n avg = sum / count\n return avg" + }, + { + "comment": "Generate a Python program that compares two binary trees to check if they are similar.", + "code_snippet": "class TreeNode:\n def __init__(self, x):\n self.val = x\n self.left = None\n self.right = None\n\ndef are_similar(root1, root2):\n if root1 is None and root2 is None:\n return True\n if (root1 and root2) is None or (root1 or root2) is None:\n return False\n if root1.val != root2.val:\n return False\n else:\n return are_similar(root1.left, root2.left) and are_similar(root1.right, root2.right)" + }, + { + "comment": "Create a program for solving a quadratic equation in Python.", + "code_snippet": "import math\n \ndef solveQuadratic(a, b, c): \n discriminant = (b**2) - (4*a*c);\n \n # If discriminant is negative there are no real roots.\n if (discriminant < 0): \n return {\n \"status\": false,\n \"roots\": []\n }\n # If discriminant is zero, there is only one real roots.\n elif (discriminant == 0):\n x = -b/(2*a)\n return {\n \"status\": true,\n \"roots\": [x]\n }\n # Otherwise there are 2 real roots \n else:\n x1 = (-b + math.sqrt(discriminant)) / (2*a); \n x2 = (-b - math.sqrt(discriminant)) / (2*a); \n return {\n \"status\": true,\n \"roots\": [x1, x2]\n }\n\na = 1\nb = 3\nc = -4\n\nprint(solveQuadratic(a, b, c)) #{'status': True, 'roots': [-4.0, 1.0]}" + }, + { + "comment": "Construct a Python code for adding two matrices.", + "code_snippet": "def add_matrix(matrix1, matrix2):\n if len(matrix1) != len(matrix2):\n return 'Matrices not compatible'\n if len(matrix1[0]) != len(matrix2[0]):\n return 'Matrices not compatible'\n \n rows = len(matrix1)\n cols = len(matrix1[0])\n result = [[sum(row) for row in zip(*size)] for size in zip(matrix1, matrix2)]\n \n return result" + }, + { + "comment": "Generate a Python program which takes a string as input and prints all of its substrings in order from longest to shortest length.", + "code_snippet": "def substring_in_order(string): \n result = [] \n n = len(string) \n for l in range(n, 0, -1): \n for i in range(n-l + 1): \n result.append(string[i:i+l]) \n return result \n\nstring = input(\"Enter the string: \") \nprint (\"All substrings in order from longest to shortest:\") \nprint (substring_in_order(string))" + }, + { + "comment": "Generate a Python function which takes an array and a value and returns the index at which this value is present in the array.", + "code_snippet": "def find_index(arr, x):\n for i in range(len(arr)):\n if arr[i] == x:\n return i\n return -1\n\nprint(find_index(arr, x))" + }, + { + "comment": "Develop a Python program to find the common elements in two lists.", + "code_snippet": "common_elements = [] \n \n# using loop \nfor i in [3, 9, 15, 21, 27]: \n for j in [21, 7, 13, 29, 31]: \n if i == j: \n common_elements.append(i) \n \n# printing common elements \nprint(common_elements) \n# Output: [21]" + }, + { + "comment": "Create a Python program that takes in two strings and returns an integer indicating the number of common substrings between the two strings.", + "code_snippet": "def num_common_substrings(s1, s2):\n count = 0\n for i in range(len(s1)):\n for j in range(len(s2)):\n if s1[i] == s2[j]:\n count += 1\n return count\n\nresult = num_common_substrings(\"abcd\", \"bae\")\nprint(result)" + }, + { + "comment": "Generate a Python program to convert a string to its lowercase version.", + "code_snippet": "def str_to_lower(string):\n new_string = \"\"\n\n for char in string:\n new_string += char.lower()\n\n return new_string" + }, + { + "comment": "Can you generate a function in Python that shuffles a given list?", + "code_snippet": "import random\n\ndef shuffle_list(list): \n # Initialize the random number generator\n random.seed()\n\n # Shuffle the list\n random.shuffle(list) \n\n # Return the list\n return list" + }, + { + "comment": "Write a Python function to validate an a list of emails. The function should return a boolean indicating whether a given email address is valid.", + "code_snippet": "def validate_mail_list(mail_list):\n for mail in mail_list:\n if not re.match(\"[^@]+@[^@]+\\.[^@]+\", mail):\n return False\n return True" + }, + { + "comment": "Create a Python script that will perform several simple math operations. The script should accept two integers as inputs and output the results of the following operations: addition, subtraction, multiplication, division, and modulo.", + "code_snippet": "int1 = 10\nint2 = 5\n\naddition = int1 + int2\nprint('Addition:', addition)\n\nsubtraction = int1 - int2\nprint('Subtraction:', subtraction)\n\nmultiplication = int1 * int2\nprint('Multiplication:', multiplication)\n\ndivision = int1 / int2\nprint('Division:', division)\n\nmodulo = int1 % int2\nprint('Modulo:', modulo)" + }, + { + "comment": "Create a Python program to perform sentiment analysis on product reviews. The program should use natural language processing techniques like tokenization and n-grams to generate features for sentiment analysis and use a classification model to assign sentiments to the reviews.", + "code_snippet": "import numpy as np\nimport pandas as pd\nimport nltk\nfrom nltk.tokenize import word_tokenize\nimport matplotlib.pyplot as plt\nfrom nltk.corpus import stopwords\nfrom nltk.stem import WordNetLemmatizer \nfrom sklearn.feature_extraction.text import CountVectorizer\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.naive_bayes import MultinomialNB\nfrom sklearn.metrics import classification_report\n\n# Read in the data\ndata = pd.read_csv('reviews.csv')\n\n# Tokenise the texts\ndata['tokenised'] = data['review'].apply(word_tokenize)\n\n# Remove stopwords\nstop_words = set(stopwords.words('english'))\ndata['filtered'] = data['tokenised'].apply(lambda x: [val for val in x if val not in stop_words])\n\n# Normalize words\nwordnet_lemmatizer = WordNetLemmatizer()\ndata['normalised'] = data['filtered'].apply(lambda x: [wordnet_lemmatizer.lemmatize(val) for val in x])\n\n# Generate features using CountVectorizer\ncv = CountVectorizer()\ndata['features'] = cv.fit_transform(data['normalised'].astype('str')).toarray()\n\n# Split into training and test sets\nX = data['features']\ny = data['sentiment']\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n\n# Train model\nmodel = MultinomialNB(alpha=0.1)\nmodel.fit(X_train, y_train)\n\n# Predict using the test set\npredictions = model.predict(X_test)\n\n# Generate a classification report\nreport = classification_report(y_test, predictions)\nprint(report)" + }, + { + "comment": "Write a python program to clean up a list of emails and put them into a new list.", + "code_snippet": "original_list = ['bob@example.com', 'alice+bob@cafe.com', 'bob@gmail.com.uk', 'bob+alice@example']\n\nclean_list = []\n\nfor email in original_list:\n email_without_plus = email.split('+')[0]\n email_without_dot_uk = email_without_plus.split('.uk')[0]\n clean_list.append(email_without_dot_uk)\n\nprint(clean_list) # prints ['bob@example.com', 'alice@cafe.com', 'bob@gmail.com', 'bob@example']" + }, + { + "comment": "Generate sample data for a web application using Python's faker library. The output should contain three columns of data: name, email, and age.", + "code_snippet": "from faker import Faker\n\nfake = Faker()\nfor _ in range(10):\n print(fake.name(), fake.email(), fake.random_int(min=18, max=60))" + }, + { + "comment": "Create a Python algorithm to classify positive and negative sentiment in tweets.", + "code_snippet": "def sentiment_analysis(tweets):\n # Initialize a list to store the result \n results = [] \n\n # Iterate through each tweet\n for tweet in tweets:\n # Clean the tweet \n tweet = preprocessing(tweet)\n\n # Vectorize the tweet and obtain the prediction \n tweet_vector = vectorize(tweet)\n prediction = predict_sentiment(tweet_vector)\n\n # Append the prediction to the result list\n if prediction == 1:\n results.append(\"Positive\")\n elif preduction == 0:\n results.append(\"Negative\")\n\n return results" + }, + { + "comment": "Parse the given URL and print out the protocol, domain name, and path using Python.", + "code_snippet": "import urllib.parse\n\nurl = 'https://www.example.com/path/to/file'\nparsed_url = urllib.parse.urlparse(url)\n\n# Get the protocol\nprotocol = parsed_url.scheme\n\n# Get the domain name\ndomain_name = parsed_url.netloc\n\n# Get the path\npath = parsed_url.path\n\n# Print the results\nprint('Protocol:', protocol)\nprint('Domain name:', domain_name)\nprint('Path:', path)\n\n# Output:\n# Protocol: https\n# Domain name: www.example.com\n# Path: /path/to/file" + }, + { + "comment": "Write a recursive Python function to generate Fibonacci numbers.", + "code_snippet": "def fibonacci(n):\n if n == 1 or n == 2:\n return 1\n else:\n return fibonacci(n - 1) + fibonacci(n - 2)\n \nprint(fibonacci(10))" + }, + { + "comment": "Create a Kubernetes pod setup that publishes a tweet every 5 minutes.", + "code_snippet": "apiVersion: v1\nkind: Pod\nmetadata:\n name: tweet-publisher\nspec:\n containers:\n - name: tweet-publisher\n image: \n command:\n - sh\n - -c\n - 'crontab -lcrontab && while true; do python publish-tweet.py && crontab -l | { cat; echo \"*/5 * * * * python publish-tweet.py\"; } | crontab -; sleep 31622400; done'\n volumeMounts:\n - mountPath: /crontab/crontab\n subPath: crontab\n name: cronmount\n volumes:\n - name: cronmount\n configMap:\n name: tweet-cron\n---\napiVersion: v1\nkind: ConfigMap\nmetadata:\n name: tweet-cron\ndata:\n crontab: \"* * * * * python publish-tweet.py\"" + }, + { + "comment": "Write a code to generate a two-dimensional array with zeros shapes in Python", + "code_snippet": "\"\"\"\nWrite a code to generate a two-dimensional array with zeros shapes in Python\n\"\"\"\n\ndef generate_zeros_array(row,col):\n return [[0] * col for _ in range(row)]\n\n# Example\nrow = 3\ncol = 3\n\narray = generate_zeros_array(row, col)\nprint(array)\n# Output: [[0, 0, 0], [0, 0, 0], [0, 0, 0]]" + }, + { + "comment": "Write a Python code to create a dictionary which contains a data structrue in the form of [x:x^2] where x is the key and x^2 is the value.", + "code_snippet": "numbers = [1, 2, 3, 4, 5] \n\ndict_numbers = {num: num**2 for num in numbers}\nprint(dict_numbers)" + }, + { + "comment": "Create a Python script to print the numbers from 1 to 50, but for multiples of 3 print \"Fizz\" instead of the number, for multiples of 5 print \"Buzz\" instead of the number and for multiples of both 3 and 5 print \"FizzBuzz\".", + "code_snippet": "for i in range(1, 51):\n if i % 3 == 0 and i % 5 == 0:\n print(\"FizzBuzz\")\n elif i % 3 == 0:\n print(\"Fizz\")\n elif i % 5 == 0:\n print(\"Buzz\")\n else:\n print(i)" + }, + { + "comment": "Create a Python program to calculate the square root of a user-defined positive number.", + "code_snippet": "import math\n\nn = 100\n\n#Calculate the square root of a number\nsquare_root = math.sqrt(n)\n\nprint(f'Square root of {n} is {square_root}')" + }, + { + "comment": "Create a Python class called Rectangle to represent a two-dimensional rectangle with a length and width.", + "code_snippet": "class Rectangle:\n def __init__(self, length, width):\n self.length = length\n self.width = width\n\n def area(self):\n return self.length * self.width" + }, + { + "comment": "Create a data visualization dashboard in Python using Matplotlib.", + "code_snippet": "import matplotlib\nimport matplotlib.pyplot as plt\n\n# Generate the data for the dashboard\nx = [1,2,3,4,5]\ny = [10,25,30,50,80]\n\n# Create the figure and set the size\nfig = plt.figure(figsize=(10,6))\n\n# Configure the plot\nplt.plot(x, y, color='green', marker='o', linestyle='dashed', linewidth=2, markersize=12)\nplt.title(\"My Data Visualization Dashboard\")\nplt.xlabel('X-axis')\nplt.ylabel('Y-axis')\n\n# Show the plot\nplt.show()" + }, + { + "comment": "Edit the following python code to prompt the user to enter the value of radius to calculate the area of a circle.", + "code_snippet": "# Calculate area of a circle\n\nPi = 3.14\n\n# Get radius from user\nradius = float(input(\"Please enter the radius of the circle: \"))\n\n# Calculate the circle area\narea = Pi*radius**2\n\n# Print the area\nprint(\"The area of the circle is:\", area)" + }, + { + "comment": "Create a Python algorithm to identify the longest word in a sentence.", + "code_snippet": "def find_longest_word(sentence):\n words = sentence.split()\n # initialise longest_word variable with 0\n longest_word = 0\n for word in words:\n if len(word) > longest_word:\n longest_word = len(word)\n longest_word_str = word\n return longest_word_str" + }, + { + "comment": "Write a Python script that can convert degrees Fahrenheit to degrees Celsius.", + "code_snippet": "def FahrenheitToCelsius(temp_fahrenheit):\n temp_celsius = (temp_fahrenheit - 32) * 5/9\n return temp_celsius" + }, + { + "comment": "Generate a Python function that checks if a given number is an Armstrong number.", + "code_snippet": "def is_armstrong_number(num): \n n = len(str(num)) \n # initialize sum \n temp = num \n sum_of_digits = 0\n \n # find sum of nth power of individual digits \n while temp > 0: \n digit = temp % 10 \n sum_of_digits += digit ** n \n temp //= 10 \n \n # if num is equal to sum_of_digits then the number is an Armstrong number \n if num == sum_of_digits: \n return True \n \n else: \n return False" + }, + { + "comment": "Write a code in Python to print the following pattern:", + "code_snippet": "for i in range(5):\n for j in range(i+1):\n print(\"*\", end=\"\")\n print(\"\")\n\nfor i in range(5, 0, -1):\n for j in range(i):\n print(\"*\", end=\"\")\n print(\"\")" + }, + { + "comment": "Program a web scraper in Python to extract the latest stock prices from specific websites.", + "code_snippet": "import requests\nfrom bs4 import BeautifulSoup\n\n# input\nstocks = [\"AAPL stocks\", \"MSFT stocks\", \"FB stocks\", \"GOOG stocks\"]\n\n# process\ndef get_stock_price(stock):\n url = f\"https://finance.yahoo.com/quote/{stock}\"\n response = requests.get(url)\n soup = BeautifulSoup(response.text, 'html.parser')\n price = soup.find('div', {'class': 'My(6px) Pos(r) smartphone_Mt(6px)'}).find('span').text\n return price\n\n# output\nfor stock in stocks:\n price = get_stock_price(stock)\n print(f'The price of {stock} is {price}.')" + }, + { + "comment": "The code provides Python wrappers around TensorFlow ops for decoding LibSVM input to tensors. To use it, call the `decode_libsvm` function with the following arguments: `input` (a `Tensor` of type `string`), `num_features` (an `int` that is `>= 1`), `dtype` (an optional `tf.DType` from: `tf.float32, tf.float64, tf.int32, tf.int64`. Defaults to `tf.float32`), `label_dtype` (an optional `tf.DType` from: `tf.float32, tf.float64, tf.int32, tf.int64`. Defaults to `tf.int64`), and `name` (a name for the operation, optional). The function returns a tuple of `Tensor` objects `(label, feature_indices, feature_values, feature_shape)`, where `label` is a `Tensor` of type `label_dtype`, `feature_indices` is a `Tensor` of type `int64`, `feature_values` is a `Tensor` of type `dtype`, and `feature_shape` is a `Tensor` of type `int64`.", + "code_snippet": "\"\"\"Python wrappers around TensorFlow ops.\n\nThis file is MACHINE GENERATED! Do not edit.\nOriginal C++ source file: libsvm_ops.cc\n\"\"\"\n\nimport collections as _collections\nimport six as _six\n\nfrom tensorflow.python import pywrap_tensorflow as _pywrap_tensorflow\nfrom tensorflow.python.eager import context as _context\nfrom tensorflow.python.eager import core as _core\nfrom tensorflow.python.eager import execute as _execute\nfrom tensorflow.python.framework import dtypes as _dtypes\nfrom tensorflow.python.framework import errors as _errors\nfrom tensorflow.python.framework import tensor_shape as _tensor_shape\n\nfrom tensorflow.core.framework import op_def_pb2 as _op_def_pb2\n# Needed to trigger the call to _set_call_cpp_shape_fn.\nfrom tensorflow.python.framework import common_shapes as _common_shapes\nfrom tensorflow.python.framework import op_def_registry as _op_def_registry\nfrom tensorflow.python.framework import ops as _ops\nfrom tensorflow.python.framework import op_def_library as _op_def_library\nfrom tensorflow.python.util.tf_export import tf_export\n\n\n_decode_libsvm_outputs = [\"label\", \"feature_indices\", \"feature_values\",\n \"feature_shape\"]\n_DecodeLibsvmOutput = _collections.namedtuple(\n \"DecodeLibsvm\", _decode_libsvm_outputs)\n\n\n@tf_export('decode_libsvm')\ndef decode_libsvm(input, num_features, dtype=_dtypes.float32, label_dtype=_dtypes.int64, name=None):\n r\"\"\"Convert LibSVM input to tensors. The output consists of\n\n a label and a feature tensor. The shape of the label tensor\n is the same as input and the shape of the feature tensor is\n `[input_shape, num_features]`.\n\n Args:\n input: A `Tensor` of type `string`. Each string is a record in the LibSVM.\n num_features: An `int` that is `>= 1`. The number of features.\n dtype: An optional `tf.DType` from: `tf.float32, tf.float64, tf.int32, tf.int64`. Defaults to `tf.float32`.\n label_dtype: An optional `tf.DType` from: `tf.float32, tf.float64, tf.int32, tf.int64`. Defaults to `tf.int64`.\n name: A name for the operation (optional).\n\n Returns:\n A tuple of `Tensor` objects (label, feature_indices, feature_values, feature_shape).\n\n label: A `Tensor` of type `label_dtype`. A tensor of the same shape as input.\n feature_indices: A `Tensor` of type `int64`. A 2-D int64 tensor of dense_shape [N, ndims].\n feature_values: A `Tensor` of type `dtype`. A 1-D tensor of any type and dense_shape [N].\n feature_shape: A `Tensor` of type `int64`. A 1-D int64 tensor of dense_shape [ndims].\n \"\"\"\n _ctx = _context._context\n if _ctx is None or not _ctx._eager_context.is_eager:\n num_features = _execute.make_int(num_features, \"num_features\")\n if dtype is None:\n dtype = _dtypes.float32\n dtype = _execute.make_type(dtype, \"dtype\")\n if label_dtype is None:\n label_dtype = _dtypes.int64\n label_dtype = _execute.make_type(label_dtype, \"label_dtype\")\n _, _, _op = _op_def_lib._apply_op_helper(\n \"DecodeLibsvm\", input=input, num_features=num_features, dtype=dtype,\n label_dtype=label_dtype, name=name)\n _result = _op.outputs[:]\n _inputs_flat = _op.inputs\n _attrs = (\"dtype\", _op.get_attr(\"dtype\"), \"label_dtype\",\n _op.get_attr(\"label_dtype\"), \"num_features\",\n _op.get_attr(\"num_features\"))\n _execute.record_gradient(\n \"DecodeLibsvm\", _inputs_flat, _attrs, _result, name)\n _result = _DecodeLibsvmOutput._make(_result)\n return _result\n\n else:\n try:\n _result = _pywrap_tensorflow.TFE_Py_FastPathExecute(\n _ctx._context_handle, _ctx._eager_context.device_name, \"DecodeLibsvm\",\n name, _ctx._post_execution_callbacks, input, \"dtype\", dtype,\n \"label_dtype\", label_dtype, \"num_features\", num_features)\n _result = _DecodeLibsvmOutput._make(_result)\n return _result\n except _core._FallbackException:\n return decode_libsvm_eager_fallback(\n input, dtype=dtype, label_dtype=label_dtype,\n num_features=num_features, name=name, ctx=_ctx)\n except _core._NotOkStatusException as e:\n if name is not None:\n message = e.message + \" name: \" + name\n else:\n message = e.message\n _six.raise_from(_core._status_to_exception(e.code, message), None)\n\n\ndef decode_libsvm_eager_fallback(input, num_features, dtype=_dtypes.float32, label_dtype=_dtypes.int64, name=None, ctx=None):\n r\"\"\"This is the slowpath function for Eager mode.\n This is for function decode_libsvm\n \"\"\"\n _ctx = ctx if ctx else _context.context()\n num_features = _execute.make_int(num_features, \"num_features\")\n if dtype is None:\n dtype = _dtypes.float32\n dtype = _execute.make_type(dtype, \"dtype\")\n if label_dtype is None:\n label_dtype = _dtypes.int64\n label_dtype = _execute.make_type(label_dtype, \"label_dtype\")\n input = _ops.convert_to_tensor(input, _dtypes.string)\n _inputs_flat = [input]\n _attrs = (\"dtype\", dtype, \"label_dtype\", label_dtype, \"num_features\",\n num_features)\n _result = _execute.execute(b\"DecodeLibsvm\", 4, inputs=_inputs_flat,\n attrs=_attrs, ctx=_ctx, name=name)\n _execute.record_gradient(\n \"DecodeLibsvm\", _inputs_flat, _attrs, _result, name)\n _result = _DecodeLibsvmOutput._make(_result)\n return _result\n\n_ops.RegisterShape(\"DecodeLibsvm\")(None)\n\ndef _InitOpDefLibrary(op_list_proto_bytes):\n op_list = _op_def_pb2.OpList()\n op_list.ParseFromString(op_list_proto_bytes)\n _op_def_registry.register_op_list(op_list)\n op_def_lib = _op_def_library.OpDefLibrary()\n op_def_lib.add_op_list(op_list)\n return op_def_lib\n# op {\n# name: \"DecodeLibsvm\"\n# input_arg {\n# name: \"input\"\n# type: DT_STRING\n# }\n# output_arg {\n# name: \"label\"\n# type_attr: \"label_dtype\"\n# }\n# output_arg {\n# name: \"feature_indices\"\n# type: DT_INT64\n# }\n# output_arg {\n# name: \"feature_values\"\n# type_attr: \"dtype\"\n# }\n# output_arg {\n# name: \"feature_shape\"\n# type: DT_INT64\n# }\n# attr {\n# name: \"dtype\"\n# type: \"type\"\n# default_value {\n# type: DT_FLOAT\n# }\n# allowed_values {\n# list {\n# type: DT_FLOAT\n# type: DT_DOUBLE\n# type: DT_INT32\n# type: DT_INT64\n# }\n# }\n# }\n# attr {\n# name: \"label_dtype\"\n# type: \"type\"\n# default_value {\n# type: DT_INT64\n# }\n# allowed_values {\n# list {\n# type: DT_FLOAT\n# type: DT_DOUBLE\n# type: DT_INT32\n# type: DT_INT64\n# }\n# }\n# }\n# attr {\n# name: \"num_features\"\n# type: \"int\"\n# has_minimum: true\n# minimum: 1\n# }\n# }\n_op_def_lib = _InitOpDefLibrary(b\"\\n\\311\\001\\n\\014DecodeLibsvm\\022\\t\\n\\005input\\030\\007\\032\\024\\n\\005label\\\"\\013label_dtype\\032\\023\\n\\017feature_indices\\030\\t\\032\\027\\n\\016feature_values\\\"\\005dtype\\032\\021\\n\\rfeature_shape\\030\\t\\\"\\033\\n\\005dtype\\022\\004type\\032\\0020\\001:\\010\\n\\0062\\004\\001\\002\\003\\t\\\"!\\n\\013label_dtype\\022\\004type\\032\\0020\\t:\\010\\n\\0062\\004\\001\\002\\003\\t\\\"\\027\\n\\014num_features\\022\\003int(\\0010\\001\")\n" + }, + { + "comment": "Write a Python program to compute the sum of the values of a given dictionary", + "code_snippet": "def dict_sum(dict):\n sum = 0\n for key, value in dict.items():\n sum += value\n return sum" + }, + { + "comment": "Create a REST API in Python that can be used to delete an item from a list.", + "code_snippet": "from flask import Flask, request\nimport json\n\napp = Flask(__name__)\nitems = [\"Apple\", \"Banana\", \"Orange\"]\n\n@app.route('/items', methods=[\"GET\"])\ndef get_items():\n return json.dumps(items)\n\n@app.route('/items/', methods=[\"DELETE\"])\ndef delete_item(item):\n if item in items:\n items.remove(item)\n message = \"Item successfully deleted.\"\n else:\n message = \"Item not found.\"\n return json.dumps({\"message\": message})" + }, + { + "comment": "Read a given list of strings and create a new list of all strings that are longer than 5 characters long.", + "code_snippet": "def filter_long_strings(string_list):\n long_strings = []\n for string in string_list:\n if len(string) > 5:\n long_strings.append(string)\n return long_strings\n\nstring_list = ['Python', 'is', 'Fun']\n\nlong_strings = filter_long_strings(string_list)\nprint(long_strings)" + }, + { + "comment": "Craft an algorithm in Python to move all zeroes in a list to the end of the list.", + "code_snippet": "def move_zeroes(lst):\n # Count the number of non-zero elements\n num_non_zeroes = 0\n for num in lst:\n if num != 0:\n num_non_zeroes += 1\n \n # Initialize the new list\n new_lst = []\n \n # Move all non-zeroes to the beginning of the new list\n for i in range(num_non_zeroes):\n new_lst.append(lst[i])\n \n # Append 0's to the end\n for _ in range(len(lst)-num_non_zeroes):\n new_lst.append(0)\n \n # Return the new list\n return new_lst\n\nlst = [3, 0, 1, 0, 5, 0, 2]\nresult = move_zeroes(lst)\nprint(result)" + }, + { + "comment": "Create a Python program to implement the Fibonacci sequence.", + "code_snippet": "def fibonacci_seq(n): \n if n==0: \n return 0\n elif n==1: \n return 1\n else: \n return fibonacci_seq(n-1)+fibonacci_seq(n-2)" + }, + { + "comment": "Write a function in Python to print out an array backwards.", + "code_snippet": "def print_reverse_array(arr):\n for i in range(len(arr)-1, -1, -1): \n print(arr[i])" + }, + { + "comment": "Create a Python program to find the possible prime numbers from one to one hundred by using the Sieve of Eratosthenes algorithm.", + "code_snippet": "def sieve_eratosthenes(n): \n prime_list = [True] * (n+1) \n prime_list[0] = False\n prime_list[1] = False\n primes = [] \n \n for i in range(2, n+1): \n if prime_list[i] == True: \n primes.append(i) \n for j in range(i*i, n+1, i): \n prime_list[j] = False\n return primes \n \nn = 100\nprint(\"The Prime numbers from 1 to 100 are:\")\nprint(sieve_eratosthenes(n))" + }, + { + "comment": "Create a Python function named \"Transpile\" that takes in four arguments: \"src_dir\", \"dst_dir\", \"model_filename\", and \"params_filename\". Inside the function, create a CPUPlace object and an Executor object using Paddle Fluid. Then, create a Scope object using fluid.core.Scope(). Load the inference program, feed target names, and fetch targets using fluid.io.load_inference_model() with the \"src_dir\", \"exe\", \"model_filename\", and \"params_filename\" arguments. Clone the inference program and apply the inference transpiler using fluid.InferenceTranspiler() and t.transpile(). Save the optimized inference program to \"dst_dir\" using fluid.io.save_persistables() and the \"inference_transpiler_program\" and \"params_filename\" arguments. If \"dst_dir\" does not exist, create it using os.makedirs(). Finally, create a main function that takes in arguments using argparse.ArgumentParser() and calls the \"Transpile\" function with the parsed arguments.", + "code_snippet": "import os\nimport sys\nimport argparse\nimport paddle.fluid as fluid\n\n\ndef Transpile(src_dir, dst_dir, model_filename, params_filename):\n place = fluid.CPUPlace()\n exe = fluid.Executor(place)\n\n inference_scope = fluid.core.Scope()\n with fluid.scope_guard(inference_scope):\n print \"Loading inference_program from \", src_dir\n [inference_program, feed_target_names,\n fetch_targets] = fluid.io.load_inference_model(src_dir, exe, model_filename, params_filename)\n\n inference_transpiler_program = inference_program.clone()\n # NOTE: Applying the inference transpiler will change the inference_transpiler_program.\n t = fluid.InferenceTranspiler()\n # Under the with statement, inference_scope is the global scope.\n t.transpile(inference_transpiler_program, place)\n\n #print inference_transpiler_program\n\n print \"Saving the optimized inference_program to \", dst_dir\n # There is a bug in fluid.io.save_inference_model, so we can use the following code instead.\n if not os.path.isdir(dst_dir):\n os.makedirs(dst_dir)\n model_path = os.path.join(dst_dir, model_filename)\n with open(model_path, \"wb\") as f:\n f.write(inference_transpiler_program.desc.serialize_to_string())\n fluid.io.save_persistables(exe, dst_dir, inference_transpiler_program, params_filename)\n\n\ndef main():\n parser = argparse.ArgumentParser()\n parser.add_argument('--src_dir', help='Source directory of inference model')\n parser.add_argument('--dst_dir', help='Dstination directory of inference model')\n parser.add_argument('--model_filename', default=None, help='The name of model file')\n parser.add_argument('--params_filename', default=None, help='The name of params file')\n args = parser.parse_args()\n Transpile(args.src_dir, args.dst_dir, args.model_filename, args.params_filename)\n\n\nif __name__ == '__main__':\n main()\n" + }, + { + "comment": "Create a Python function called add_marks which takes two parameters: marks(a list) and mark(an integer). The function should add the mark to each value in the marks list.", + "code_snippet": "def add_marks(marks, mark):\n return [m + mark for m in marks]" + }, + { + "comment": "Design a positive feedback loop for the following python program.", + "code_snippet": "for i in range(10):\n print(\"hello\")\n i += 1\n if i == 10:\n print(\"You've got it!\")" + }, + { + "comment": "Implement a function that prints out the numbers from 1 to 50 in python", + "code_snippet": "def print_numbers():\n for i in range(1, 51):\n print(i)\n\nprint_numbers()" + }, + { + "comment": "Write a Python program to send an automated email. The program should take a list of emails as input, iterate over the list, and send an email to each address.", + "code_snippet": "import smtplib\n\nsender_email = 'example@gmail.com'\npassword = 'example_password'\n\nfor email in recipient_emails:\n with smtplib.SMTP('smtp.gmail.com', 587) as server:\n server.ehlo()\n server.starttls()\n server.login(sender_email, password)\n\n subject = 'Automated Email from Program'\n message = 'Message body'\n \n server.sendmail(sender_email, email, 'Subject: ' + subject + '\\n\\n' + message)\n server.quit()\n print('Email sent successfully.')" + }, + { + "comment": "Create a Python class which represents a 3D Vector", + "code_snippet": "class Vector3D:\n def __init__(self, x, y, z):\n self.x = x\n self.y = y\n self.z = z\n \n def __str__(self):\n return \"(\" + str(self.x) + \", \" + str(self.y) + \", \" + str(self.z) + \")\"" + }, + { + "comment": "Given two strings, write a Python program to find the total number of common characters present in both strings", + "code_snippet": "def num_common_chars(str1, str2):\n common = 0\n for c in str1:\n if c in str2:\n common += 1\n return common" + }, + { + "comment": "Modify the following Python code to handle errors.", + "code_snippet": "def read_data_from_json(filename):\n try:\n with open(filename, 'r') as f:\n data = json.load(f)\n return data\n except FileNotFoundError:\n print(\"The file specified does not exist.\")\n except json.decoder.JSONDecodeError:\n print(\"The file specified is not in a valid JSON format.\")" + }, + { + "comment": "Analyze a given Python code and write a function that checks if a given number is prime.", + "code_snippet": "def primeCheck(num):\n if num > 1:\n for i in range(2, num):\n if (num % i) == 0:\n return False\n else:\n return False\n return True" + }, + { + "comment": "Create a python program to filter out all the even numbers from a given list.", + "code_snippet": "def filter_even_numbers(numbers):\n even_numbers = []\n for i in numbers:\n if i % 2 == 0:\n even_numbers.append(i)\n return even_numbers\n \n \nfiltered = filter_even_numbers([3, 4, 5, 6, 7])\nprint(filtered)" + }, + { + "comment": "Implement a function in Python that takes a Huffman tree and drop all its leaf nodes.", + "code_snippet": "def dropLeafNodes(head): \n \n # If node is not None and doesn't have any children \n if head and not head.left and not head.right: \n return None\n \n # Don't change anything if head is None \n if not head: \n return None\n \n # Recursively call dropLeafNodes on left and right subtrees\n head.left = dropLeafNodes(head.left) \n head.right = dropLeafNodes(head.right) \n \n # Return head of the modified tree\n return head" + }, + { + "comment": "Create a web crawler in Python that starts from a website and looks for other links in the page then scrapes the page content.", + "code_snippet": "import requests\nfrom bs4 import BeautifulSoup\nimport re\n\ndef crawl(url):\n visited = set()\n queue = [url] \n \n while queue:\n curr = queue.pop(0)\n visited.add(curr) \n response = requests.get(curr)\n \n if response.ok:\n soup = BeautifulSoup(response.text, 'html.parser')\n\n# scrape the page here \n\n# find all the links\n links = soup.find_all('a', href=re.compile('^http')) \n \n for link in links:\n if link['href'] not in visited:\n queue.append(link['href'])" + }, + { + "comment": "Write a Python program to calculate the maximum, minimum and mean number of elements in a given string.", + "code_snippet": "def get_stats_for_string(string):\n num_elements = len(string)\n max_element = max(string)\n min_element = min(string)\n mean_element = sum(string) / num_elements\n return (max_element, min_element, mean_element)\n\nstring = \"abcdef\"\nstats_for_string = get_stats_for_string(string)\nprint(\"Max: {0}, Min: {1}, Mean: {2}\".format(*stats_for_string))" + }, + { + "comment": "Write a Python program to calculate the compound interest.", + "code_snippet": "def compoundInterest(investment_amount, rate_of_interest, time):\n compound_interest = investment_amount * (pow((1 + rate_of_interest / 100), time))\n return compound_interest\n\nci = compoundInterest(1000, 5, 5)\nprint(ci)" + }, + { + "comment": "Create a command-line application in Python that stores customer data and allows customer to query by customer name", + "code_snippet": "import sys \n \ndef print_customer_data(name): \n # Code for searching customer data by customer name and \n # printing results \n ...\n\n# Main function for the customer search application\nif __name__==\"__main__\": \n # Get command line arguments \n args = sys.argv \n \n if len(args) == 2: \n name = args[1]\n print_customer_data(name) \n else: \n print(\"Invalid arguments, please specify a customer name.\")" + }, + { + "comment": "Develop a program in Python to calculate the Fibonacci sequence.", + "code_snippet": "def fibonacci(n): \n a = 0\n b = 1\n if n < 0: \n print(\"Incorrect input\") \n elif n == 0: \n return a \n elif n == 1: \n return b \n else: \n for i in range(2,n): \n c = a + b \n a = b \n b = c \n return b \n\n# Driver Code \nprint(fibonacci(9))" + }, + { + "comment": "Generate a python program that takes two sets of integers as input and outputs the intersection of those sets.", + "code_snippet": "def intersection(set1, set2): \n return set1 & set2\n\nresult = intersection(set1, set2) \nprint(result)" + }, + { + "comment": "Design an algorithm in Python to find the smallest number in a given list.", + "code_snippet": "def smallestNumber(nums):\n smallest = nums[0]\n for i in range(1, len(nums)):\n if nums[i] < smallest:\n smallest = nums[i]\n return smallest\n\nnums = [4, 5, 6, 7, 8]\nsmallestNum = smallestNumber(nums)\nprint('The smallest number is', smallestNum)" + }, + { + "comment": "Generate a python program for printing a Pascal triangle.", + "code_snippet": "def PascalTriangle(n) : \n \n # An auxiliary array to store \n # generated pscal triangle values \n arr = [0 for i in range(n)] \n \n # Iterate through every line and \n # print integer(s) in it \n for line in range(0, n) : \n \n # Every line has number of \n # integers equal to line \n # number \n for i in range (0, line + 1) : \n \n # First and last values \n # in every row are 1 \n if (i == 0 or i == line) : \n arr[i] = 1\n \n # Other values are sum of \n # values just above and \n # left of above \n else : \n arr[i] = arr[i] + arr[i - 1] \n \n # Printing array in \n # mantainence of order \n for i in range (0, line + 1) : \n print(arr[i], end =\" \") \n print() \n \n# Driver Code \nn = 5\nPascalTriangle(n)" + }, + { + "comment": "Create a python script that filters out all negative numbers from the given matrix", + "code_snippet": "import numpy as np\n\ndef filter_out_negative(matrix):\n # Convert matrix to numpy array\n matrix = np.array(matrix)\n # Find all negative numbers and set them to 0\n matrix[matrix < 0] = 0\n return matrix\n\nresult = filter_out_negative([[-1, 2, -3], [-4, 5, 6], [-7, 8, 9]])\nprint(result)" + }, + { + "comment": "Create a basic REST API using Python and Flask to list all the countries in the world.", + "code_snippet": "import flask\nfrom flask import Flask, request, jsonify\nimport json\n\napp = Flask(name)\n\n@app.route('/countries', methods=['GET'])\ndef get_countries():\nwith open('data.json', 'r') as f:\n countries = json.load(f)\n return jsonify(countries)\n\nif name == 'main':\n app.run()" + }, + { + "comment": "Create a web scraper in Python that can extract hotel reviews from TripAdvisor.", + "code_snippet": "import requests\nfrom bs4 import BeautifulSoup\n\n# Define the URL and the headers\nurl = ''\nheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'}\n\n# Make a request and get HTML in response\nresponse = requests.get(url, headers=headers)\n\n# Parse HTML\nsoup = BeautifulSoup(response.text, 'html.parser')\n\n# Find all reviews\nreviews = soup.find_all('div', {'class': 'review-container'})\n\n# Go through every review and extract the data\nfor review in reviews:\n # Get the title\n title = review.find('span', {'class': 'noQuotes'}).text\n\n # Get the text\n text = review.find('p', {'class': 'partial_entry'}).text\n\n # Print for demo\n print(title)\n print(text)\n print('-' * 50)" + }, + { + "comment": "Develop a machine learning model in Python to identify the author of a given article.", + "code_snippet": "from sklearn.feature_extraction.text import TfidfVectorizer\nfrom sklearn.naive_bayes import GaussianNB\nfrom sklearn.pipeline import Pipeline\nfrom sklearn.model_selection import train_test_split\n\n# load data\nsamples = [\n \"sample 1 from AuthorA\",\n \"sample 2 from AuthorA\",\n \"sample 1 from AuthorB\",\n \"sample 2 from AuthorB\"\n]\nlabels = [\n \"AuthorA\",\n \"AuthorA\",\n \"AuthorB\",\n \"AuthorB\"\n]\n\n# build the model\nmodel = Pipeline([\n ('tfidf', TfidfVectorizer()),\n ('clf', GaussianNB())\n])\n\n# train the model\nX_train, X_test, y_train, y_test = train_test_split(samples, labels, test_size=0.3)\nmodel.fit(X_train, y_train)\n\n# evalulate the model\nscore = model.score(X_test, y_test)\nprint(f'model score: {score}')" + }, + { + "comment": "Write a Python program to divide a given list of numbers into two equal parts such that the difference between the sum of the two parts is minimum.", + "code_snippet": "def divide_in_two_equal_parts(lst):\n target = sum(lst) // 2\n part1 = []\n part2 = []\n left_sum = 0\n right_sum = 0\n \n for num in lst:\n if left_sum <= right_sum:\n left_sum += num\n part1.append(num)\n else:\n right_sum += num\n part2.append(num)\n \n return part1, part2\n\npart1, part2 = divide_in_two_equal_parts([2, 3, 4, 5, 6, 7])\n\nprint(\"Part 1:\", part1)\nprint(\"Part 2:\", part2)" + }, + { + "comment": "Develop an algorithm to detect and fix Python syntax errors in a given code snippet.", + "code_snippet": "def test():\n x = 5\n y = 3\n try:\n z\n except NameError:\n print(\"NameError: Name 'z' is not defined\")" + }, + { + "comment": "Design a data structure in Python to store integer values.", + "code_snippet": "class IntList:\n def __init__(self):\n self.values = []\n \n def add_value(self, value):\n self.values.append(value)\n \n def find_min(self):\n return min(self.values)" + }, + { + "comment": "Create an algorithm in Python for a linear search. The algorithm should take in an array and a value to search for, and return the index of the value if it is found, or -1 if it is not.", + "code_snippet": "def linearSearch(arr, value):\n for i in range(len(arr)):\n if arr[i] == value:\n return i # value found, return index\n return -1 # value not found\n\narr = [5, 3, 7, 2]\nsearchValue = 7\n\nresult = linearSearch(arr, searchValue)\n\nif result == -1:\n print(\"Element not found\")\nelse:\n print(\"Element present at index\", result)" + }, + { + "comment": "Given a list of strings, write a Python function to remove all the whitespaces from each string.", + "code_snippet": "def remove_whitespace(word_list):\n return [word.strip() for word in word_list]\n\nstripped_list = remove_whitespace(['Hello World ', 'Hi there', 'Good Morning'])\nprint(stripped_list)" + }, + { + "comment": "Design a Python program to randomize a list of given integers using an optimized Fisher-Yates algorithm.", + "code_snippet": "def randomized_list(num_list):\n for i in range(len(num_list)-1,0,-1):\n j = random.randint(0,i)\n num_list[i],num_list[j] = num_list[j],num_list[i]\n return num_list" + }, + { + "comment": "Create a system in Python for generating natural language responses.", + "code_snippet": "from tensorflow.keras.layers import Input, Dense, Embedding, GRU\nfrom tensorflow.keras.models import Model\nfrom tensorflow.keras.utils import plot_model\n\n# Create inputs\ninputs1 = Input(shape=(20,))\nx1 = Embedding(1000, 64)(inputs1)\nx1 = GRU(128)(x1)\n\n# Create outputs\ny1 = Dense(1000, activation='softmax')(x1)\n\n# Create model\nmodel = Model(inputs=[inputs1], outputs=[y1])\n\n# Compile the model\nmodel.compile(optimizer='adam',\n loss='categorical_crossentropy',\n metrics=['accuracy'])\n\n# Train the model\nmodel.fit([inputs], [outputs], epochs=10, batch_size=32)\n\n# Generate the response to the sample utterance\nquery = \"What time is it?\"\nprediction = model.predict(query)\n\nprint(prediction)" + }, + { + "comment": "Create a web scraper using Python that collects the title and content from the homepage of a given website.", + "code_snippet": "import requests\nimport bs4\n\nurl = 'https://www.example.com'\nr = requests.get(url)\nhtml = bs4.BeautifulSoup(r.text,\"html.parser\")\n\n# Find title\ntitle = html.find('title')\nprint(title.text)\n\n# Find content\ncontent = html.find('div', {'class': 'content'})\nprint(content.text)" + }, + { + "comment": "Generate a Python script that finds the total surface area of a cuboid, given its three dimensions.", + "code_snippet": "def find_total_surfacearea(length, breadth, height):\n return (2*(length*breadth + breadth*height + height*length))\n\nprint(find_total_surfacearea(2, 3, 4))\n\nOutput: 52" + }, + { + "comment": "Generate a Python program to clean a string of HTML tags.", + "code_snippet": "import re\n\n# Clean a string of HTML tags \ndef clean_html_tags(str):\n clean_str = re.sub(\"<.*?>\", \"\", str)\n return clean_str\n\nhtml_string = \"

This is a test string

\"\n\nclean_str = clean_html_tags(html_string)\n\nprint(clean_str) #This is a test string" + }, + { + "comment": "Generate a Python function that takes an integer array as input and returns the number of unique elements in the array.", + "code_snippet": "def num_unique_elements(arr):\n unique_arr = set(arr)\n return len(unique_arr)\n\nprint(num_unique_elements([1, 2, 3, 2, 1, 4, 7, 8, 9, 8]))" + }, + { + "comment": "Create a Python program to scrape an online news website to get the headlines.", + "code_snippet": "import requests\nfrom bs4 import BeautifulSoup \n\n# url of the website you want to scrape \nurl = \"https://www.news.com/\" \n\n# get the response in the form of html\nr = requests.get(url) \n\n# create a beautifulsoup object to parse contents \nsoup = BeautifulSoup(r.content, 'html5lib') \n\n# find headlines from the parsed page \nheadlines = soup.find_all('h2') \n\n# Print the headlines \nfor headline in headlines: \n print(headline.text)" + }, + { + "comment": "Edit the given Python program to print 'Happy Holidays' 10 times.", + "code_snippet": "for i in range(10):\n print('Happy Holidays')" + }, + { + "comment": "Combine 2 strings and reverse the result in Python.", + "code_snippet": "words = \"Hello \"\nwords2 = \"world!\"\n\ncombined = words + words2\nresult = combined[::-1]\n\nprint(result)" + }, + { + "comment": "Create a class to represent a bank account in Python.", + "code_snippet": "class BankAccount:\n \n def __init__(self, name, balance):\n self.name = name\n self.balance = balance\n \n def deposit(self, amount):\n self.balance += amount\n \n def withdraw(self, amount):\n if self.balance >= amount:\n self.balance -= amount\n return True\n else:\n return False\n \n def get_balance(self):\n return self.balance" + }, + { + "comment": "Optimize the following Python code to sort a set of numbers (set = [2, 6, 3, 8, 4]) in O(n) time complexity.", + "code_snippet": "def sort_list(unsorted_list):\n sorted_list = []\n while unsorted_list:\n min_elem = min(unsorted_list)\n unsorted_list.remove(min_elem)\n sorted_list.append(min_elem)\n return sorted_list" + }, + { + "comment": "Design a Python program to perform linear regression for predicting the numbers in a given dataset.", + "code_snippet": "import numpy as np\nfrom sklearn.linear_model import LinearRegression\n\nX = np.array([1,2,3,4,5]).reshape(-1,1)\nY = np.array([3,5,7,9,13])\n\nmodel = LinearRegression()\nmodel.fit(X, Y)\n\n# Predicts the value of y\nprint(model.predict([[7]]))" + }, + { + "comment": "Create a Python object that contains two attributes, \"Name\" and \"Age\".", + "code_snippet": "class Person:\n def __init__(self, name, age):\n self.name = name\n self.age = age\n\nperson = Person(\"John\", 25)" + }, + { + "comment": "Write a function in Python that takes a list of objects and returns a list of those objects sorted by one of their attributes.", + "code_snippet": "def sort_by_attr(objects, attr):\n return sorted(objects, key=lambda item: item[attr])\n \nsort_by_attr([{\"name\": \"Alice\", \"age\": 20}, {\"name\": \"Bob\", \"age\": 21}], \"age\")" + }, + { + "comment": "Write a Python program to generate an HTML table displaying information about the top 10 bestselling books in a specific genre.", + "code_snippet": "import sqlite3\n\n# connect to the database\nconn = sqlite3.connect('books.db')\nc = conn.cursor()\n\n# retrieve the data\nc.execute('''SELECT title, author, genre, sales\nFROM Books\nWHERE genre='Fantasy'\nORDER BY sales DESC\nLIMIT 10''')\n\n# save the results\nresults = c.fetchall()\n\n# generate the HTML code\nhtml = ''\nhtml += ''\n\nfor result in results:\n title = result[0]\n author = result[1]\n genre = result[2]\n sales = result[3]\n\n html += f''\n\nhtml += '
TitleAuthorGenreSales
{title}{author}{genre}{sales}
'\n\n# display the results\nprint(html)" + }, + { + "comment": "Create a Python script to filter out all the vowels from a string.", + "code_snippet": "def filter_vowels(string):\n vowels = ('a', 'e', 'i', 'o', 'u')\n return ''.join(c for c in string if c not in vowels)" + }, + { + "comment": "In Python, write a script to sort the list items in descending order.", + "code_snippet": "list_items = [3, 7, 5, 8, 10]\n\nlist_items.sort(reverse=True)\n\nprint(list_items) # Output: [10, 8, 7, 5, 3]" + }, + { + "comment": "Create a Python function that takes in a text string and returns a dictionary of words and the number of times each word appears in the text string.", + "code_snippet": "def words_count(text):\n words_dict = {}\n for word in text.split(' '):\n if word in words_dict:\n words_dict[word] += 1\n else:\n words_dict[word] = 1\n return words_dict\n\nwords_dict = words_count(\"A quick brown fox jumps over the lazy dog\")\nprint(words_dict)" + }, + { + "comment": "Create an object-oriented structure to solve a maze by using python.", + "code_snippet": "import collections\n\nclass Maze:\n def __init__(self, n, m):\n self._n, self._m = n, m\n self._grid = [[None] * m for _ in range(n)]\n\n def solve_maze(self):\n result, found = [], False\n start, end = (0, 0), (self._n-1, self._m-1)\n\n for i in range(self._n):\n for j in range(self._m):\n if self._grid[i][j] == 1:\n value = 0\n self._find_omega(i, j, value, result, start, end,\n found)\n return result\n\n def _find_omega(self, i, j, value,\n result, start, end, found):\n rowNbr, colNbr = [-1, 0, 0, 1], [0, -1, 1, 0]\n\n if (i, j) == end:\n found = True\n result.append(value)\n return\n\n if found == True:\n return\n\n self._grid[i][j] = 0\n for k in range(4):\n if self._on_board(i + rowNbr[k], j + colNbr[k]):\n self._find_omega(i + rowNbr[k], j + colNbr[k],\n value + 1, result,\n start, end, found)\n\n def _on_board(self, i, j):\n return 0 <= i < self._n and 0 <= j < self._m and self._grid[i][j] == 1" + }, + { + "comment": "Compose a piece of code to print the length of a given string.", + "code_snippet": "string = \"Python\"\nprint(\"Length of the given string is:\", len(string))" + }, + { + "comment": "Compose a Python program to calculate the maximum possible revenue from the items with given weights and values.", + "code_snippet": "\"\"\"\nCalculate the maximum possible revenue from the items with given weights and values\n\"\"\"\n\n# given weights and values \nweights = [2, 1, 3] \nvalues = [4, 2, 3] \n\n# number of items \nn = len(weights) \n \n# function to calculate the maximum revenue \ndef knapsack(weights, values, n): \n \n # total capacity of knapsack \n W = 5\n \n # matrix to store solution matrix \n K = [[0 for x in range(W+1)] for x in range(n+1)] \n \n # build the solution matrix in bottom up manner \n for i in range(n+1): \n for w in range(W+1): \n if i==0 or w==0: \n K[i][w] = 0\n elif weights[i-1] <= w: \n K[i][w] = max(values[i-1] + K[i-1][w-weights[i-1]], K[i-1][w]) \n else: \n K[i][w] = K[i-1][w] \n \n return K[n][W] \n \nprint (knapsack(weights, values, n))" + }, + { + "comment": "Write a Python program to read in a tweet and remove all punctuation, special characters and stopwords.", + "code_snippet": "import re\nimport string\nfrom nltk.corpus import stopwords\n\ntweet = \"I'm so excited to be going to the #MuseumTour! #BigDay #travel\"\ntweet_clean = re.sub(r'[^\\w\\s]','',tweet) #remove punctuation\ntokens = tweet_clean.split() #split string into individual words \nstop_words = set(stopwords.words(\"english\")) #get list of stopwords\nfiltered_tokens = [w for w in tokens if not w in stop_words] #remove stopwords\nprint(filtered_tokens)" + }, + { + "comment": "Implement a web scraper in Python to extract the top ten trending YouTube videos.", + "code_snippet": "import requests\nfrom bs4 import BeautifulSoup\n\n# make a request to get the page content\npage = requests.get(\"https://www.youtube.com/feed/trending\")\n\n# parse the page content\nsoup = BeautifulSoup(page.content, 'html.parser')\n\n# extract the list of trending videos\ntrending_videos = soup.find_all(class_='expanded-shelf-content-item-wrapper')\n\n# print the top ten trending videos\nfor video in trending_videos[:10]:\n print(video.find(class_='yt-uix-tile-link').get('title'))" + }, + { + "comment": "Make a code in Python to find the mode of the given set of values.", + "code_snippet": "def find_mode(list):\n max_count = 0\n mode = list[0]\n count = {}\n for item in list:\n if (item in count):\n count[item] += 1\n else:\n count[item] = 1\n if (count[item] > max_count):\n max_count = count[item]\n mode = item\n return mode" + }, + { + "comment": "Create a web API with Python and Flask to give the current date and time.", + "code_snippet": "from flask import Flask\nimport datetime\n\napp = Flask(__name__)\n\n@app.route('/datetime')\ndef get_datetime():\n return datetime.datetime.now().strftime(\"%Y-%m-%d %H:%M:%S\")\n\nif __name__ == '__main__':\n app.run()" + }, + { + "comment": "Create a Python function that takes a list containing fruit names and returns the most common fruit name.", + "code_snippet": "def most_common_fruit(fruit_list):\n \n # Dictionary to get count of each fruit\n freq_dict = {}\n \n # Count frequency of each fruit\n for fruit in fruit_list:\n if fruit in freq_dict:\n freq_dict[fruit] += 1\n else:\n freq_dict[fruit] = 1\n \n # Get maximum frequency \n max_freq = 0\n for freq in freq_dict.values():\n if freq > max_freq:\n max_freq = freq\n \n # Get the most common fruit\n most_common_fruit = None\n for fruit, freq in freq_dict.items():\n if freq == max_freq:\n most_common_fruit = fruit\n break\n \n return most_common_fruit" + }, + { + "comment": "Write a Python program to take in a list of phrases and generate a string with the each phrase followed by its length.", + "code_snippet": "result = \"A bird in the hand (17)is worth two in the bush (25)\"\n \ncode:\ninput_phrases = [\"A bird in the hand\", \"is worth two in the bush\"]\n \nresult = \"\"\nfor phrase in input_phrases:\n result += phrase + ' (' + str(len(phrase)) + ')'\n \nprint(result)" + }, + { + "comment": "Write a simple Python function that takes a list of integers and returns the sum of all elements divisible by 3.", + "code_snippet": "def divisibleBy3(li):\n total = 0\n for num in li:\n if num % 3 == 0:\n total += num\n return total\n# Output: 24" + }, + { + "comment": "Create a program in Python that takes a number from the user and prints all the divisors of the number.", + "code_snippet": "divisors = []\n\nnum = int(input('Enter a number: '))\n \nfor i in range(1, num + 1):\n if num % i == 0:\n divisors.append(i)\n\nprint('The divisors of',num ,'are:')\nprint(*divisors, sep=', ')" + }, + { + "comment": "Write a Python program to generate an HTML page containing a table with some employee data.", + "code_snippet": "\n \n Employee Data\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
NameJob TitleDepartmentSalary
John DoeSenior DeveloperIT$120,000
Jane DoeManagerFinance$95,000
Tim SmithJunior DeveloperIT$55,000
\n \n" + }, + { + "comment": "Create a Python function to select all rows from a table where the 'status' is 'approved'", + "code_snippet": "def select_approved_rows():\n sql = \"SELECT * FROM table WHERE status = 'approved'\"\n cur.execute(sql)\n return cur.fetchall()" + }, + { + "comment": "Create a Python program to generate random passwords of length 8 characters, containing at least one lowercase letter, one uppercase letter and one number.", + "code_snippet": "from random import choice\nimport string\n\ndef generate_password():\n chars = string.ascii_uppercase + string.ascii_lowercase + string.digits\n password = ''.join(choice(chars) for i in range(8))\n if any(c.islower() for c in password) and any(c.isupper() for c in password) and any(c.isdigit() for c in password):\n return password\n else: \n return generate_password()\n\nif __name__ == '__main__':\n print(generate_password())" + }, + { + "comment": "Generate a solution to translate a text from English to French using Python.", + "code_snippet": "# install the module \n# in command prompt\npip install googletrans\n\n# import module\nfrom googletrans import Translator\n\n# create an object\ntranslator = Translator()\n\n# define text\ntext = \"Hello, this is a sample text to translate.\"\n\n# call the function and pass the text\ntranslation = translator.translate(text, dest='fr') \n\n# print the translation \nprint(translation.text)" + }, + { + "comment": "Create a function to generate a unique 6 digit number.", + "code_snippet": "# Python program to generate \n# a unique 6 digit number \nimport random \ndef generate_number(): \n \n # Choose a random number \n # between 10000 and 99999 \n random_number = random.randint(10000, 99999) \n \n # Return the random number \n return random_number \n \n# Driver Code \nif __name__ == \"__main__\": \n print(generate_number())" + }, + { + "comment": "Write a Python program to generate 10 random numbers and put them in a list.", + "code_snippet": "import random\n\nrandom_list = []\nfor i in range(10):\n number = random.randint(1, 100)\n random_list.append(number)" + }, + { + "comment": "Write a Python program to replace all occurrences of a given string with an alternate string.", + "code_snippet": "def replace_string(input_string, target_string, replacement_string):\n return input_string.replace(target_string, replacement_string)\n\nprint(replace_string(\"Hello World!\", \"World\", \"Python\"))" + }, + { + "comment": "Generate a Python class for an online store item that includes fields for ID, name, price, and description.", + "code_snippet": "class StoreItem:\n def __init__(self, item_id, name, price, description):\n self.item_id = item_id\n self.name = name\n self.price = price\n self.description = description\n\n def __str__(self):\n return f'{self.name}, ${self.price}'\n\n def to_dict(self):\n return {\n 'item_id': self.item_id,\n 'name': self.name,\n 'price': self.price,\n 'description': self.description\n }" + }, + { + "comment": "Create a virtual assistant using Python and Dialogflow to answer a basic set of questions.", + "code_snippet": "import dialogflow_v2 as dialogflow\nimport requests\n\nproject_id = 'project-id'\nsession_client = dialogflow.SessionsClient()\nsession = session_client.session_path(project_id, 'session-id')\n\nwhile True:\n text = input('User: ')\n text_input = dialogflow.types.TextInput(text=text, language_code='en-US')\n query_input = dialogflow.types.QueryInput(text=text_input)\n response = session_client.detect_intent(session=session, query_input=query_input)\n\n print('Assistant:', response.query_result.fulfillment_text)" + }, + { + "comment": "Create an algorithm in Python to solve \"Tower of Hanoi\" game of a 4 disk problem.", + "code_snippet": "def solveTowerOfHanoi(num_disks, start_rod = 'A', end_rod = 'C', aux_rod = 'B'): \n if num_disks == 1: \n print(\"Move disk 1 from rod\", start_rod, \"to rod\", end_rod) \n return\n solveTowerOfHanoi(num_disks - 1, start_rod, aux_rod, end_rod) \n print(\"Move disk\", num_disks, \"from rod\", start_rod, \"to rod\", end_rod) \n solveTowerOfHanoi(num_disks - 1, aux_rod, end_rod, start_rod) \n \n \n# Driver code \nnum_disks = 4\nsolveTowerOfHanoi(num_disks)" + }, + { + "comment": "Generate an api response in Python for the provided data.", + "code_snippet": "response = {\n \"status\": 200,\n \"data\": {\"name\": \"John\",\"age\":28},\n \"message\": \"Success\"\n}" + }, + { + "comment": "Create a webscraper using Python\u2019s Selenium that retrieves data from an online store.", + "code_snippet": "from selenium import webdriver\n\n# create a new Firefox session\ndriver = webdriver.Firefox()\ndriver.implicitly_wait(30)\ndriver.maximize_window()\n\n# navigate to the application home page\ndriver.get(\"https://www.example.com/\")\n\n# get the search textbox\nsearch_field = driver.find_element_by_name(\"q\")\nsearch_field.clear()\n\n# enter search keyword and submit\nsearch_field.send_keys(\"shoes\")\nsearch_field.submit()\n\n# get the list of elements which are displayed after the search\n# currently on result page using find_elements_by_class_name\nproduct_list = driver.find_elements_by_class_name(\"product\")\n\n# iterate through each element and print the text that is\n# name of the product\nfor product in product_list:\n print(product.text)\n\n# close the browser window\ndriver.quit()" + }, + { + "comment": "Develop a web scraper with Python BeautifulSoup to scrape data from an online web store.", + "code_snippet": "import requests\nfrom bs4 import BeautifulSoup\n \n# Make a GET request to fetch the raw HTML content\nhtml_content = requests.get('http://web-store.com').text\n \n# Parse the html content\nsoup = BeautifulSoup(html_content, \"lxml\")\n \n# Get the product data\nproducts = soup.find_all('div', attrs={\"itemprop\": \"product\"})\nfor product in products:\n name = product.find(\"span\", attrs={\"itemprop\": \"name\"}).text\n price = product.find(\"span\", attrs={\"itemprop\": \"price\"}).text\n description = product.find(\"span\", attrs={\"itemprop\": \"description\"}).text\n print(name, price, description)" + }, + { + "comment": "Implement a basic algorithm in Python to calculate the nth Fibonacci number.", + "code_snippet": "def fibonacci(n):\n if n == 0:\n return 0\n elif n == 1:\n return 1\n else:\n return fibonacci(n - 1) + fibonacci(n - 2)\n \nprint(fibonacci(6)) // 8" + }, + { + "comment": "Create a Python class that receives two strings and has methods for comparing the strings and returning whether they are equal, different, or similar up to a provided threshold.", + "code_snippet": "class StringComparator:\n\ndef __init__(self, string1, string2):\n self.string1 = string1\n self.string2 = string2\n\ndef is_equal(self):\n return self.string1 == self.string2\n\ndef is_different(self):\n return self.string1 != self.string2\n\ndef is_similar(self, threshold=0.5):\n distance = edit_distance(self.string1, self.string2)\n max_length = max(len(self.string1), len(self.string2))\n\n return distance / max_length < threshold" + }, + { + "comment": "Generate a program in Python to evaluate the accuracy of a machine-learning model.", + "code_snippet": "import numpy as np\nfrom sklearn.metrics import accuracy_score\n\nclf.fit(X_train, y_train)\ny_pred = clf.predict(X_test)\n\n# Calculating the accuracy\naccuracy = accuracy_score(y_test, y_pred)\n\nprint(\"Accuracy: \" + str(accuracy))" + }, + { + "comment": "Write a Python program to replace all occurrences of a character in a string with the provided replacement character.", + "code_snippet": "def replace_all_occurrences(str, char, replacement):\n return str.replace(char, replacement)\n\nprint(replace_all_occurrences(\"Hello World!\", 'l', 'X'))" + }, + { + "comment": "Create a python program to find the largest prime factor of a number.", + "code_snippet": "import math\n\ndef largest_prime_factor(n):\n\n# Separate the list of larger factors of the number into prime and composite numbers \n factors = []\n for i in range(2, int(math.sqrt(n)) + 1):\n if n % i == 0:\n factors.append(i)\n factors.append(int(n/i))\n# Find the largest prime factor in the list\n prime_factors = []\n for potential_factor in factors:\n is_prime = True\n for j in range(2,int(math.sqrt(potential_factor))+1):\n if potential_factor % j == 0 and potential_factor != j: \n is_prime = False\n if is_prime:\n prime_factors.append(potential_factor)\n\n# Return the largest prime factor\n return max(prime_factors)\n\nprint(largest_prime_factor(331))" + }, + { + "comment": "Write a Python program to check if an element exists within a given list of integers.", + "code_snippet": "def element_exists(elem, list_int):\n return elem in list_int" + }, + { + "comment": "Create a Python program that takes a sentence and converts it to Morse code.", + "code_snippet": "MORSE_CODE = {\n 'A': '.-', 'B': '-...',\n 'C': '-.-.', 'D': '-..',\n 'E': '.', 'F': '..-.',\n 'G': '--.', 'H': '....',\n 'I': '..', 'J': '.---',\n 'K': '-.-', 'L': '.-..',\n 'M': '--', 'N': '-.',\n 'O': '---', 'P': '.--.',\n 'Q': '--.-', 'R': '.-.',\n 'S': '...', 'T': '-',\n 'U': '..-', 'V': '...-',\n 'W': '.--', 'X': '-..-',\n 'Y': '-.--', 'Z': '--..',\n '0': '-----', '1': '.----',\n '2': '..---', '3': '...--',\n '4': '....-', '5': '.....',\n '6': '-....', '7': '--...',\n '8': '---..', '9': '----.',\n ' ': ' ', '.': '.-.-.-',\n ',': '--..--', '?': '..--..',\n '/': '-..-.', '-': '-....-',\n '(': '-.--.-', ')': '-.--.-'\n}\n\ndef encode(message):\n code = ''\n for letter in message:\n code += MORSE_CODE[letter.upper()] + ' '\n \n return code\n\nprint(encode(\"Hello world\"))\n# Output: .... . .-.. .-.. --- .-- --- .-. .-.. -.." + }, + { + "comment": "Generate a python program to sort a list of numbers", + "code_snippet": "def sort_list(array): \n n = len(array) \n \n for i in range(n): \n \n min_idx = i \n for j in range(i+1, n): \n if array[min_idx] > array[j]: \n min_idx = j \n array[i], array[min_idx] = array[min_idx], array[i]\n\nif __name__ == \"__main__\":\n array = [4, 2, 6, 7, 1]\n sort_list(array)\n print(array)" + }, + { + "comment": "Create a program in Python to remove all the occurrences of an item from a list.", + "code_snippet": "def removeItem(list, item):\n # loop through the list\n for i in list:\n # check if the element is the item to remove\n if i == item:\n # remove the item\n list.remove(i)\n # return the list\n return list\n\n#example\nlist = [1, 2, 3, 4, 2, 5, 2]\nresult = removeItem(list, 2)\n\nprint(result)\n# Output: [1, 3, 4, 5]" + }, + { + "comment": "Could you build a web scraper in Python that collects all the links from a website?", + "code_snippet": "# Python program to scrape a webpage\nimport requests as req \nfrom bs4 import BeautifulSoup \n \nURL = \"http://www.example.com/\"\n \n# GET request \nr = req.get(URL) \n \n# parse the downloaded homepage and grab all text\nsoup = BeautifulSoup(r.text, \"html.parser\") \n \n# find and print all links \nlinks = soup.find_all('a') \nfor link in links: \n print(link.get('href'))" + }, + { + "comment": "Generate a Python program to delete a given key from a dictionary.", + "code_snippet": "dictionary = {'foo': 1, 'bar': 2, 'baz': 3}\nkey = 'baz'\n\ndef delete_key(dic, k):\n if k in dic:\n del dic[k]\n\ndelete_key(dictionary, key)\n\nprint(dictionary)" + }, + { + "comment": "Analyze the following Python function to detect any potential errors.", + "code_snippet": "The function is attempting to modify the list while iterating over it. This can lead to unexpected behavior and should be avoided. To fix the code, the list should be copied before the iteration takes place: \n\ndef expand_list(list):\n list_copy = list[:] # make a copy of the list\n for item in list_copy:\n list *= 2" + }, + { + "comment": "Generate a Python program to reverse the order of words in a sentence but keep the order of the characters in each word the same.", + "code_snippet": "def reverse_words(string):\n words = string.split(\" \")\n reversed_words = []\n for word in words:\n reversed_words.insert(0, word)\n return ' '.join(reversed_words)\n\nstring = 'This is a sentence.'\nreverse_words = reverse_words(string)\nprint(reverse_words)" + }, + { + "comment": "Port a Java code snippet to Python 3.", + "code_snippet": "def foo(a, b):\n return a + b" + }, + { + "comment": "Generate a Python program that takes a list of strings as input and prints the strings in alphabetical order.", + "code_snippet": "strings = ['cat', 'dog', 'apple', 'banana']\n\nstrings.sort()\n\nfor string in strings:\n print(string)" + }, + { + "comment": "Build a Python program that extracts all email addresses from a given string.", + "code_snippet": "import re\n\ndef find_emails(text):\n regex = r\"([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+)\"\n emails = re.findall(regex, text)\n return emails\n\nemails = find_emails(\"This is an example with two emails: john@example.com, and jane@example.com\")\nprint(emails)" + }, + { + "comment": "Create a Python code to generate a random string of length 8 made of uppercase letters and numbers.", + "code_snippet": "import string\nimport random\n\nlength = 8\nchars = string.ascii_uppercase + string.digits\npassword = ''.join(random.choice(chars) for i in range(length))\n\nprint (password)" + }, + { + "comment": "This code calculates the percent of transcripts mapping to rRNA. To use it, you need to supply two inputs: an HTseq_counts file and an original reference transcriptome aligned to. To produce tables with rRNA and MT counts for each sample, run the command \"./rRNA_MT_count.py --gtf /path/to/GTF/file --htseq /path/to/HTseq_counts/file\". The script will extract all the identifiers of genes/transcripts mapping to the rRNA and MT genes and store them in two arrays. Then, it will count reads matching the rRNA identifiers and write the output files. The summary output file will be named \"HTseq_counts_file_rRNAmtRNACounts.txt\".", + "code_snippet": "#!/usr/bin/python\n\n# Malwina Prater, mn367@cam.ac.uk, 2017, Copyright\n# Centre for Trophoblast Research, University of Cambridge\n#\n# Script version: v01.\n#\n# Script to calculate the percent of transcripts mapping to rRNA\n#\n# INPUTS :\n# 1. HTseq_counts file\n# 2. Original reference transcriptome alignned to\n#\n# USAGE : \n# For producing table(s) with rRNA and MT counts for each sample use commands like that:\n#\n# ./rRNA_MT_count.py --gtf /Users/malwina/Documents/CTR-Data/genomes/Mus_musculus/mm10/Mus_musculus.GRCm38.84.gtf --htseq C17_3_S20_Aligned.out.srt.bam_htseq_combined_counts.txt\n#\n\n\n# import modules: \nimport os,sys\nfrom optparse import OptionParser\nimport re\n\n# parse in the user options:\n\nparser = OptionParser(usage=\"%prog [-x Excel [-i imagefile] [-s squares]\",\n version=\"%prog 0.1\")\n\nparser.add_option(\"--htseq\", dest=\"FileName\", type=\"string\", action=\"store\")\nparser.add_option(\"--gtf\", dest=\"GTF\", type=\"string\", action=\"store\")\n\n(options, args) = parser.parse_args()\n\n\n#files = sys.argv[]\nHTSEQ_COUNTS = options.FileName\nGTF = options.GTF\n\n\n# check if files supplied exist:\ntry:\n handle = open(GTF, \"rU\")\n handle.close()\nexcept:\n print \"\\nError->\\tGTF File: %s does not exist\\n\" % GTF\n sys.exit()\n\ntry:\n handle = open(HTSEQ_COUNTS, \"rU\")\n handle.close()\nexcept:\n print \"\\nError->\\tFile: %s does not exist\\n\" % HTSEQ_COUNTS\n sys.exit()\n\n\n#\n# First job is to extract all the identifiers of genes/transcripts mapping to the rRNA and MT genes and store in 2 arrays\n#\n\nrRNA_identifiers = {}\nMT_identifiers = {}\n\n\nwith open(GTF, \"rU\") as handle:\n #line = handle.readline()\n for line in handle:\n \tline.rstrip('\\n')\n \tif 'gene_biotype \"rRNA\"' in line:\n identifier = line\n identifier = re.sub('.*gene_id \"', '', identifier)\n identifier = re.sub('\"; gene_version.*\\n', '', identifier)\n rRNA_identifiers[identifier] = 1\n if 'MT' in line:\n identifier = line\n identifier = re.sub('.*gene_id \"', '', identifier)\n identifier = re.sub('\"; gene_version.*\\n', '', identifier)\n MT_identifiers[identifier] = 1 \nhandle.close() \n\n#print(\"rRNA:\")\n#print(rRNA_identifiers.keys())\n#print(\"MT:\")\n#print(MT_identifiers.keys())\n\n\n#\n# Second job is to go through the HTSEQ-couts and count reads matching the rRNA identifiers\n#\nCummulative_rRNA_Count = 0\nrRNA_genes = 0\nReadCount = 0\nline_number = 0\nMT_genes = 0;\nCummulative_MT_Count = 0;\n\nwith open(HTSEQ_COUNTS, \"rU\") as handle:\n for line in handle:\n \tline.rstrip('\\n') \n\n split_line = line.split(\"\\t\")\n if line_number > 0:\n \t if split_line[0] in rRNA_identifiers.keys(): # if rRNA_identifiers[gene_id]\n rRNA_genes += 1\n Cummulative_rRNA_Count += int(split_line[1])\n if split_line[0] in MT_identifiers.keys():\n MT_genes += 1\n Cummulative_MT_Count += int(split_line[1])\n ReadCount += int(split_line[1])\n line_number += 1\nhandle.close() \n#print(Cummulative_MT_Count)\n#print(Cummulative_rRNA_Count)\n\n\n#\n# wiritng the output files:\n# \nout = HTSEQ_COUNTS + '_rRNAmtRNACounts.txt'; \nout = re.sub('.txt_', '_', out)\n\nprint \"Summary output file:\t\t\", out, \"\\n\"\n\nOUT = open(out, \"w\")\nOUT.write('HT-SEQ file name: \\t' + HTSEQ_COUNTS + '\\n\\n')\nOUT.write('GTF file name: \\t\\t' + GTF + '\\n\\n\\n')\nOUT.write('---------------------------------------------------------------------------------' + '\\n')\nOUT.write(' rRNA and MT identifiers\\n')\nOUT.write('---------------------------------------------------------------------------------' + '\\n')\nOUT.write('No. of rRNA identifiers: ' + str(len(rRNA_identifiers.keys())) + '\\n') # PRINT size of this hash\nOUT.write('No. of MT identifiers: ' + str(len(MT_identifiers.keys())) + '\\n') # PRINT size of this hash\nOUT.write('\\n\\n')\nOUT.write('---------------------------------------------------------------------------------' + '\\n')\nOUT.write(' HTSEQ mapping summary\\n')\nOUT.write('---------------------------------------------------------------------------------' + '\\n')\nOUT.write('ReadCount: ' + str(ReadCount) + '\\n\\n')\n#OUT.write(' Number of rRNA genes: ' + str(rRNA_genes) + '\\n')\nOUT.write('Total no. of rRNA transcripts: ' + str(Cummulative_rRNA_Count) + '\\n')\nperc_rRNA = 100*float(Cummulative_rRNA_Count)/float(ReadCount)\nperc_rRNA = str(round(perc_rRNA, 3))\nOUT.write('Percent rRNA mapped reads: ' + str(Cummulative_rRNA_Count) + ' / ' + str(ReadCount) + ' * 100 = ' + perc_rRNA + '%\\n\\n')\n#OUT.write('\\n Number of MT genes: ' + str(MT_genes) + '\\n')\nOUT.write('Total no. of MT transcripts: ' + str(Cummulative_MT_Count) + '\\n')\nperc_MT = 100*float(Cummulative_MT_Count)/float(ReadCount)\nperc_MT = str(round(perc_MT, 3))\nOUT.write('Percent MT mapped reads: ' + str(Cummulative_MT_Count) + ' / ' + str(ReadCount) + ' * 100 = ' + perc_MT + '%\\n\\n')\nOUT.close()\n\n\n" + }, + { + "comment": "Modify the following Python code to raise an exception if the input value is not an integer", + "code_snippet": "def square_root(x):\n if not isinstance(x, int):\n raise TypeError('Input must be an integer')\n return x**0.5" + }, + { + "comment": "Create a program in Python that extracts titles of all YouTube videos from a URL.", + "code_snippet": "import requests\nimport re\n\nurl = \"https://www.youtube.com/user/Thexvid/videos\"\n\nr = requests.get(url)\ntitles = re.findall('
(.+?)<\\/a>',r.content.decode('utf-8'))\n\nfor title in titles:\n print(title[1])" + }, + { + "comment": "Write Python code to list the contents of a directory.", + "code_snippet": "# get the list of contents\nimport os\ndirectory_contents = os.listdir()\n\n# print the contents\nfor content in directory_contents:\n print(content)" + }, + { + "comment": "Create an AI-powered Python script to optimize any given code.", + "code_snippet": "# Import the required libraries\nfrom dataclasses import dataclass\n\n@dataclass\nclass Params:\n a: int\n b: int\n c: int\n\ndef get_result(params: Params) -> int:\n \"\"\"Returns the sum of the three given numbers\"\"\"\n return params.a + params.b + params.c\n\n# Optimize the code\ndef optimize(fn, params):\n best_score = 0\n best_params = None\n for a in range(params.a - 10, params.a + 10):\n for b in range(params.b - 10, params.b + 10):\n for c in range(params.c - 10, params.c + 10):\n score = fn(Params(a, b , c))\n if score > best_score:\n best_score = score\n best_params = {\n 'a': a,\n 'b': b,\n 'c': c\n }\n return best_params\n\nif __name__ == '__main__':\n # Initialize the parameters\n params = Params(a=1, b=2, c=3)\n # Get the optimized params\n best_params = optimize(get_result, params)\n # Print the optimized result\n print(\"Optimized result: %d\" % get_result(Params(best_params['a'], best_params['b'], best_params['c'])))" + }, + { + "comment": "Create a Python function that takes two strings and returns true if the first string is a subsequence of the second.", + "code_snippet": "def is_subsequence(str1, str2):\n i = 0\n j = 0\n\n while(i < len(str1) and j < len(str2)):\n if str1[i] == str2[j]:\n i += 1\n j += 1\n\n return i == len(str1)" + }, + { + "comment": "Create a neural network class in Python to model a linear regression function.", + "code_snippet": "import numpy as np\nclass LinearRegressionModel:\n def __init__(self, input_dim, output_dim):\n ''' Initialises the weights and bias of the linear regression model\n Arguments:\n input_dim {int} -- Number of input features\n output_dim {int} -- Number of outputs\n '''\n self.weights = np.zeros((input_dim, output_dim))\n self.bias = np.zeros((1, output_dim))\n\n def forward(self, x):\n ''' Calculates the forward pass of the linear regression model\n Arguments:\n x {numpy array} -- Input data of size (N, input_dim)\n Returns:\n out {numpy array} -- Output of the linear regression model of size (N, output_dim)\n '''\n out = np.dot(x, self.weights) + self.bias\n return out" + }, + { + "comment": "Develop a ML model in Python for predicting the winning team of football matches. Use data from the past 5 years of the Premier League.", + "code_snippet": "import pandas as pd\nimport numpy as np\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.ensemble import GradientBoostingClassifier\n\n# Load data\ndata = pd.read_csv('data.csv')\n\n# Select features\nfeatures = data[['home_team_goals', 'away_team_goals', 'home_team_possession', 'away_team_possession',\n 'home_team_shots', 'away_team_shots', 'home_team_yellow_cards', 'away_team_yellow_cards',\n 'home_team_red_cards', 'away_team_red_cards']]\n\n# Select target\ntarget = data['winner']\n\n# Split data into training and test sets\nX_train, X_test, y_train, y_test = train_test_split(features, target, test_size=0.2, random_state=42)\n\n# Train the model\ngbm = GradientBoostingClassifier()\ngbm.fit(X_train, y_train)\n\n# Make predictions\ny_pred = gbm.predict(X_test)\n\n# Evaluate the model\nscore = gbm.score(X_test, y_test)\nprint(f'Model score: {score}')" + }, + { + "comment": "Create a program in Python that evaluates a postfix expression. The input to the program should be a string with the postfix expression. The output should be the evaluated value of the expression.", + "code_snippet": "def evaluate(expression): \n \n # split expression into list \n expression = expression.split() \n \n # stack to store integer values. \n stack = [] \n \n # do for every element of expression. \n for element in expression: \n \n # If element is an operand push \n # into stack it's a number only \n if element.isdigit(): \n stack.append(element) \n \n # if element is an operator, \n # pop two elements from stack \n # perform respective operations \n else: \n val1 = stack.pop() \n val2 = stack.pop() \n stack.append(str(eval(val2 + element + val1))) \n \n # return the value \n return (int(stack[0])) \n \n# Driver Code \nexpression = \"2 3 + 4 5 * *\"\n \nprint(evaluate(expression)) \n\nOutput: 46" + }, + { + "comment": "Write a Python script to identify the words that contain more than one vowel in a given sentence.", + "code_snippet": "import re\n\nsentence = \"The quick brown fox jumped over the lazy dog.\"\npattern = r\"\\b(\\w*[aeiou]\\w*){2,}\\b\"\n\nmatch = re.findall(pattern, sentence)\nprint(match)\n\n# Output: ['quick', 'brown', 'jumped', 'over', 'lazy']" + }, + { + "comment": "This code provides a Python API for KB SRU. To use it, you can create an instance of the \"sru\" class and call its \"search\" method, passing in a query string and optionally a collection name, start record number, maximum number of records to return, and record schema. The method will return a \"response\" object containing the results of the search. You can then use the various properties of the \"response\" object to extract specific information from the search results, such as titles, creators, and subjects.", + "code_snippet": "#! /usr/bin/env python\n\"\"\"\nPython API for KB SRU\n\"\"\"\n\nimport sys\nimport urllib\nimport requests\nfrom lxml import etree\n\nSRU_BASEURL = 'http://jsru.kb.nl/sru/sru'\nSRU_BASEURL += '?version=1.2&maximumRecords=%i'\nSRU_BASEURL += '&operation=searchRetrieve'\nSRU_BASEURL += '&startRecord=%i'\nSRU_BASEURL += '&recordSchema=%s'\nSRU_BASEURL += '&x-collection=%s&query=%s'\n\nSETS = {'ANP': {'collection': 'ANP',\n 'description_en': 'Radio Bulletins ANP Press Agency',\n 'description_nl': 'ANP Radiobulletins Digitaal',\n 'metadataPrefix': 'didl',\n 'recordschema': 'dcx',\n 'setname': 'anp',\n 'time_period': [1937, 1989]},\n 'DPO': {'collection': 'DPO_boekdeel',\n 'description_en': 'Early Dutch Books Online',\n 'description_nl': 'Early Dutch Books Online',\n 'metadataPrefix': 'didl',\n 'recordschema': 'ddd',\n 'setname': 'DPO',\n 'time_period': [1781, 1800]},\n 'BYVANCK': {'description_en': 'Medieval Illuminated Manuscripts',\n 'description_nl': 'Middeleeuwse Verluchte Handschriften',\n 'metadataPrefix': 'dcx',\n 'setname': 'BYVANCK',\n 'time_period': [500, 1500]},\n 'SGD': {'description_en': 'States General Digital',\n 'description_nl': 'Staten-Generaal Digitaal',\n 'metadataPrefix': 'dcx',\n 'setname': 'sgd:register',\n 'time_period': [1962, 1994]},\n 'GGC': {'collection': 'GGC',\n 'description_en': 'General Catalogue KB',\n 'description_nl': 'Algemene Catalogus KB',\n 'metadataPrefix': 'dcx',\n 'recordschema': 'dcx',\n 'setname': 'ggc',\n 'time_period': [1937, 2021]}} # No idea what to use here?\n\n# Name spaces in GGC records\n\nsrw_ns = 'http://www.loc.gov/zing/srw/'\ntel_ns = 'http://krait.kb.nl/coop/tel/handbook/telterms.html'\nxsi_ns = 'http://www.w3.org/2001/XMLSchema-instance'\ndc_ns = 'http://purl.org/dc/elements/1.1/'\ndcterms_ns = 'http://purl.org/dc/terms/'\ndcx_ns = 'http://krait.kb.nl/coop/tel/handbook/telterms.html'\n\nNSMAPGGC = {\"srw\": srw_ns,\n \"tel\": tel_ns,\n \"xsi\": xsi_ns,\n \"dc\": dc_ns,\n \"dcterms\": dcterms_ns,\n \"dcx\": dcx_ns}\n\n\nclass response():\n def __init__(self, record_data, sru):\n self.record_data = record_data\n self.sru = sru\n\n def getElementText(self, tagName, attributeName, attributeValue):\n # Returns text content of all elements for which tag matches tagName,\n # and attribute value equals attributeValue. Set attributeName to empty\n # string to get all tagName matches.\n textFields = []\n for r in self.record_data.iter():\n if r.tag == tagName:\n if attributeName != '':\n try:\n if r.attrib[attributeName] == attributeValue:\n textFields.append(r.text)\n except KeyError:\n pass\n else:\n textFields.append(r.text)\n return textFields\n\n @property\n def records(self):\n if self.sru.nr_of_records == 0:\n record_data = \"\"\n else:\n ns = {'zs': 'http://www.loc.gov/zing/srw/'}\n record_data = self.record_data.xpath(\"zs:records/zs:record\",\n namespaces=ns)[0]\n return record(record_data, self.sru)\n\n # Below property functions all return a list with all instances that satisfy\n # criteria\n\n @property\n def typesDutch(self):\n return(self.getElementText('{http://purl.org/dc/elements/1.1/}type',\n '{http://www.w3.org/XML/1998/namespace}lang',\n 'nl'))\n\n @property\n def typesDCMI(self):\n return(self.getElementText('{http://purl.org/dc/elements/1.1/}type',\n '{http://www.w3.org/2001/XMLSchema-instance}type',\n 'DCMIType'))\n\n @property\n def identifiersISBN(self):\n return(self.getElementText('{http://purl.org/dc/elements/1.1/}identifier',\n '{http://www.w3.org/2001/XMLSchema-instance}type',\n 'dcterms:ISBN'))\n\n @property\n def identifiersBrinkman(self):\n return(self.getElementText('{http://purl.org/dc/elements/1.1/}identifier',\n '{http://www.w3.org/2001/XMLSchema-instance}type',\n 'dcx:Brinkman'))\n\n @property\n def identifiersURI(self):\n return(self.getElementText('{http://purl.org/dc/elements/1.1/}identifier',\n '{http://www.w3.org/2001/XMLSchema-instance}type',\n 'dcterms:URI'))\n\n @property\n def identifiersOCLC(self):\n return(self.getElementText('{http://purl.org/dc/elements/1.1/}identifier',\n '{http://www.w3.org/2001/XMLSchema-instance}type',\n 'OCLC'))\n\n @property\n def languagesDutch(self):\n return(self.getElementText('{http://purl.org/dc/elements/1.1/}language',\n '{http://www.w3.org/XML/1998/namespace}lang',\n 'nl'))\n\n @property\n def languagesEnglish(self):\n return(self.getElementText('{http://purl.org/dc/elements/1.1/}language',\n '{http://www.w3.org/XML/1998/namespace}lang',\n 'en'))\n\n @property\n def languagesFrench(self):\n return(self.getElementText('{http://purl.org/dc/elements/1.1/}language',\n '{http://www.w3.org/XML/1998/namespace}lang',\n 'fr'))\n\n @property\n def languagesISO639(self):\n return(self.getElementText('{http://purl.org/dc/elements/1.1/}language',\n '{http://www.w3.org/2001/XMLSchema-instance}type',\n 'dcterms:ISO639-2'))\n\n @property\n def dates(self):\n return(self.getElementText('{http://purl.org/dc/elements/1.1/}date',\n '',\n ''))\n\n @property\n def extents(self):\n return(self.getElementText('{http://purl.org/dc/terms/}extent',\n '',\n ''))\n\n @property\n def creators(self):\n return(self.getElementText('{http://purl.org/dc/elements/1.1/}creator',\n '',\n ''))\n\n @property\n def contributors(self):\n return(self.getElementText('{http://purl.org/dc/elements/1.1/}contributor',\n '',\n ''))\n\n @property\n def titles(self):\n return(self.getElementText('{http://purl.org/dc/elements/1.1/}title',\n '',\n ''))\n\n @property\n def titlesMain(self):\n return(self.getElementText('{http://purl.org/dc/elements/1.1/}title',\n '{http://www.w3.org/2001/XMLSchema-instance}type',\n 'dcx:maintitle'))\n\n @property\n def titlesIntermediate(self):\n return(self.getElementText('{http://purl.org/dc/elements/1.1/}title',\n '{http://www.w3.org/2001/XMLSchema-instance}type',\n 'dcx:intermediatetitle'))\n\n @property\n def publishers(self):\n return(self.getElementText('{http://purl.org/dc/elements/1.1/}publisher',\n '',\n ''))\n\n @property\n def countries(self):\n return(self.getElementText('{http://purl.org/dc/elements/1.1/}country',\n '',\n ''))\n\n @property\n def subjectsBrinkman(self):\n return(self.getElementText('{http://purl.org/dc/elements/1.1/}subject',\n '{http://www.w3.org/2001/XMLSchema-instance}type',\n 'dcx:Brinkman'))\n\n @property\n def subjectsISO9707(self):\n return(self.getElementText('{http://purl.org/dc/elements/1.1/}subject',\n '{http://www.w3.org/2001/XMLSchema-instance}type',\n 'ISO_9707_[Brinkman]'))\n\n @property\n def subjectsUNESCO(self):\n return(self.getElementText('{http://purl.org/dc/elements/1.1/}subject',\n '{http://www.w3.org/2001/XMLSchema-instance}type',\n 'UNESCO'))\n\n @property\n def collectionIdentifiers(self):\n return(self.getElementText('{http://purl.org/dc/terms/}isPartOf',\n '{http://www.w3.org/2001/XMLSchema-instance}type',\n 'dcx:collectionIdentifier'))\n\n @property\n def recordIdentifiersURI(self):\n return(self.getElementText('{http://krait.kb.nl/coop/tel/handbook/telterms.html}recordIdentifier',\n '{http://www.w3.org/2001/XMLSchema-instance}type',\n 'dcterms:URI'))\n\n @property\n def annotations(self):\n # Note that annotations sometimes contain language or itenID attibutes;\n # ignored for now (collect everything).\n return(self.getElementText('{http://krait.kb.nl/coop/tel/handbook/telterms.html}annotation',\n '',\n ''))\n\n\nclass record():\n def __init__(self, record_data, sru):\n self.record_data = record_data\n self.sru = sru\n\n def __iter__(self):\n return self\n\n # This works under Python 2.7\n def next(self):\n if self.sru.nr_of_records == 0:\n raise StopIteration\n if self.sru.startrecord < self.sru.nr_of_records + 1:\n record_data = self.sru.run_query()\n self.sru.startrecord += 1\n return response(record_data, self.sru)\n else:\n raise StopIteration\n\n # This works under Python 3\n def __next__(self):\n if self.sru.nr_of_records == 0:\n raise StopIteration\n if self.sru.startrecord < self.sru.nr_of_records + 1:\n record_data = self.sru.run_query()\n self.sru.startrecord += 1\n return response(record_data, self.sru)\n else:\n raise StopIteration\n\n\nclass sru():\n DEBUG = False\n\n collection = False\n maximumrecords = 50\n nr_of_records = 0\n query = \"\"\n recordschema = False\n sru_collections = SETS\n startrecord = 0\n\n def search(self, query, collection=False,\n startrecord=1, maximumrecords=1, recordschema=False):\n\n self.maximumrecords = maximumrecords\n if sys.version.startswith('3'):\n self.query = urllib.parse.quote_plus(query)\n elif sys.version.startswith('2'):\n self.query = urllib.quote_plus(query)\n self.startrecord = startrecord\n\n if collection not in self.sru_collections:\n raise Exception('Unknown collection')\n\n self.collection = self.sru_collections[collection]['collection']\n\n if not self.collection:\n raise Exception('Error, no collection specified')\n\n if not recordschema:\n self.recordschema = self.sru_collections[collection]['recordschema']\n else:\n self.recordschema = recordschema\n\n record_data = self.run_query()\n\n nr_of_records = [i.text for i in record_data.iter() if\n i.tag.endswith('numberOfRecords')][0]\n\n self.nr_of_records = int(nr_of_records)\n\n if self.nr_of_records > 0:\n return response(record_data, self)\n\n return False\n\n def run_query(self):\n url = SRU_BASEURL % (self.maximumrecords, self.startrecord,\n self.recordschema, self.collection, self.query)\n if self.DEBUG:\n sys.stdout.write(url)\n\n r = requests.get(url)\n\n if not r.status_code == 200:\n raise Exception('Error while getting data from %s' % url)\n\n record_data = etree.fromstring(r.content)\n\n return record_data\n" + }, + { + "comment": "Using numpy, create a Python code which would return an array with the running total of numbers in a given list.", + "code_snippet": "import numpy as np\n\ndef runningTotal(arr):\n return np.cumsum(arr)" + }, + { + "comment": "Construct a neural network in Python that can perform basic regression.", + "code_snippet": "import numpy as np\nimport pandas as pd\nfrom sklearn.model_selection import train_test_split\nfrom keras.models import Sequential\nfrom keras.layers import Dense\n \n# Load the data\ndata = pd.read_csv('data.csv')\n \n# Split the data into features and labels\nX = data.drop(['label'], axis=1).values\ny = data['label'].values\n \n# Split the data into training and testing sets\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n \n# Create the neural network\nmodel = Sequential()\nmodel.add(Dense(12, input_dim=X.shape[1], kernel_initializer='normal', activation='relu'))\nmodel.add(Dense(12, kernel_initializer='normal', activation='relu'))\nmodel.add(Dense(1, kernel_initializer='normal'))\n \n# Compile the model\nmodel.compile(loss='mean_squared_error', optimizer='adam')\n \n# Train the model\nmodel.fit(X_train, y_train, epochs=100, batch_size=20, verbose=0)\n \n# Evaluate the model\nscore = model.evaluate(X_test, y_test, verbose=0)\nprint('Test score:', score)" + }, + { + "comment": "Generate a program in Python to take in two strings as input, and output a list of all thewords in both strings.", + "code_snippet": "def string_to_list(s1, s2):\n s1_list = s1.split()\n s2_list = s2.split()\n output_list = s1_list + s2_list\n return output_list\n\nwords = string_to_list(\"I want to make a difference\", \"The journey to success is long\")\nprint(words)" + }, + { + "comment": "Create a web scraper using Python that retrieves the 10 most recent articles from a news website.", + "code_snippet": "import requests \nfrom bs4 import BeautifulSoup \n \n# URL to scrap \nURL = 'http://example.com/news'\n \n# get the source code \nhtml_content = requests.get(URL).text \n \n# parse the html content \nsoup = BeautifulSoup(html_content, \"lxml\") \n \n# get all the articles \narticles = soup.find_all('article') \n \n# print the first 10 articles \nfor article in articles[:10]: \n print(article.text)" + }, + { + "comment": "Create a Python program to convert HTML to plain text without using any libraries.", + "code_snippet": "def html_to_text(html_string):\n output = ''\n in_tag = False\n for char in html_string:\n if char == '<':\n in_tag = True\n elif char == '>':\n in_tag = False\n elif in_tag == False:\n output += char\n return output" + }, + { + "comment": "Write a python program to convert the given temperature from Celsius to Fahrenheit.", + "code_snippet": "\"\"\"\nConvert the given temperature from Celsius to Fahrenheit\n\"\"\"\n\ndef celsius_to_fahrenheit(celsius):\n fahrenheit = (celsius * 9/5) + 32\n return fahrenheit\n\nif __name__ == '__main__':\n celsius = 0\n print(celsius_to_fahrenheit(celsius))" + }, + { + "comment": "Create a lambda expression in Python to filter a list of integer greater than 50.", + "code_snippet": "list1 = [45, 12, 52, 89, 33, 99]\nfiltered_list = list(filter(lambda x: x > 50, list1))\n\nprint(filtered_list)" + }, + { + "comment": "Create a Python program to evaluate and compare the performance of two different heuristics algorithms.", + "code_snippet": "import time\nimport heuristics_algorithm1\nimport heuristics_algorithm2\n\n#input data for algorithms\ndata1 = ...\ndata2 = ...\n\n#Evaluate and compare the performance of two different heuristics algorithms\nstart = time.time()\nresult1 = heuristics_algorithm1.run(data1)\nend = time.time()\ntime1 = end - start\n\nstart = time.time()\nresult2 = heuristics_algorithm2.run(data2)\nend = time.time()\ntime2 = end - start\n\nif time1 < time2:\n print(\"Algorithm 1 is faster than algorithm 2\")\nelif time2 < time1:\n print(\"Algorithm 2 is faster than algorithm 1\")\nelse:\n print(\"Both algorithms have the same performance time\")" + }, + { + "comment": "Generate a function in Python that takes in a dictionary (string \u2192 integer) and returns the sum of all values in the dictionary.", + "code_snippet": "def compute_dict_sum(input_dict):\n result = 0\n for val in input_dict.values():\n result += val\n return result\n\nprint(compute_dict_sum(my_dict))" + }, + { + "comment": "Write a Python script that filters a list of integers and returns only even numbers.", + "code_snippet": "def filter_even_numbers(lst):\n # Filter out even numbers from the given list \n even_numbers = [num for num in lst if num % 2 == 0]\n return even_numbers\n\nlist = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\nresult = filter_even_numbers(list)\nprint(result)" + }, + { + "comment": "Generate a Python program that takes a sentence as input and prints out only the verbs.", + "code_snippet": "import nltk\n\ndef extract_verbs(sentence):\n tokens = nltk.word_tokenize(sentence)\n tags = nltk.pos_tag(tokens)\n verbs = [word for word, pos in tags if pos.startswith('V')]\n return verbs\n\nsentence = \"The cat jumped over the moon.\"\nverbs = extract_verbs(sentence)\nprint(verbs)" + }, + { + "comment": "Create an AI-based system in Python for predicting stock market movements.", + "code_snippet": "#import libraries\nimport pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport seaborn as sns\n\n#import data\ndata = pd.read_csv('data.csv') \n\n#split data into train and test data\nX_train=data.iloc[:, 0] #Choosing the independent variable \ny_train=data.iloc[:, 1] #Choosing the dependent variable\nX_test=data.iloc[:, 0] #Choosing the independent variable \ny_test=data.iloc[:, 1] #Choosing the dependent variable\n\n#Build a deep learning model\n#import necessary libraries\nimport tensorflow as tf\nfrom tensorflow.keras.layers import Dense\nfrom tensorflow.keras.models import Sequential\n\n#create a model and add layers\nmodel = Sequential()\nmodel.add(Dense(64, input_shape=(1,), activation='relu'))\nmodel.add(Dense(128, activation='relu'))\nmodel.add(Dense(64, activation='relu'))\nmodel.add(Dense(1))\n\n#compile the model\nmodel.compile(optimizer='adam', loss='mse', metrics=['mse'])\n\n#train the model\nmodel.fit(X_train, y_train, batch_size=64, epochs=20, validation_data=(X_test, y_test))\n\n#Evaluate the model\nscore = model.evaluate(X_test, y_test, verbose=0)" + }, + { + "comment": "Develop an API in Python that fetches data from an SQL database and presents the data in the form of a JSON.", + "code_snippet": "import json \nimport sqlite3\nfrom flask import Flask, request, jsonify \n\napp = Flask(__name__) \n \ndef dict_factory(cursor, row):\n d = {}\n for idx, col in enumerate(cursor.description):\n d[col[0]] = row[idx]\n return d \n \n@app.route('/', methods=['GET'])\ndef index(): \n connection = sqlite3.connect('database.db')\n connection.row_factory = dict_factory\n cur = connection.cursor() \n all_users = cur.execute('SELECT * FROM users;').fetchall() \n return jsonify(all_users) \n \nif __name__ == '__main__': \n app.run(debug = True)" + }, + { + "comment": "Generate a Python dictionary that contains the count of the characters in a given string.", + "code_snippet": "def count_chars(string):\n count_dict = {}\n\n for char in string:\n if char in count_dict:\n count_dict[char] += 1\n else:\n count_dict[char] = 1\n\n return count_dict\n\nprint(count_chars(\"Hello World\"))\n\n# Output: {'H': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'W': 1, 'r': 1, 'd': 1}" + }, + { + "comment": "Write a Python program to store and querying user data.", + "code_snippet": "import json\n\nuser_data = {\"Name\": \"John\", \"Age\": 25, \"City\": \"New York\"}\n\ndef store_user_data(data):\n with open('user_data.json', 'w') as f:\n json.dump(data, f)\n\ndef get_user_data():\n with open('user_data.json') as f:\n return json.load(f)\n\n# store data in JSON file\nstore_user_data(user_data)\n\n# get data\ndata = get_user_data()\nprint(data)" + }, + { + "comment": "You are required to write a Python program to optimize an equation.", + "code_snippet": "def optimize_equation(equation):\n variables = []\n for term in equation.split('+'):\n var, count = term.strip().split(' ')\n variables.append((var, int(count)))\n\n new_equation = \"\"\n for var, count in variables:\n new_equation += (var + '^' + str(count)) + ' + '\n return new_equation[:-3]\n\nequation = 'x + x + y + y + y'\n\nprint(optimize_equation(equation))" + }, + { + "comment": "Generate Python code that takes a list of strings and generates a list of lists of words from the strings. The returned list should have the first word for each string followed by following words for each string.", + "code_snippet": "def get_word_lists(strings):\n word_lists = []\n for string in strings:\n words = string.split(\" \")\n word_list = []\n for i in range(len(words)):\n word_list.append(words[i:])\n word_lists.append(word_list)\n return word_lists\n\nword_lists = get_word_lists([\"Hello world\", \"This is a test\"])\nprint(word_lists) # prints \"[[\"Hello\", \"world\"], [\"This\", \"is\", \"a\", \"test\"]]\"" + }, + { + "comment": "Create a web scraper that extracts specific data from a given website.", + "code_snippet": "The web scraper should utilize the Python package BeautifulSoup to parse webpages and extract the required data. BeautifulSoup will allow us to find HTML elements on the webpage using tags and attributes. Once the data is found, it can be converted into the desired format and stored.\n\nFor example, to extract the URL from a list of webpages, the following code snippet can be used:\n\nimport requests\nfrom bs4 import BeautifulSoup\n\n# Get the web page\nwebpage = requests.get(\"\")\n\n# Parse the web page\nsoup = BeautifulSoup(webpage.content, 'html.parser')\n\n# Find all 'a' tags\nlinks = soup.find_all('a')\n\n# Extract the URLs in the 'href' attribute\nfor link in links:\n print(link.get('href'))" + }, + { + "comment": "Construct a script in Bash that can install a given software.", + "code_snippet": "#!/bin/bash\n\n# Download latest version of Python\ncurl -O https://www.python.org/ftp/python/3.8.5/Python-3.8.5.tgz\n\n# Extract the tgz file\ntar -xzf Python-3.8.5.tgz\n\n# Move into the Python directory\ncd Python-3.8.5\n\n# Run the configure script\n./configure\n\n# Compile and install\nmake\nmake install" + }, + { + "comment": "Write a function in Python that takes a list of integers and returns a new list containing only odd numbers.", + "code_snippet": "def odd_numbers_list(numbers):\n return [num for num in numbers if num % 2 != 0]" + }, + { + "comment": "Create a Python script that adds two numbers together and prints the result.", + "code_snippet": "def add(a, b):\n sum = a + b\n print(sum)\n\nadd(5,7)" + }, + { + "comment": "Design an algorithm in Python to find the most common elements in an array of integers.", + "code_snippet": "def most_common(nums):\n # Create a dictionary to store the counts\n counts = {}\n\n # Iterate over the elements\n for num in nums:\n # If the element is not present in the dictionary, add it\n if num not in counts:\n counts[num] = 0\n\n # Update the count\n counts[num] += 1\n\n # Get the maximum count\n max_count = max(counts.values())\n\n # Return the elements that have maximum count\n return [num for num, count in counts.items() if count == max_count]" + }, + { + "comment": "Write a Python program to find the maximum element in the given array [1, 10, 50, 3, 8].", + "code_snippet": "array = [1, 10, 50, 3, 8]\n\n# Get the maximum element\nmax_element = max(array)\n\nprint(max_element) # Output: 50" + }, + { + "comment": "Create a Python script to analyze the sentiment of a text.", + "code_snippet": "import re\nfrom nltk.stem.snowball import SnowballStemmer\nfrom nltk.tokenize import word_tokenize\nfrom nltk.corpus import stopwords\nfrom nltk.sentiment.vader import SentimentIntensityAnalyzer \n\ndef sentiment_analyzer(text):\n # Tokenize the text\n tokens = word_tokenize(text)\n\n # Create stemmer object\n stemmer = SnowballStemmer('english')\n\n # Stem each token\n stemmed_words = [stemmer.stem(word) for word in tokens]\n\n # Remove punctuation\n clean_words = [word for word in stemmed_words if re.match('[a-zA-Z-]+$', word)]\n\n # Remove stopwords\n meaningful_words = [word for word in clean_words if not word in stopwords.words('english')]\n\n # Create a SentimentIntensityAnalyzer object\n sid = SentimentIntensityAnalyzer()\n\n # Get the polarity score of the text\n polarity_score = sid.polarity_scores(' '.join(meaningful_words))\n\n return polarity_score" + }, + { + "comment": "Create a Python script that takes a list of email addresses as input and prints a filtered list of email addresses that belong to a particular domain.", + "code_snippet": "filtered_list = [email for email in list if email.endswith(\"@gmail.com\")]\n\nprint(filtered_list)\n# Output: [\"john@gmail.com\", \"sophie@gmail.com\"]" + }, + { + "comment": "Generate a Python function to execute a valid insertion sort on a given list of integers.", + "code_snippet": "def insertion_sort(arr):\n for i in range(1, len(arr)):\n key = arr[i]\n j = i -1\n while j >= 0 and key < arr[j] :\n arr[j + 1] = arr[j]\n j = j - 1\n arr[j + 1] = key\n\nreturn arr" + }, + { + "comment": "Generate a program to sort a list of numbers using Insertion Sort algorithm in Python.", + "code_snippet": "def insertionSort(arr):\n\tfor i in range(1, len(arr)):\n\t\tcurrent = arr[i]\n\t\tj =i-1\n\t\twhile j>=0 and arr[j]>current:\n\t\t\tarr[j+1] = arr[j]\n\t\t\tj-=1\n\t\tarr[j+1] = current\n\treturn arr\n\nif __name__ == '__main__':\n\tarr = [2, 4, 7, 3, 8, 6, 1]\n\tprint(insertionSort(arr))" + }, + { + "comment": "Create an Python function that takes a string containing a numerical expression and returns the result.", + "code_snippet": "def eval_expr(expr):\n return eval(expr)" + }, + { + "comment": "Given a json-formatted string, create a python program to parse it into a dict.", + "code_snippet": "import json\n\ndata = '{\"name\": \"John\",\"age\": 30,\"address\": {\"city\": \"New York\",\"state\": \"NY\"}}'\n\ndata_dict = json.loads(data)" + }, + { + "comment": "Create a Python program to compress a given string by replacing all repeating characters with a single instance and its count.", + "code_snippet": "def compress(s): \n # Initialize results \n output = \"\" \n \n # Initialize count \n count = 1\n \n # Traverse the string \n for i in range(len(s)): \n \n # If the current character is same \n # as next one, increment its count \n if (i+1 < len(s) and s[i] == s[i+1]): \n count += 1\n \n else: \n # Append the count and character \n outputo + = str(count) + s[i] \n \n # Reset the count \n count = 1\n \n # Append the last obtained characters \n # and their count \n output += str(count) + s[i] \n \n return output\n\ns = \"aabbbbbbcccc\"\nprint(compress(s))\n# Output: 2a6b4c" + }, + { + "comment": "Create a basic CRUD API for the BlogPost model with Python/Flask. The API should include endpoints for creating a post, getting all posts, getting a single post, editing a post, and deleting a post.", + "code_snippet": "from flask import Flask, jsonify, request\nfrom flask_sqlalchemy import SQLAlchemy\n\napp = Flask(__name__)\napp.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'\ndb = SQLAlchemy(app)\n\nclass BlogPost(db.Model):\n id = db.Column(db.Integer, primary_key=True)\n title = db.Column(db.String(200))\n content = db.Column(db.Text)\n\n def __repr__(self):\n return '' % self.title\n\n@app.route('/post', methods=['POST'])\ndef create_post():\n data = request.get_json()\n post = BlogPost(title=data['title'], content=data['content'])\n db.session.add(post)\n db.session.commit()\n return jsonify(post.id)\n\n@app.route('/posts', methods=['GET'])\ndef get_posts():\n posts = BlogPost.query.all()\n return jsonify([post.serialize() for post in posts])\n\n@app.route('/post/', methods=['GET'])\ndef get_post(id):\n post = BlogPost.query.filter_by(id=id).first()\n return jsonify(post.serialize())\n\n@app.route('/post/', methods=['PUT'])\ndef edit_post(id):\n data = request.get_json()\n post = BlogPost.query.filter_by(id=id).first()\n post.title = data['title']\n post.content = data['content']\n db.session.commit()\n return jsonify(post.serialize())\n\n@app.route('/post/', methods=['DELETE'])\ndef delete_post(id):\n post = BlogPost.query.filter_by(id=id).first()\n db.session.delete(post)\n db.session.commit()\n return jsonify({ 'message' : 'Post deleted' })\n\nif __name__ == '__main__':\n app.run(debug=True)" + }, + { + "comment": "Write a Python program that calculates the distance between two points on a two-dimensional plane.", + "code_snippet": "#include \n#include \n\nint main() \n{ \n int x1 = 3; \n int y1 = 4; \n\n int x2 = -9; \n int y2 = -2;\n\n float distance = sqrt(pow(x2 - x1, 2) + pow(y2 - y1, 2)); \n\n std::cout << \"Distance between the two points is: \" << distance << std::endl; \n\n return 0; \n}" + }, + { + "comment": "Create an AI-based chatbot in Python that can answer simple queries about a product or service.", + "code_snippet": "import random\n\n# The answers to the queries\nanswers = {\n 'What is XYZ?': 'XYZ is a company that provides XYZ services.',\n 'What does XYZ do?': 'XYZ helps customers find solutions to their problems.',\n 'Where is XYZ located?': 'XYZ is located in ABC city.',\n 'What are the benefits of using XYZ?': 'XYZ provides a quick and easy way to find solutions to your problems.'\n}\n\n# Generate a response\ndef generate_response(question):\n if question in answers:\n return answers[question]\n else:\n return random.choice(['I am not sure I understand.', 'Can you give me more information?', 'Can I help you with something else?'])\n\n# Start the conversation\nquestion = input('Welcome to XYZ. How can I help you? ')\nresponse = generate_response(question)\n\nwhile response != 'Goodbye':\n print(response)\n question = input('Is there anything else I can help you with? ')\n response = generate_response(question)\n\nprint('Goodbye!')" + }, + { + "comment": "Generate a python program to read the contents from a given URL", + "code_snippet": "import requests\n\ndef read_url(url):\n r = requests.get(url)\n if r.status_code == 200:\n return r.text\n else:\n return None" + }, + { + "comment": "Code a function in Python that takes a list of integers (denoted by `lst`) and returns a list of booleans where each element of the output list is `True` if the corresponding element in the input list is a prime number, and `False` otherwise.", + "code_snippet": "def is_prime(n):\n # check if n is divisible by any of the numbers\n # between 2 and n-1\n for i in range(2, n):\n if n % i== 0:\n return False\n\n return True \n\ndef check_lst(lst):\n # generate a list of booleans \n # where each element corresponds to the corresponding\n # element of lst\n result_lst = []\n for i in range(len(lst)):\n if is_prime(lst[i]):\n result_lst.append(True)\n else:\n result_lst.append(False)\n\n return result_lst\n\nlst = [7, 8, 12, 19, 22, 23]\nprint(check_lst(lst))\n\n# Output: \n# [True, False, False, True, False, True]" + }, + { + "comment": "Generate a program in Python to output the top 3 numbers from an array of integers", + "code_snippet": "def top_three(numbers):\n sorted_numbers = sorted(numbers, reverse=True)\n return sorted_numbers[:3]\n\nprint(top_three([7, 13, 5, 8, 50, 11, 64, 48]))" + }, + { + "comment": "Using Python, build a dictionary containing the numbers from 1 to n as the key and the square of each number as the value.", + "code_snippet": "my_dict = {}\n\nfor i in range(1,n+1):\n my_dict[i] = i**2\n\nprint(my_dict)" + }, + { + "comment": "Edit the following Python program to make a correct API request and parse the response.", + "code_snippet": "import requests\n\nurl = 'https://api.example.com/users'\n\nheaders = {\n 'Authorization': 'Bearer YOUR_API_TOKEN',\n 'Content-Type': 'application/json',\n}\n\nresponse = requests.get(url, headers=headers).json()\n\nfor user in response['data']:\n print(user)" + }, + { + "comment": "Create a Python program that takes in text input from the user and searches a given list of strings to find any matches.", + "code_snippet": "import re \n \n# input string \nstrings = [\"First\",\"Second\",\"Third\"]\n\n# Get the string \ninp_str = input(\"Please enter your string :\") \n\n# Initialize the flag \nfound = False\n \n# Search the string \nfor i in strings: \n if re.search(i, inp_str):\n found = True\n\n# Print result \nif found == True: \n print(\"String matches\") \nelse: \n print(\"String doesn't matches\")" + }, + { + "comment": "Generate a program in Python to convert all characters of a string in lowercase.", + "code_snippet": "def to_lower(string):\n return string.lower()" + }, + { + "comment": "Edit the following Python program to use a dictionary instead of a list.", + "code_snippet": "items = {1: 'one', 2: 'two', 3: 'three', 4: 'four'}\n\nfor key, value in items.items():\n print(value)" + }, + { + "comment": "Construct a prime number sieve in Python which returns a list of all primes up to a given number.", + "code_snippet": "def primeSieve(n): \n prime_list = [True for i in range(n+1)] \n p = 2\n while (p * p <= n): \n if (prime_list[p] == True): \n for i in range(p * 2, n+1, p): \n prime_list[i] = False\n p += 1\n primes=[] \n for p in range(2, n): \n if prime_list[p]: \n primes.append(p) \n return primes\n\nprint(primeSieve(10)) # [2, 3, 5, 7]" + }, + { + "comment": "Write a python code to print all prime numbers between 1 and a given number n.", + "code_snippet": "# Function to generate prime numbers between 1 and a given number n \ndef generate_prime_numbers(n): \n \n # Array for checking if a number is prime or not\n prime_list = [True for i in range(n + 1)] \n p = 2\n while (p * p <= n): \n \n # If prime_list[p] is not changed, then it is a prime \n if (prime_list[p] == True): \n \n # Update all multiples of p \n for i in range(p * 2, n + 1, p): \n prime_list[i] = False\n p += 1\n \n # Collecting prime numbers \n for p in range(2, n): \n if prime_list[p]: \n print(p)" + }, + { + "comment": "Find the optimal solution to solve a knapsack problem using dynamic programming.", + "code_snippet": "// A Naive recursive Python \n// program for 0-1 Knapsack problem \n \n# Returns the maximum value \n# that can be put in a knapsack of \n# capacity W \ndef knapSack(W, wt, val, n): \n \n # Base Case \n if n == 0 or W == 0 : \n return 0\n \n # If weight of the nth item is more \n # than Knapsack capacity W, then \n # this item cannot be included in the optimal solution \n if (wt[n-1] > W): \n return knapSack(W, wt, val, n-1) \n \n # return the maximum of two cases: \n # (1) nth item included \n # (2) not included \n else: \n return max(val[n-1] + knapSack(W-wt[n-1], wt, val, n-1), \n knapSack(W, wt, val, n-1)) \n \n# end of function knapSack" + }, + { + "comment": "Using Python, create a function that calculates the objective function of a linear equation.", + "code_snippet": "def linear_eq(a, b, c):\n return a*x + b*y - c\n\n# For example:\nresult = linear_eq(3, 5, 7)\nprint(result)" + }, + { + "comment": "Implement an insertion sort algorithm in Python.", + "code_snippet": "def insertion_sort(list):\n for i in range(1,len(list)):\n key = list[i]\n j = i - 1\n while j>=0 and key < list[j]:\n list[j+1] = list[j]\n j-=1\n list[j+1] = key\n return list" + }, + { + "comment": "Write a python program to generate a random password given a set of letters, numbers, and characters.", + "code_snippet": "import random \n \n \n# All the possible characters \n# that could go into the password \nstring = \"abcdefghijklmnopqrstuvwxyz01234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()?\"\n \n# Using the choice function of the \n# random module choose any \n# character randomly from the set of characters \npassword = \"\".join(random.sample(string, 8)) \nprint(password)" + }, + { + "comment": "Develop a Python module to generate random numbers.", + "code_snippet": "import random\n\ndef generate_random_numbers(length, min_value, max_value):\n return [random.uniform(min_value, max_value) for _ in range(length)]" + }, + { + "comment": "How do we use recursion to solve a given problem in Python?", + "code_snippet": "Recursion is a powerful technique for solving problems. It involves defining a problem in terms of itself. A recursion problem is solved by breaking it down into smaller problems, until the problem is small enough to be solved directly. The result from a smaller problem can then be combined with the result from the larger problem, until the original problem is solved. In Python, a recursive function is one that calls itself." + }, + { + "comment": "Create an application using Python and Flask to submit form data and store it in a database.", + "code_snippet": "from flask import Flask, render_template, request, redirect\nimport sqlite3\n\napp = Flask(__name__)\n\n@app.route('/')\ndef home():\n return render_template('index.html')\n\n@app.route('/submit', methods=['POST'])\ndef submit():\n name = request.form.get('name')\n email = request.form.get('email')\n phone = request.form.get('phone')\n \n conn = sqlite3.connect('data.db')\n cur = conn.cursor()\n \n cur.execute(\"INSERT INTO data (name, email, phone) VALUES (?, ?, ?)\", (name, email, phone))\n conn.commit()\n \n return redirect('/')\n\t\nif __name__ == '__main__':\n app.run(debug=True)" + }, + { + "comment": "Optimize a Python program that processes a 2d array and stores the transpose output in a new array.", + "code_snippet": "def transpose(A):\n n = len(A)\n m = len(A[0])\n\n B = [[0 for x in range(n)] for x in range(m)]\n\n for i in range(n):\n for j in range(m):\n B[j][i] = A[i][j]\n\n return B" + }, + { + "comment": "Generate a Python script that takes any number of integer arguments and returns their sum.", + "code_snippet": "def sum_ints(*args):\n total = 0\n for num in args:\n total += num\n \n return total\n\nprint(sum_ints(3, 5, 7))" + }, + { + "comment": "Create a function in Python which takes a list as input and returns the sum of the items in the list.", + "code_snippet": "def sum_list(input_list):\n sum = 0\n for i in input_list:\n sum += i\n return sum" + }, + { + "comment": "Create a Selenium script in Python to automate the login process in a given website.", + "code_snippet": "from selenium import webdriver\nfrom selenium.webdriver.common.keys import Keys\nimport time\n\n# Initialize web driver\ndriver = webdriver.Chrome()\n\n# Navigate to the target web page\ndriver.get('http://www.example.com')\n\n# Locate username field\nusername = driver.find_element_by_name('username')\n\n# Enter username\nusername.send_keys('username')\n\n# Locate password field\npassword = driver.find_element_by_name('password')\n\n# Enter password\npassword.send_keys('password')\n\n# Locate submit button\nsubmit_button = driver.find_element_by_name('submit')\n\n# Click submit button\nsubmit_button.click()\n\n# Wait for login process to complete\ntime.sleep(5)\n\n# Login successful\nprint('Login successful!')\n\ndriver.close()" + }, + { + "comment": "Create an AI model in Python to classify emails from the Enron Spam Dataset as either spam or non-spam.", + "code_snippet": "import pandas as pd\nfrom sklearn.feature_extraction.text import CountVectorizer\nfrom sklearn.model_selection import train_test_split\nfrom sklearn import svm\nfrom sklearn.metrics import precision_score\n\n# Load the dataset\ndf = pd.read_csv(\"spam.csv\", encoding='iso-8859-1')\n# Load label and data\nX = df['EmailText']\ny = df['Label']\n\n# Split data into train-test sets\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=42)\n\n# Create bag of words model\ncount_vectorizer = CountVectorizer()\nX_train_counts = count_vectorizer.fit_transform(X_train)\n\n# Train the model\nclf = svm.SVC(kernel='linear')\nclf.fit(X_train_counts, y_train)\n\n# Test the model\nX_test_counts = count_vectorizer.transform(X_test)\npredictions = clf.predict(X_test_counts)\nscore = precision_score(y_test, predictions, average='binary')\n\nprint('Precision score of the model:', score)" + }, + { + "comment": "Re-write the following SQL query in Python.", + "code_snippet": "import sqlite3\n\nconn = sqlite3.connect('movies.db') \ncursor = conn.cursor()\n\ncursor.execute(\"SELECT * FROM Movies WHERE category = 'horror'\")\n\nresult = cursor.fetchall()\nfor row in result:\n print(row)\n\nconn.close()" + }, + { + "comment": "Take two matrices, A and B, and produce a matrix C where each element is the product of the corresponding elements of A and B.", + "code_snippet": "# Python\ndef matrixMultiplication(A, B):\n if len(A[0]) != len(B):\n return \"Matrix multiplication not possible\"\n\n C = [[0 for i in range(len(A[0]))] for j in range(len(B[0]))]\n\n for i in range(len(A)):\n for j in range(len(B[0])):\n for k in range(len(B)):\n C[i][j] += A[i][k] * B[k][j]\n\n return C\n\nA = [[3, 4], \n [1, 2]]\nB = [[7, 5],\n [0, 1]]\nC = matrixMultiplication(A, B)\n\nprint(C) # Output = [[21, 17], [0, 2]]" + }, + { + "comment": "Come up with a correct approach to optimize the following python program.", + "code_snippet": "numbers = [1, 2, 3, 4, 5, 6]\n\nprint(*numbers, sep='\\n')" + }, + { + "comment": "Design a program in Python to detect the vowel in a given string.", + "code_snippet": "def vowelCheck(inputString): \n vowels = ['a','e','i','o','u','A','E','I','O','U'] \n for x in inputString: \n if x in vowels: \n return x" + }, + { + "comment": "Convert a given SQL statement into a Python Pandas DataFrame.", + "code_snippet": "import pandas as pd\n\ndf = pd.read_sql_query(\"SELECT * FROM book;\", conn)" + }, + { + "comment": "Using the data provided, generate a histogram in Python.", + "code_snippet": "import matplotlib.pyplot as plt\n\ndata = [3, 5, 7, 2, 8, 10, 11, 65, 72, 81, 99, 100, 150]\n\n# plotting the histogram \nplt.hist(data, bins = [0, 20, 40, 60, 80, 100, 120, 140, 160], edgecolor = 'black') \n \n# x-axis label \nplt.xlabel('Range of values') \n# y-axis label \nplt.ylabel('Number of Occurrences') \n# plot title \nplt.title('Histogram of data') \n \n# function to show the plot \nplt.show()" + }, + { + "comment": "Create a Python script to populate an array with random numbers from 1-100.", + "code_snippet": "import random\n\ndef populateArray(array_length):\n array = []\n for i in range(array_length):\n array.append(random.randint(1, 100))\n return array" + }, + { + "comment": "Create an natural language processing application in Python that extracts the top 10 most frequent words from a given text.", + "code_snippet": "from collections import Counter\n\ntext = \"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\"\n\n# Split the text into individual words\nwords = text.split()\n\n# Create a counter object\ncounter = Counter(words)\n\n# Get the top 10 most frequent words\ntop_words = counter.most_common(10)\n\nprint(top_words)\n\n# Output: [('dolor', 1), ('Lorem', 1), ('ipsum', 1), ('amet', 1), ('consectetur', 1), ('adipiscing', 1), ('elit,', 1), ('sed', 1), ('do', 1), ('eiusmod', 1)]" + }, + { + "comment": "Given an array of strings, write a Python function to remove all duplicates and return the resulting array.", + "code_snippet": "def removeDuplicates(arr):\n result = [] \n \n # traverse for all elements \n for i in arr: \n \n # check if exists in result \n if i not in result: \n result.append(i) \n \n # return result \n return result" + }, + { + "comment": "Generate a Python script to find the longest common substring in two strings.", + "code_snippet": "def longest_common_substring(str1, str2):\n match = 0\n substr = \"\"\n for i in range(len(str1)):\n for j in range(len(str2)):\n l = 0\n while (i + l < len(str1) and j + l < len(str2) and str1[i + l] == str2[j + l]):\n l += 1\n if l > match:\n substr = str1[i:i + l]\n match = l\n return substr\n\nresult = longest_common_substring(\"Helwallomst\", \"Welcome\")\nprint(result)" + }, + { + "comment": "Write a function in Python to search for a character in a given string.", + "code_snippet": "def serach_char(input_str, char):\n for char in input_str:\n if char == input_char:\n return True\n return False" + }, + { + "comment": "Write a python program to parse an XML document and return a list of tag objects.", + "code_snippet": "def parse_xml(text):\n tag_objects = []\n\n root = ET.fromstring(text)\n for child in root:\n tag = Tag(child.attrib[\"id\"])\n for subchild in child:\n tag.add_value(subchild.attrib[\"value\"])\n tag_objects.append(tag)\n\n return tag_objects\n\nclass Tag:\n def __init__(self, tag_id):\n self.tag_id = tag_id\n self.values = []\n \n def add_value(self, value):\n self.values.append(value)" + }, + { + "comment": "Based on a given input, create a function in Python to generate a random string of length 6.", + "code_snippet": "import random\nimport string\n\ndef random_string(length):\n letters = string.ascii_lowercase\n return ''.join(random.choice(letters) for i in range(length))\n\nrandom_string(6)" + }, + { + "comment": "Create a Python program to average the elements of a 2-dimensional array.", + "code_snippet": "def averageMatrix(matrix):\n sum = 0\n for row in matrix:\n for e in row:\n sum += e\n\n return sum / (len(matrix) * len(matrix[0]))\n\na = [[3,2,6],\n [8,5,9],\n [4,7,1]]\n\nprint(averageMatrix(a)) # 4.77" + }, + { + "comment": "Generate a code in Python to convert a number into binary format.", + "code_snippet": "\"\"\"\nGenerate a code in Python to convert a number into binary format\n\"\"\"\ndef convert_to_binary(num):\n # check if the number is 0, if so return 0\n if num == 0:\n return 0\n \n # initialize an empty binary string\n binary = ''\n \n # loop through the number and get the remainder \n # which is the bits of the binary\n while num != 0:\n remainder = num % 2\n binary = str(remainder) + binary\n num = num // 2\n \n return binary\n\n# test the function \nprint(convert_to_binary(10)) # 1010" + }, + { + "comment": "Generate a python program that takes an integer and then prints out the factorial of it?", + "code_snippet": "def factorial(num):\n if num <= 1:\n return 1\n else:\n return num * factorial(num - 1) \n\nn = int(input(\"Enter a number: \")) \nprint(\"Factorial of\",n,\"is\",factorial(n))" + }, + { + "comment": "Write a Python program to convert a positive integer to negative or vice versa using bitwise NOT operator.", + "code_snippet": "def convert_to_negative(x): \n return ~x + 1 \n \ndef convert_to_positive(x): \n return ~(x-1)" + }, + { + "comment": "Build a simple blockchain system in Python.", + "code_snippet": "import hashlib\nimport json\n\n# Define the Block class\nclass Block:\n def __init__(self, index, timestamp, data, previous_hash):\n self.index = index\n self.timestamp = timestamp\n self.data = data\n self.previous_hash = previous_hash\n self.hash = self.hash_block()\n\n # Create the hash of the block contents\n def hash_block(self):\n sha = hashlib.sha256()\n sha.update((str(self.index) + \n str(self.timestamp) + \n str(self.data) + \n str(self.previous_hash)).encode('utf-8'))\n return sha.hexdigest()\n\n# Create the blockchain\ndef create_blockchain():\n blockchain = [create_genesis_block()]\n previous_block = blockchain[0]\n\n # Add blocks for each item in the list of transactions\n for i in range(1, len(blockchain_transactions)):\n block_to_add = next_block(previous_block, blockchain_transactions[i])\n blockchain.append(block_to_add)\n previous_block = block_to_add\n\n# Print the blockchain\ndef print_blockchain():\n for block in blockchain:\n block_index = str(block.index)\n block_timestamp = str(block.timestamp)\n block_data = str(block.data)\n block_hash = block.hash" + }, + { + "comment": "Write a Python script to find the GCD of two numbers.", + "code_snippet": "def findGCD(a, b): \n if (b == 0): \n return a\n return findGCD(b, a % b)\n \na = 1000\nb = 500\nprint(\"GCD of number is: \", findGCD(a, b))" + }, + { + "comment": "Create a program in Python to find the number of occurrences of an element x in a list y.", + "code_snippet": "def count_x(x, y):\n count = 0\n for i in y:\n if i == x:\n count += 1\n return count" + }, + { + "comment": "Write a Python program to convert ratings in a list of strings to a float.", + "code_snippet": "def str_to_float(ratings):\n return [float(x) for x in ratings]" + }, + { + "comment": "Create a Python program that encrypts a message using a Caesar cipher.", + "code_snippet": "def caesar_encrypt(message, shift):\n encrypted_message = \"\"\n for c in message:\n encrypted_c = ord(c) + shift\n if encrypted_c > 126:\n encrypted_c -= 94\n encrypted_message += chr(encrypted_c)\n return encrypted_message" + }, + { + "comment": "Write a Python program to find the largest three numbers in a list.", + "code_snippet": "my_list = [1, 6, 3, 8, 7, 4]\nlargest_three = sorted(my_list)[-3:]\nprint(largest_three)" + }, + { + "comment": "Given two binary trees, check if the first tree is subtree of the second tree.", + "code_snippet": "# Python program to check if \n# a binary tree is subtree of another binary tree \n \n# A binary tree node \nclass Node: \n \n # Constructor to create a new node \n def __init__(self, data): \n self.data = data \n self.left = None\n self.right = None\n \ndef isSubTree(T, S): \n \n if S is None: \n return True\n \n if T is None: \n return False\n \n if areIdentical(T, S): \n return True\n \n return isSubTree(T.left, S) or isSubTree(T.right, S) \n \n \ndef areIdentical(T, S): \n \n if T is None and S is None: \n return True\n \n if T is None or S is None: \n return False\n \n return (T.data == S.data and areIdentical(T.left, S.left)and\n areIdentical(T.right, S.right))" + }, + { + "comment": "Write a Python program to swap the values of two variables.", + "code_snippet": "x = 5\ny = 10\n\n# Swapping process \nx, y = y, x \n\nprint(\"x:\", x) \nprint(\"y:\", y)" + }, + { + "comment": "Optimize the following Python code to use built-in functions.", + "code_snippet": "def removeDuplicates(array): \n finalArray = []\n for element in array: \n if element not in finalArray: \n finalArray.append(element)\n return finalArray" + }, + { + "comment": "Create a program in Python that takes a list of words and an integer n and returns a list of words that appear at least n times in the given list.", + "code_snippet": "from collections import Counter\n\ndef frequent_words(words, n):\n counts = Counter(words)\n return [word for word, count in counts.items() if count >= n]\n\nresult = frequent_words(words, n)\n\nprint(result) # prints ['a', 'd']" + }, + { + "comment": "Devise a Python program to determine whether a given number is even or odd.", + "code_snippet": "def even_or_odd(num):\n if num % 2 == 0:\n return \"Even\"\n else:\n return \"Odd\"" + }, + { + "comment": "Compose a basic blockchain system in Python.", + "code_snippet": "import hashlib\nimport json\n\n# We will use SHA256 as our hashing function\ndef sha256(data):\n hash_function = hashlib.sha256()\n hash_function.update(data.encode('utf-8'))\n return hash_function.hexdigest()\n\n# Create a class for each block\nclass Block:\n def __init__(self, index, timestamp, data, previous_hash):\n self.index = index\n self.timestamp = timestamp\n self.data = data\n self.previous_hash = previous_hash\n self.hash = sha256(f'{self.index}{self.timestamp}{self.data}{self.previous_hash}')\n\n# Create a class for the blockchain\nclass Blockchain:\n def __init__(self):\n self.chain = []\n\n def add_block(self, data):\n previous_hash = self.chain[-1].hash if len(self.chain) > 0 else None\n block = Block(len(self.chain), data['timestamp'], data['data'], previous_hash)\n self.chain.append(block)\n\n # This method will return the entire blockchain in JSON format\n def get_chain(self):\n return json.dumps([b.__dict__ for b in self.chain], indent=2)" + }, + { + "comment": "Provide a Python code that uses the exponential smoothing algorithm to predict the next day's forecast temperature given the past three day's forecast temperatures.", + "code_snippet": "\"\"\"\nThis code uses the exponential smoothing algorithm to predict the next day's forecasted temperature given the past three day's forecasted temperatures.\n\"\"\"\n\ndef predict_temperature(temperature_list):\n alpha = 0.5 #Confidence value\n predicted_temperature = temperature_list[-1] # Initializing prediction\n for temperature in temperature_list[:-1]:\n predicted_temperature = alpha*temperature + (1-alpha)*predicted_temperature\n return predicted_temperature\n\nif __name__ == '__main__':\n temperature_list = [21, 22, 20]\n print(predict_temperature(temperature_list))" + }, + { + "comment": "Write a function in Python to sort a dictionary according to its values, in descending order.", + "code_snippet": "def sortDictionary(dictionary):\n sorted_list = sorted(dictionary.items(), key=lambda x: x[1], reverse=True)\n sorted_dictionary = dict(sorted_list)\n return sorted_dictionary\n\nsorted_dictionary = sortDictionary({'apple': 2, 'banana': 3, 'mango': 1})\nprint(sorted_dictionary)" + }, + { + "comment": "Create a function in Python to generate a multiplication table with numbers in a range given start and end parameters.", + "code_snippet": "def multiplication_table(start, end):\n\tfor x in range(start, end + 1):\n\t\tfor y in range(start, end + 1):\n\t\t\tprint(x * y, end = \" \")\n\t\tprint(\"\\n\")\n\t\t\nmultiplication_table(start, end)" + }, + { + "comment": "Write a python program to identify if a string s has matching parentheses", + "code_snippet": "def matching_paren(s):\n stack = []\n for char in s:\n if char == '(':\n stack.append(char)\n elif char == ')':\n if len(stack) == 0:\n return False \n stack.pop()\n \n if len(stack) == 0:\n return True\n else:\n return False" + }, + { + "comment": "Develop a function in Python to take as input two array of integers and swap their elements.", + "code_snippet": "def swap(arr1, arr2):\n assert len(arr1) == len(arr2)\n for i in range(len(arr1)):\n temp = arr1[i]\n arr1[i] = arr2[i]\n arr2[i] = temp" + }, + { + "comment": "Can you design a function in Python for reversing a list?", + "code_snippet": "def reverse_list(list): \n return list[::-1]" + }, + { + "comment": "Create a Python script to build a dictionary from string to string of the given samples.", + "code_snippet": "def build_dictionary(samples):\n dictionary = {}\n for sample in samples:\n key, value = sample.split(\"->\")\n dictionary[key] = value\n return dictionary\n \nsamples = [\"apple->red\", \"banana->yellow\", \"cherry->red\"]\ndictionary = build_dictionary(samples)\n\nprint(dictionary)" + }, + { + "comment": "Write a Python script to find the average of numbers stored in an array.", + "code_snippet": "def calculate_mean(numbers):\n total_sum = 0\n for num in numbers:\n total_sum += num\n mean = total_sum / len(numbers)\n return mean\n\nprint(calculate_mean([10, 20, 30]))" + }, + { + "comment": "Generate a Python program that takes two lists as input and returns a new list containing only the common elements.", + "code_snippet": "def common_elements(list1, list2): \n common_list=[]\n for element in list1: \n if element in list2: \n common_list.append(element) \n return common_list\n \nlist1 = [1, 2, 3, 4, 8] \nlist2 = [2, 6, 8, 10]\n\ncommon_list = common_elements(list1, list2) \n\nprint(common_list)" + }, + { + "comment": "Create a loop in Python to print out all the odd numbers from 1 to 10.", + "code_snippet": "for i in range(1, 11):\n if i % 2 != 0:\n print(i)" + }, + { + "comment": "Create a machine learning model in Python that predecits customer lifetime value given a customer's past transactions.", + "code_snippet": "import pandas as pd\nimport numpy as np\n\nfrom sklearn.preprocessing import StandardScaler\nfrom sklearn.ensemble import RandomForestRegressor\n\n# Preprocessing\ndf = pd.read_csv('transactions.csv')\nX = df.iloc[:,:-1].values\ny = df.iloc[:,-1].values\nscaler = StandardScaler()\nX = scaler.fit_transform(X)\n\n# Model Training\nmodel = RandomForestRegressor()\nmodel.fit(X, y)\n\n# Prediction\ncustomer_input = np.array([[10,100,5,...]]) # provide data related to past transactions\ntrans_scaled = scaler.transform(customer_input)\npredicted_LTV = model.predict(trans_scaled)[0]\nprint('Predicted customer lifetime value', predicted_LTV)" + }, + { + "comment": "Given a list of numbers and a target number, write a Python program to find a pair of numbers from the given list that add up to the given target.", + "code_snippet": "def find_pair(lst, target):\n for i in range(len(lst)):\n if (target - lst[i]) in lst[i+1:]:\n return [lst[i], target-lst[i]]\n\nfind_pair([1,2,3,4,4,5,6], 8)" + }, + { + "comment": "Develop a class in Python to perform various matrix operations like addition, subtraction, multiplication and transpose.", + "code_snippet": "class Matrix: \n def __init__(self, m, n, lst): \n self.m = m \n self.n = n \n self.mat = [] \n \n c = 0\n for i in range(self.m): \n a =[] \n for j in range(self.n): \n a.append(lst[c]) \n c += 1\n self.mat.append(a) \n \n def __str__(self): \n output = \"\"\n for i in self.mat: \n for j in i: \n output += str(j) + \" \"\n output += '\\n'\n return output \n \n def add(self, mat2): \n for i in range(self.m): \n for j in range(self.n): \n self.mat[i][j] += mat2.mat[i][j] \n \n def sub(self, mat2): \n for i in range(self.m): \n for j in range(self.n): \n self.mat[i][j] -= mat2.mat[i][j]\n \n def mul(self, mat2): \n result = [] \n for i in range(self.m): \n a =[] \n for j in range(mat2.n): \n s = 0\n for k in range(self.n): \n s += self.mat[i][k] * mat2.mat[k][j] \n a.append(s) \n result.append(a) \n self.mat = result \n self.m = len(result) \n self.n = len(result[0]) \n \n def transpose(self):\n result = [[self.mat[j][i] for j in range(len(self.mat))] for i in range(len(self.mat[0]))]\n self.mat = result \n self.m = len(result) \n self.n = len(result[0])" + }, + { + "comment": "Write a Python script to generate a random number between 0 and 9.", + "code_snippet": "import random\n\nrandom_num = random.randint(0,9)\nprint(random_num)" + }, + { + "comment": "Create a Python Flask app that listens for POST requests on the '/webhook' route. When a request is received, extract the necessary parameters from the request and call the 'makeWebhookResult' function to generate a response. The response should be a JSON object containing a 'speech' field with the text to be spoken by the voice assistant. The app should be started on port 5000 and run in debug mode.", + "code_snippet": "#!/usr/bin/env python\n# coding=utf-8\nimport requests\nimport urllib2\nimport json\nimport os\nfrom flask import Flask\nfrom flask import request\nfrom flask import make_response\nfrom bs4 import BeautifulSoup \n\n\n# Flask app should start in global layout\napp = Flask(__name__)\n\n\n@app.route('/webhook', methods=['POST'])\ndef webhook():\n\treq = request.get_json(silent=True, force=True)\n\tres = makeWebhookResult(req)\n \tres = json.dumps(res, indent=4)\n \tprint(res)\n \tr = make_response(res)\n \tr.headers['Content-Type'] = 'application/json'\n \treturn r\n\ndef makeWebhookResult(req):\n\tresult = req.get(\"result\")\n\tparameters = result.get(\"parameters\")\n\t\n\tif req.get(\"result\").get(\"action\") == \"productos.sura\":\n \tcliente = parameters.get(\"tipo_cliente\")\n \t\tspeech = \"Buscando productos para \" + cliente\n\t\t\n\telif req.get(\"result\").get(\"action\") == \"producto.info\":\n \tproducto = parameters.get(\"producto\")\n\t\tif (producto==\"hogar\"):\n\t\t\turl = \"https://www.sura.com/soluciones-personas/seguro-hogar.aspx\"\n\t\t\tr = urllib2.urlopen(url).read()\n\t\t\tsoup = BeautifulSoup(r, 'html.parser')\n\t\t\tprint soup\n\t\t\tcontenido = soup.find_all(\"div\",class_=\"textRightColumn\")\n\t\t\tif (len(contenido)==0):\n\t\t\t\tspeech = \"No encontrado\"\n\t\t\telse:\n\t\t\t\tspeech = contenido[0]\n\t\t\t\n\t\telse:\n \t\t\tspeech = \"Buscando informacion del producto \" + producto\n \n \telif req.get(\"result\").get(\"action\") == \"planes.salud\":\n \turl = \"https://api.segurossura.com.co/public/v1/directory/products\"\n \tmyResponse = requests.get(url)\n\n \tif(myResponse.ok):\n\t\t\tjData = json.loads(myResponse.text)\n\t\t\t\n\t\tspeech = \"Seguros Sura Colombia ofrece los siguientes planes de salud: \\n\"\n\t\t\n \tfor plan in jData:\n\t \t\tspeech = speech + \"\\n\" + plan[\"nombreField\"].title()\n\t\t\t\n\telif req.get(\"result\").get(\"action\") == \"info.especialistas\":\n\t\tproducto = parameters.get(\"plan-salud\")\n\t\tciudad = parameters.get(\"ciudad\")\n\t\tespecialidad = parameters.get(\"especialidad\")\n\t\t\n\t\turl = \"https://api.segurossura.com.co/public/v1/directory/search/\" + producto + \"/\" + ciudad + \"?speciality=\" + especialidad + \"&firstname=&secondname=&firstlastname=&secondlastname=\"\n\t\tmyResponse = requests.get(url)\n\n\t\tif(myResponse.ok):\n\t\t\tjData = json.loads(myResponse.text)\n\t\t\n\t\tspeech = \"Los profesionales que coinciden con tu busqueda son: \\n\"\n\n\t\tfor medico in jData:\n\t \t\tspeech = speech + \"\\n\" + medico[\"nombreField\"] + \"\\n Direccion: \" + medico[\"direccionField\"].title() + \"\\n Telefono: \" + medico[\"telefonoField\"] + \"\\n\"\n\t\t\t\n\telif req.get(\"result\").get(\"action\") == \"coberturas.producto\":\n\t\tproducto = parameters.get(\"productos\")\n\t\tspeech = \"Buscando coberturas del producto: \" + producto\n\telse:\n \tspeech =\" \"\n\n\treturn {\n \"speech\": speech,\n \"displayText\": speech,\n #\"data\": {},\n # \"contextOut\": [],\n \"source\": \"apiai-onlinestore-shipping\"\n \t}\n\n\nif __name__ == '__main__':\n\tport = int(os.getenv('PORT', 5000))\n \tprint \"Starting app on port %d\" % port\n \tapp.run(debug=True, port=port, host='0.0.0.0')\n" + }, + { + "comment": "Modify an existing Python function to eliminate any redundancies", + "code_snippet": "def just_me(name):\n print(\"Hi, my name is \"+name+\". I am special and nothing else matters.\")\n print(\"What about you?\")" + }, + { + "comment": "Create a simple chatbot using Python and state diagrams.", + "code_snippet": "# Create the states\nstate0 = {\n 'name': 'state0',\n 'message': 'Hello! How can I help you?',\n 'replies': {'I need some advice': 'state1', 'Can you answer my questions?': 'state2'}\n}\n\nstate1 = {\n 'name': 'state1',\n 'message': 'Sure, what kind of advice do you need?',\n 'replies': {'Career advice': 'state3','Health advice': 'state4'}\n}\n\nstate2 = {\n 'name': 'state2',\n 'message': 'Yes, I'll do my best! What do you want to know?',\n 'replies': {'Where can I find good tutorials': 'state5', 'Why is coding so hard': 'state6'}\n}\n\nstate3 = {\n 'name': 'state3',\n 'message': 'It is always a good idea to research the field you are interested in and creating a plan to learn the skills that are required. Make sure to contact professionals in the field to understand their experience.',\n 'replies': {}\n}\n\nstate4 = {\n 'name': 'state4',\n 'message': 'Focus on eating healthy and staying active. Make sure to consult a medical professional if you have any concerns.',\n 'replies': {}\n}\n\nstate5 = {\n 'name': 'state5',\n 'message': 'You can find tutorials online or join coding communities to get help from experienced coders. StackOverflow and Cod Academy are great resources.',\n 'replies': {}\n}\n\nstate6 = {\n 'name': 'state6',\n 'message': 'Coding can be challenging, especially at first. Just remember that with practice, patience and problem solving skills you can overcome the obstacles.',\n 'replies': {}\n}\n\n\n# Initialize the state\ncurrent_state = state0\n\n# Keep a record of conversation\nconversation = []\n\nwhile True:\n # Print the current state message\n print(current_state['message'])\n conversation.append(current_state['message'])\n\n # Get the user input\n user_input = input('>> ')\n conversation.append(user_input)\n\n # Update the state\n if user_input in current_state['replies']:\n current_state = eval(current_state['replies'][user_input])\n else:\n print(\"I don't understand what you mean. Please try again.\")\n\n# End the conversation when the state is terminal\n if not bool(current_state['replies']):\n print('Goodbye!')\n break\n\nprint(\"=========================\")\nprint(\"Conversation:\")\nfor message in conversation:\n print(message)" + }, + { + "comment": "Create a Python 3 program that takes an integer input from the user and prints its cube.", + "code_snippet": "number = int(input(\"Please enter a number: \"))\ncube = number**3\nprint(\"The cube of the number is: \" + str(cube))" + }, + { + "comment": "Write a Python program to find the first non-repeating character in a given list.", + "code_snippet": "def first_non_repeating_char(lst):\n dct = {}\n \n for l in lst:\n if l in dct:\n dct[l] += 1\n else:\n dct[l] = 1\n \n for l in lst:\n if dct[l] == 1:\n return l\n \n return None\n\nlst = [1, 2, 3, 4, 4, 3, 2, 1]\nprint(first_non_repeating_char(lst))" + }, + { + "comment": "Create a k-means clustering algorithm in Python.", + "code_snippet": "import numpy as np \n\ndef kmeans(k, data): \n \"\"\"\n Perform k-means clustering on data\n \"\"\"\n # randomly set initial centroids\n centroids = data[np.random.randint(low=0, high=len(data), size=k)]\n prev_centroids = np.zeros(centroids.shape)\n\n clusters = np.zeros(len(data))\n distances = np.zeros((len(data), k))\n \n # find the closest centroid for each sample\n while not np.allclose(centroids, prev_centroids):\n # save old centroids\n prev_centroids = centroids\n \n # get the distance between each point and each centroid\n for idx, centroid in enumerate(centroids):\n distances[:, idx] = np.linalg.norm(data - centroid, axis=1)\n \n # assign each sample to the closest centroids\n clusters = np.argmin(distances, axis=1)\n \n # update centroids \n for idx in range(k):\n centroids[idx] = np.mean(data[clusters == idx], axis=0)\n \n return clusters, centroids" + }, + { + "comment": "Write a Python code snippet that produces the following output:", + "code_snippet": "for i in range(7):\n for j in range(7):\n if (i + j) % 2 == 0:\n print('#', end='')\n else:\n print(' ', end='')\n print()" + }, + { + "comment": "Construct a Python class that takes a given number and calculates the sum of the digits.", + "code_snippet": "class SumOfDigits:\n \n def __init__(self, num):\n self.num = num\n \n def calculate_sum_of_digits(self):\n total = 0\n for ch in str(self.num):\n total += int(ch)\n return total\n\ndigit_sum = SumOfDigits(6342)\nresult = digit_sum.calculate_sum_of_digits()\nprint(result)" + }, + { + "comment": "Implement a sorting algorithm in Python that takes a list of integers as input and outputs the list sorted in ascending order.", + "code_snippet": "def sort_ascending(nums):\n for i in range(len(nums)):\n min_idx = i\n for j in range(i + 1, len(nums)):\n if nums[min_idx] > nums[j]:\n min_idx = j\n nums[i], nums[min_idx] = nums[min_idx], nums[i] \n return nums" + }, + { + "comment": "Create a feature extraction function in Python to extract data from a json string.", + "code_snippet": "def feature_extraction(input_str):\n import json\n data = json.loads(input_str)\n\n features = {\n \"id\": data[\"id\"],\n \"title\": data[\"title\"],\n \"body_len\": len(data[\"body\"])\n }\n\n return features" + }, + { + "comment": "Construct a Python program to combine the elements of two lists into a list of tuples.", + "code_snippet": "def combine_list(array1, array2):\n return list(zip(array1, array2))" + }, + { + "comment": "Design and implement a neural network in Python to predict the price of a house given a set of features.", + "code_snippet": "import numpy as np\nfrom keras.models import Sequential\nfrom keras.layers import Dense\n\nfeatures = np.array([[0.8, 0.4, 0.7]])\n\nmodel = Sequential()\nmodel.add(Dense(64, input_dim=3, activation='relu'))\nmodel.add(Dense(32, activation='relu'))\nmodel.add(Dense(1, activation='linear'))\n\nmodel.compile(loss='mse', optimizer='adam', metrics=['mse'])\n\nmodel.fit(features, batch_size=3,epochs=200)" + }, + { + "comment": "Create a Python program that takes two arguments in the form of two lists and calculates the dot product of the two arguments.", + "code_snippet": "def dot_product(list1, list2):\n product = 0\n for i in range(len(list1)):\n product += (list1[i] * list2[i])\n return product\n#Example\nlist1 = [1,2]\nlist2 = [3,4]\n\nresult = dot_product(list1, list2)\nprint(result)\n#Output\n11" + }, + { + "comment": "Create a Python web application for a car insurance calculator. The application should have a page where the user can input the data (e.g age, gender, car model, etc) and should return a calculated insurance price.", + "code_snippet": "import flask\nfrom flask import request, jsonify\n\n# Creating the application app\napp = flask.Flask(__name__)\n\n\n@app.route('/calculate', methods=['POST'])\ndef calculate():\n # Get the input data from the user\n data = request.get_json()\n\n age = data['age']\n gender = data['gender']\n car_model = data['car_model']\n\n # Calculate the insurance price\n # ...\n insurance_price = 0.00\n\n # Return the calculated insurance price in JSON format\n return jsonify({'insurance_price': insurance_price})\n\t\napp.run(host='0.0.0.0', port=8006)" + }, + { + "comment": "Create a Python script that generates a list of the prime numbers between two given numbers. The script should use the Sieve of Eratosthenes algorithm to generate the prime numbers", + "code_snippet": "def sieve_of_eratosthenes(start, end):\n prime = [True] * (end + 1)\n p = 2\n while p * p <= end:\n if prime[p]:\n for i in range(p * p, end + 1, p):\n prime[i] = False\n p += 1\n prime_numbers = []\n\n for p in range (start, end):\n if prime[p]:\n prime_numbers.append(p)\n\n return prime_numbers\n\nprint (sieve_of_eratosthenes(1, 20))" + }, + { + "comment": "Construct a program in Python to compute the sum of square numbers in a given range, including the start and end numbers.", + "code_snippet": "def sumOfRanges(start, end):\n sum = 0\n \n for i in range(start, end+1):\n sum += i*i\n \n return sum\n\nsumOfRanges(10,20) #673" + }, + { + "comment": "In Python, build a program that can remove all vowels from a given string.", + "code_snippet": "def remove_vowels(string):\n vowels = ['a','e','i','o','u']\n new_string = ''\n for char in string:\n if char.lower() not in vowels:\n new_string += char\n return new_string" + }, + { + "comment": "Improve the following function by using Python built-in functions:", + "code_snippet": "def sum_array(array):\n '''A function that takes in an array of numbers and returns the sum of all the numbers'''\n return sum(array)" + }, + { + "comment": "Write a python code for sorting n distinct integers using insertion sort.", + "code_snippet": "def insertion_sort(arr):\n for i in range(1, len(arr)): \n \n key = arr[i] \n \n # Move elements of arr[0..i-1], \n # that are greater than key, \n # to one position ahead of \n # their current position \n j = i-1\n while j >= 0 and key < arr[j] : \n arr[j + 1] = arr[j] \n j -= 1\n arr[j + 1] = key" + }, + { + "comment": "Create a Python script for a django-like ORM with standard CRUD functionality. The script should include methods for Create, Read, Update and Delete.", + "code_snippet": "import sqlite3\n\nclass Model:\n\n def __init__(self):\n self.conn = sqlite3.connect(\":memory:\")\n self.cursor = self.conn.cursor()\n\n def create(self,name):\n self.cursor.execute(\n\t\t\t\"CREATE TABLE IF NOT EXISTS Models (name TEXT)\"\n\t\t)\n self.cursor.execute(\n\t\t\t\"INSERT INTO Models(name) VALUES (?)\",\n\t\t\t(name,),\n\t\t)\n self.conn.commit()\n\n def read(self):\n self.cursor.execute(\"SELECT * FROM Models\")\n return self.cursor.fetchall()\n\n def update(self,name):\n self.cursor.execute(\n\t\t\t\"UPDATE Models SET name = ? WHERE name = ?\", \n\t\t\t(name, name,),\n\t\t)\n self.conn.commit()\n \n def delete(self, name):\n self.cursor.execute(\n\t\t\t\"DELETE FROM Models WHERE name = ?\",\n\t\t\t(name,),\n\t\t)\n self.conn.commit()" + }, + { + "comment": "Can you write a Python script to sort a list of strings alphabetically?", + "code_snippet": "strings = [\"Hello\", \"Yes\", \"No\", \"World\"]\n\nstrings.sort()\n\nprint(strings)" + }, + { + "comment": "Write a class in Python that can find the median of an unsorted list of numbers.", + "code_snippet": "class MedianFinder:\n def __init__(self):\n self._data = []\n \n def add(self, num):\n self._data.append(num)\n \n def find_median(self):\n data = sorted(self._data)\n n = len(data)\n return (data[(n-1)//2] + data[n//2])/2" + }, + { + "comment": "Generate an array of random numbers in Python.", + "code_snippet": "import numpy as np\n\nsize = 10\nrandom_array = np.random.randint(0, 100, size)\nprint(random_array)" + }, + { + "comment": "Compute the edit distance between two strings in Python.", + "code_snippet": "def editDistance(string1, string2, m, n):\n # Create an empty matrix\n dp = [[0 for x in range(n+1)] for x in range(m+1)] \n \n # Filling the first column of the matrix\n for i in range(m+1): \n dp[i][0] = i \n \n # Filling the second column of the matrix \n for j in range(n+1): \n dp[0][j] = j \n \n # Populate the matrix\n for i in range(1, m+1): \n for j in range(1, n+1): \n \n if string1[i-1] == string2[j-1]: \n dp[i][j] = dp[i-1][j-1] \n else: \n dp[i][j] = 1 + min(dp[i][j-1], # Insert\n dp[i-1][j], # Remove \n dp[i-1][j-1]) # Replace\n \n return dp[m][n] \n \n \n# Driver program \nstring1 = \"kitten\"\nstring2 = \"sitting\"\nm = len(string1) \nn = len(string2) \nprint(editDistance(string1, string2, m, n))" + }, + { + "comment": "Create a 3-layer artificial neural network using Python and print the outcome.", + "code_snippet": "import numpy as np\n\n# define the 3 layers #\ninput_layer = np.array([2, 3])\nhidden_layer = np.array([[0.1, 0.4],\n [0.8, 0.6],\n [0.3, 0.9]])\noutput_layer = np.array([0.3, 0.7])\n\n# compute the output of the 3-layer network #\nhidden_layer_output = np.dot(input_layer, hidden_layer)\noutput = np.dot(hidden_layer_output, output_layer)\n\nprint(output)" + }, + { + "comment": "Create a Python program to read in 15 integers and print the sum of them.", + "code_snippet": "def sum_nums(nums):\n total = 0\n for num in nums:\n total += num\n return total\n\nlst = [1, 5, 9, 0, 2, 4, 7, 8, 6, 10, 3, 11, 12, 13, 14]\ntotal = sum_nums(lst)\nprint(total)" + }, + { + "comment": "Implement a REST API in Python for creating and reading users. The API should have endpoints for creating a user, reading all users, and reading a single user.", + "code_snippet": "from flask import Flask, jsonify, request\nfrom flask_mysqldb import MySQL\n\napp = Flask(name)\n\n# Mysql configuration\napp.config['MYSQL_USER'] = 'root'\napp.config['MYSQL_PASSWORD'] = 'password'\napp.config['MYSQL_DB'] = 'users'\napp.config['MYSQL_CURSORCLASS'] = 'DictCursor'\n\nmysql = MySQL(app)\n\n@app.route('/users', methods=['POST'])\ndef create_user():\n name = request.json['name']\n email = request.json['email']\n\n cur = mysql.connection.cursor()\n cur.execute(\"INSERT INTO users (name, email) VALUES (%s, %s)\", (name, email))\n mysql.connection.commit()\n cur.close()\n\n return jsonify({'message': 'User created'})\n\n@app.route('/users', methods=['GET'])\ndef get_users():\n cur = mysql.connection.cursor()\n cur.execute(\"SELECT * FROM users\")\n users = cur.fetchall()\n cur.close()\n\n return jsonify(users)\n\n@app.route('/users/int:id', methods=['GET'])\ndef get_user(id):\n cur = mysql.connection.cursor()\n cur.execute(\"SELECT * FROM users WHERE id=%s\", (id))\n user = cur.fetchone()\n cur.close()\n\n return jsonify(user)\n\nif name == \"main\":\n app.run(debug=True)" + }, + { + "comment": "Explain the approach for solving a linear programming problem using the Simplex method in Python.", + "code_snippet": "The Simplex Method is an algorithm for solving a linear programming problem, which involves finding the maximum or minimum value of a linear function. This method uses simultaneous equations to define a polytope that contains the solution to the linear programming problem. It then finds the optimal solution in this polytope by iteratively making moves from a vertex to another in the polytope that gives an increase in the message value. \n\nTo solve a linear programming problem using the Simplex Method in Python, first, define the problem in terms of the decision variables, objective function, and constraints. Next, convert the problem into standard form by introducing slack variables, if needed. Then, create a tableau containing the coefficients of the decision variables and the right-hand sides of the constraints, and set up the starting solution in the tableau. Now, iteratively use the Simplex algorithm to move from a vertex to the next until an optimum solution is reached. Determine the optimum solution by inspecting the values in the tableau." + }, + { + "comment": "Optimize a Python algorithm to find the greatest 2 numbers from a 10000 integers list.", + "code_snippet": "def get_greatest_2(items):\n max1 = max2 = float('-inf')\n for item in items:\n if item > max1:\n max1, max2 = item, max1\n elif item > max2:\n max2 = item\n return max1, max2\n\nmyList = [1, 5, 3, 7, 4, 7, 8, 9, 2, 10, 6, 8]\nprint('The greatest 2 numbers from the array:', get_greatest_2(myList))\n\nOutput:\nThe greatest 2 numbers from the array: (9, 8)" + }, + { + "comment": "Write a python code that takes in a list of integers and removes all the duplicate elements from it.", + "code_snippet": "final_list = [] \nfor num in list_of_integers: \n if num not in final_list: \n \tfinal_list.append(num) \nprint(final_list)" + }, + { + "comment": "Using the NumPy library, create a Python program to generate a 3X3 array of random integers ranging from 1 to 5.", + "code_snippet": "import numpy as np \n\na = np.random.randint(1, 6, size=(3,3)) \nprint(a)" + }, + { + "comment": "Can you provide a code snippet in Python that takes a list of strings as input and sorts them based on their length?", + "code_snippet": "words = [\"Hello\",\"World!\",\"Good\",\"Morning\"]\n\nwords.sort(key=len)\n\nprint(words)" + }, + { + "comment": "Create a Python program to classify the sentiment of movie reviews using Natural Language Processing.", + "code_snippet": "import nltk\nfrom nltk.sentiment import vader\n\nsentence = 'The movie was terrible. It felt like it would never end!'\n\nsid = vader.SentimentIntensityAnalyzer()\nscores = sid.polarity_scores(sentence)\n\nif scores['neg'] > scores['pos']:\n print('The sentiment of the sentence is negative!')\nelse:\n print('The sentiment of the sentence is positive!')" + }, + { + "comment": "Create a python script that parses a CSV and generates a new CSV that adds the total number of rows, total number of columns, and total amount of the data for each attribute.", + "code_snippet": "\"\"\"\nParses a CSV and generates a new CSV that adds the total number of rows, total \nnumber of columns, and total amount of data for each attribute.\n\"\"\"\n\nimport csv\n\ndef parse_csv(filename):\n with open(filename) as csv_file:\n reader = csv.DictReader(csv_file)\n rows =0\n cols = 0\n data_totals = []\n for row in reader:\n rows += 1\n cols = len(row)\n for col in row:\n if len(data_totals) < cols:\n data_totals.append([row[col],1])\n else:\n existing_total = data_totals[cols - 1]\n new_total = [existing_total[0] + float(row[col]), existing_total[1] + 1]\n data_totals.append(new_total)\n #write to new csv\n with open('new_csv.csv', mode='w') as new_csv_file:\n writer = csv.writer(new_csv_file, delimiter=',', quotechar='\"', quoting=csv.QUOTE_MINIMAL)\n writer.writerow(['Rows', 'Columns', 'Data Totals'])\n writer.writerow([rows, cols, data_totals])\n\nif __name__ == '__main__':\n filename = 'test.csv'\n parse_csv(filename)" + }, + { + "comment": "Create a class in Python which matches the following criteria.", + "code_snippet": "class Song:\n def __init__(self, title, artist):\n self.title = title\n self.artist = artist\n \n def __str__(self):\n return f'Title: {self.title}\\nArtist: {self.artist}'\n \n def __eq__(self, other):\n return self.artist == other.artist and self.title == other.title\n\n def length(self):\n return len(self.title)" + }, + { + "comment": "Create a Python script to scrape a given website.", + "code_snippet": "import requests\nfrom bs4 import BeautifulSoup\n\nurl = ''\npage = requests.get(url)\nsoup = BeautifulSoup(page.text, 'html.parser')\n\n# Scraping code goes here...." + }, + { + "comment": "Create objects of type Student in Python containing relevant attributes.", + "code_snippet": "class Student:\n def __init__(self, name, age, gender):\n self.name = name\n self.age = age\n self.gender = gender" + }, + { + "comment": "Design and write a Python program to extract all public email addresses from a given string", + "code_snippet": "import re\n\ndef extract_emails(text):\n emails = re.findall(r\"[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+\", text)\n return emails\n\nextracted_emails = extract_emails(\"My email is john@example.com and yours is john@gmail.com\")\nprint(extracted_emails)" + }, + { + "comment": "Generate a basic REST API with authentication and endpoints in Python.", + "code_snippet": "from flask import Flask, request\nfrom flask_restful import Resource, Api\nfrom flask_jwt import JWT, jwt_required\n\napp = Flask(name)\napi = Api(app)\n\n# Setup JWT authentication\napp.secret_key = 'super-secret-key'\njwt = JWT(app, authenticate, identity)\n\nitems = []\n\nclass Item(Resource):\n @jwt_required()\n def get(self, name):\n for item in items:\n if item['name'] == name:\n return item\n return {'item': None}, 404\n\n def post(self, name):\n new_item = {'name': name, 'price': 12.00}\n items.append(new_item)\n return new_item, 201\n\n\nclass ItemList(Resource):\n def get(self):\n return {'items': items}\n\n\napi.add_resource(Item, '/item/')\napi.add_resource(ItemList, '/items')\n\nif name == 'main':\n app.run(port=5000, debug=True)" + }, + { + "comment": "Generate a set of Python functions to take inputs values from a list of objects and output a result. The output for each object should include the object's ID and the calculated results from the given inputs.", + "code_snippet": "def calculate_result(obj_list):\n result_list = []\n\n for obj in obj_list:\n result = {}\n result['id'] = obj['id']\n result['result'] = sum(obj['inputs'])\n\n result_list.append(result)\n\nreturn result_list\n\nobj_list = [{\"id\": 1, \"inputs\": [1,2,3]}, \n{\"id\": 2, \"inputs\": [2,3,4]}]\n\nprint(calculate_result(obj_list))\n\n# Output: [{'id': 1, 'result': 6}, {'id': 2, 'result': 9}]" + }, + { + "comment": "Reverse an input string using Python.", + "code_snippet": "def rev_string(s): \n return s[::-1] \n \ns = \"Hello World!\"\nprint(rev_string(s))" + }, + { + "comment": "Create an algorithm in Python to find the longest common subsequence of two sequences.", + "code_snippet": "#Function to find the LCS of two strings\ndef find_lcs(x, y): \n # Find lengths of the two strings \n m = len(x) \n n = len(y) \n \n #To store the lengths of longest common subsequences\n lcs = [[0 for x in range(n+1)] for x in range(m+1)] \n \n #Fill the table in bottom up manner \n for i in range(m+1): \n for j in range(n+1): \n if i == 0 or j == 0: \n lcs[i][j] = 0\n elif x[i-1] == y[j-1]: \n lcs[i][j] = lcs[i-1][j-1] + 1\n else: \n lcs[i][j] = max(lcs[i-1][j], lcs[i][j-1]) \n \n #To store one of the possible common subsequence\n index = lcs[m][n] \n lcs_str = [\"\"] * (index+1) \n lcs_str[index] = \"\"\n \n #Following loop code is used to find one of the longest common subsequence\n i = m \n j = n \n while i > 0 and j > 0: \n \n #If current character in X and Y are same,then\n # reduce both the count and add the character to the result string\n if x[i-1] == y[j-1]: \n lcs_str[index-1] = x[i-1] \n i-=1\n j-=1\n index-=1\n \n # If not same, move to the left, top or corner (diagonal) cell \n #Whichever has the max value\n elif lcs[i-1][j] > lcs[i][j-1]: \n i-=1\n else: \n j-=1\n \n # Return the longest common subsequence\n return \"\".join(lcs_str)\n\n# Main function\nx = \"abcdaf\"\ny = \"acbcf\"\nres = find_lcs(x,y)\nprint(\"The Longest Common Subsequence is:\")\nprint(res)\n\n# Output: The Longest Common Subsequence is: \n# abcf" + }, + { + "comment": "Write a python script to generate a random password of length 8, which consists of alphanumeric characters and at least one special character.", + "code_snippet": "import string\nimport random\n\ndef generate_password():\n chars = string.ascii_letters + string.digits + string.punctuation\n pwd_length = 8\n\n password = ''\n for i in range(pwd_length):\n password += random.choice(chars)\n \n # Check if at least one special character exists in the password\n if any([char in string.punctuation for char in password]):\n return password\n else:\n return generate_password()\n\nprint(generate_password())" + }, + { + "comment": "Create a Python script that takes the list [1, 2, 3, 4, 5] and returns the sum.", + "code_snippet": "def sum_list(lst):\n total = 0\n for num in lst:\n total += num\n return total\n\nsum_list([1,2,3,4,5])" + }, + { + "comment": "Edit the Python program to sort words in a given string by their length in decreasing alphabetical order.", + "code_snippet": "my_string = \"This is the string which is to be sorted\"\n \nwords = my_string.split(' ') # split string into list of words \n \n# create a list of tuples where the first element \n# is the length of the word and the second element \n# is the word itself \nwords_with_length = [(len(word), word) for word in words] \n \n# sort list of tuples according to 1st element of tuple i.e. length of word \nwords_with_length.sort(reverse = True) \n \n# wl contains list words in decreasing order of their length \n# now use join() to join all words whith \" \" \nsorted_string = \" \".join([i[1] for i in words_with_length]) \n \n# print sorted string \nprint(sorted_string)" + }, + { + "comment": "Write a python program to calculate maximum revenue.", + "code_snippet": "def max_revenue(prices):\n diff = [prices[i + 1] - prices[i] for i in range(len(prices) - 1)] \n max_diff = 0\n for i in range(len(diff)): \n for j in range(i + 1, len(diff) + 1): \n current_diff = sum(diff[i:j]) \n if current_diff > max_diff: \n max_diff = current_diff \n \n return max_diff" + }, + { + "comment": "Write a Python program to print the following output pattern", + "code_snippet": "for i in range(1,6):\n for j in range(1,i+1):\n print(j, end=\"\")\n print()" + }, + { + "comment": "Develop a loop that prints a python array from the end to the beginning.", + "code_snippet": "def printArrayReverse(arr): \n for i in range(len(arr) - 1, -1, -1): \n print(arr[i], end = \" \")\n\nprintArrayReverse(arr)" + }, + { + "comment": "Given a list of phone numbers, extract only the ones that start with 08 using Python.", + "code_snippet": "phone_numbers = ['0834567', '0945678', '07123456', '08901234', '07890123']\nresult = [number for number in phone_numbers if number.startswith('08')]\nprint(result)" + }, + { + "comment": "Write a Python program that takes a list and a search query as input and returns the indices of all elements in the list which match the search query.", + "code_snippet": "def search_list(list, search_query):\n result = []\n for i in range(len(list)):\n if list[i] == search_query:\n result.append(i)\n return result\n\nsearch_list(list, search_query) # returns [0]" + }, + { + "comment": "Write a function in Python that takes an array of integer values and reverses the order of the values.", + "code_snippet": "def reverse_array(arr):\n return arr[::-1] # Returns a slice of the list in reverse order" + }, + { + "comment": "Write a function in Python to create a random string of 10 characters.", + "code_snippet": "import random\n\ndef generate_string(string_length):\n random_characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'\n random_string = ''.join(random.choices(random_characters, k=string_length))\n return random_string\n\nprint(generate_string(10)) # Length: 10" + }, + { + "comment": "Develop a Tic Tac Toe game in Python.", + "code_snippet": "# define the board\nboard = [\" \" for i in range(9)]\n\ndef print_board():\n row1 = \"| {} | {} | {} |\".format(board[0], board[1], board[2])\n row2 = \"| {} | {} | {} |\".format(board[3], board[4], board[5])\n row3 = \"| {} | {} | {} |\".format(board[6], board[7], board[8])\n\n print()\n print(row1)\n print(row2)\n print(row3)\n print()\n\n# define player turn\ndef player_turn(icon):\n\n if icon == \"X\":\n number = 1\n elif icon == \"O\":\n number = 2\n \n print(\"Your turn player {}\".format(number))\n \n choice = int(input(\"Enter your move (1-9): \").strip())\n if board[choice -1] == \" \":\n board[choice -1] = icon\n else:\n print()\n print(\"That space is taken!\")\n\n# check win\ndef is_victory(icon):\n if (board[0] == icon and board[1] == icon and board[2] == icon) or \\\n (board[3] == icon and board[4] == icon and board[5] == icon) or \\\n (board[6] == icon and board[7] == icon and board[8] == icon) or \\\n (board[0] == icon and board[3] == icon and board[6] == icon) or \\\n (board[1] == icon and board[4] == icon and board[7] == icon) or \\\n (board[2] == icon and board[5] == icon and board[8] == icon) or \\\n (board[0] == icon and board[4] == icon and board[8] == icon) or \\\n (board[2] == icon and board[4] == icon and board[6] == icon):\n return True\n else:\n return False\n \n# define main function\ndef main():\n print(\"Welcome to Tic Tac Toe!\")\n print_board()\n \n while True:\n player_turn(\"X\")\n print_board()\n if is_victory(\"X\"):\n print(\"X Wins! Congratulations!\")\n break\n elif not \" \" in board:\n print(\"It's a tie!\")\n break\n\n player_turn(\"O\")\n print_board()\n if is_victory(\"O\"):\n print(\"O Wins! Congratulations!\")\n break\n elif not \" \" in board:\n print(\"It's a tie!\")\n break\n\n\nmain()" + }, + { + "comment": "Write Python code to merge two sorted lists.", + "code_snippet": "def merge_sorted_lists(listA, listB): \n merged_list = []\n ptrA = 0\n ptrB = 0\n while ptrA < len(listA) and ptrB < len(listB): \n if listA[ptrA] <= listB[ptrB]: \n merged_list.append(listA[ptrA]) \n ptrA += 1\n else: \n merged_list.append(listB[ptrB]) \n ptrB += 1\n while ptrA < len(listA): \n merged_list.append(listA[ptrA]) \n ptrA += 1\n while ptrB < len(listB):\n merged_list.append(listB[ptrB])\n ptrB += 1\n return merged_list" + }, + { + "comment": "Create a Python program to find the longest common subsequence between two strings.", + "code_snippet": "# Program to find the longest common subsequence between two strings \ndef lcs(X, Y): \n # find the length of the strings \n m = len(X) \n n = len(Y) \n\n # declaring the array for storing the dp values \n L = [[None]*(n+1) for i in range(m+1)] \n\n # Following steps to build L[m+1][n+1] in bottom up manner \n for i in range(m+1): \n for j in range(n+1): \n if i == 0 or j == 0 : \n L[i][j] = 0\n elif X[i-1] == Y[j-1]: \n L[i][j] = L[i-1][j-1]+1\n else: \n L[i][j] = max(L[i-1][j] , L[i][j-1]) \n\n # L[m][n] contains the length of LCS of X[0..n-1] & Y[0..m-1] \n return L[m][n] \n\n# Driver program \nX = \"ABACEDF\"\nY = \"ABDCF\"\n\nprint(\"Length of LCS is \", lcs(X, Y))" + }, + { + "comment": "Construct a naive bayes classifier using python to classify emails as spam or not spam.", + "code_snippet": "from sklearn.naive_bayes import GaussianNB\n\n# Create a Gaussian Classifier\nmodel = GaussianNB()\n\n# Train the model using the training sets \nmodel.fit(X_train, y_train)\n\n# Predict Output \ny_pred = model.predict(X_test)" + }, + { + "comment": "This code performs a series of calculations and plots based on input data. Before running the script, run eval_spectrum.py and calibration.py with appropriate measurements. The script imports necessary modules and functions from external sources. The main function loads the input data, performs calibration, calculates various values, and generates plots based on instructions provided in a separate text file. The generated plots show absorbed power vs emitted power, absorbed power vs reflectivity, and dissipated power vs wavelength. The script also calculates thermal resistance and displays it on the plot. To run the code, execute the main function.", + "code_snippet": "#! /usr/bin/python2.7\n# -*- coding: utf-8 -*-\n\nimport numpy as np\nimport matplotlib.pyplot as plt\n\nimport errorvalues as ev # github.com/stefantkeller/errorvalues\n\nfrom VECSELsetup.eval.varycolor import varycolor\nfrom VECSELsetup.eval.gen_functions import load, extract, plotinstructions_write, plotinstructions_read, lut_from_calibfolder, lut_interp_from_calibfolder, thermal_resistance\n\n\ndef main():\n # before running this script:\n # run eval_spectrum.py to provide the .._eval.csv files required for the spectra\n # run calibration.py (with appropriate calib measurements)\n # and don't forget temperature_heatsink (this is not necessary for this script here, but it provides interesting insights for the measurement at hand)\n logfile = '../24_LL_ev/20150211_sample21-1-d6/spot333um.csv'\n calib_folder = '../24_LL_ev/20150204_calib_333um_s21-1-d6'\n \n \n #------------------------------------\n # calibration\n emis_lut = lut_from_calibfolder(calib_folder,identifiers=['Laser'],ignore_error=False) # emission has constant value solely due to BS, no ND in front of detector etc.\n pump_lut, refl_lut = lut_interp_from_calibfolder(calib_folder,identifiers=['Pump','Refl'])\n \n \n #------------------------------------\n # load measurement\n current_set, current, pump, refl, laser, spectra, meantemp = extract(logfile, identifiers=['Current','Pump','Refl','Laser','Spectra', 'Temperature'])\n Temperatures = sorted(current_set.keys()) # set temperatures (round numbers like 15.0 or 22.5 etc)\n T_out = dict((T,meantemp[T].round(1)) for T in Temperatures) # real temperatures for display in plot, including +-uncertainty\n\n\n #------------------------------------\n # calculate using calibration\n absorbed, reflected, emitted, pumped, dissipated = {}, {}, {}, {}, {}\n for T in Temperatures:\n reflected[T] = refl_lut(refl[T])\n pumped[T] = pump_lut(pump[T])\n absorbed[T] = pumped[T] - reflected[T]\n emitted[T] = emis_lut(laser[T])\n dissipated[T] = absorbed[T] - emitted[T]\n\n \n #\n #------------------------------------\n # invoke instructions for plot and fit\n # plotting the data can be tricky to reproduce, store the plot properties in a text file and read from there!\n # (easy to repeat the plot at a later time)\n # open the instruction file in a text editor, edit the instructions and run this module again; it will use the new instructions\n instrfile = logfile[:-4]+'_instr.csv'\n plotinstructions_write(instrfile,Temperatures,calib_folder)\n \n #------------------------------------\n # retrieve instructions\n instr = plotinstructions_read(instrfile)\n \n #\n #------------------------------------\n # translate instructions\n str2lst = lambda s: map(float,s[1:-1].split(','))\n\n textx = float(instr['textx']) # x coordinate for text; same for first two subplots (absorbed-emitted and absorbed-reflectivity)\n fontsize = float(instr['fontsize'])\n title = instr['title']\n xlim = str2lst(instr['xlim']) # range of x-axis; same for first two subplots\n ylim1 = str2lst(instr['ylim1']) # range of y-axis of first (aborbed-emitted) plot\n ylim2 = str2lst(instr['ylim2']) # range of second y-axis (absorbed-reflectivity)\n xlim3 = str2lst(instr['xlim3']) # third x-axis; (dissipated-wavelength)\n ylim3 = str2lst(instr['ylim3']) # 3rd y-axis\n plot_temps_for_3 = str2lst(instr['plot_temps_for_3']) # which ones to plot? you may have measured a heat sink temperature without lasing output, whose data will confuse the reader, so you don't plot it.\n textx3 = float(instr['textx3']) # x-coordinate of text in 3rd plot\n texty3 = str2lst(instr['texty3']) # 3rd y-coordinate\n llow0 = {}\n lhigh0 = {}\n texty1 = {}\n for T in Temperatures:\n llow0[T] = sum(absorbed[T].v()threshold, max_num : \n max_num = num \n\nprint(max_num)" + }, + { + "comment": "Write a Python program to find a substring in a string.", + "code_snippet": "def find_substring(source, substring):\n '''This function returns the start index of a substring in given string '''\n if substring not in source:\n return -1\n i=0\n while i < len(source):\n if source[i] == substring[0]:\n flag = True\n for j in range(len(substring)):\n if substring[j] != source[i+j]:\n flag = False\n break\n if flag:\n return i\n i += 1\n return -1" + }, + { + "comment": "Given a list of numbers, create a Python script to print all the elements greater than 50.", + "code_snippet": "nums = [2, 60, 5, 4, 78, 32, 99]\n\nfor num in nums:\n if num > 50:\n print(num)" + }, + { + "comment": "Create a program in Python to sort a given array in ascending order using bubble sort.", + "code_snippet": "def bubble_sort(arr): \n n = len(arr) \n for i in range(n-1):\n for j in range(0, n-i-1): \n if arr[j] > arr[j+1] : \n arr[j], arr[j+1] = arr[j+1], arr[j] \n\narr = [3,7,4,1]\nbubble_sort(arr) \nprint (\"Sorted array :\") \nfor i in range(len(arr)): \n print (\"%d\" %arr[i])," + }, + { + "comment": "Generate a function in Python that takes a number and prints its factors.", + "code_snippet": "def print_factors(x):\n \"\"\"\n This function takes a number and prints its factors\n \n :param x: The number whose factors to be printed \n :return: None\n \"\"\"\n \n print(\"The factors of\",x,\"are:\")\n for i in range(1, x + 1):\n if x % i == 0:\n print(i)\n \n##\n5. Instruction: Generate a basic HTML form using JavaScript to submit a user's city and the submit the details to the server.\n5. Input: Not applicable\n5. Output: \n
\n City:
\n
\n \n
\n\n" + }, + { + "comment": "Write a python script to generate an array of random numbers between two specified values.", + "code_snippet": "import random\n\n# Generate an array of random numbers between two specified values\ndef generate_array(min, max):\n array = []\n \n for i in range(min, max):\n array.append(random.randint(min, max))\n \n return array\n \nmin = 0\nmax = 50\nprint(generate_array(min, max))" + }, + { + "comment": "Create a Python program to filter out words containing five characters or less from a list of words.", + "code_snippet": "# Function to filter out words containing five characters or less\ndef filterWords(arr):\n result = [word for word in arr if len(word) > 5]\n return result\n\n# Get the input\narr = [\"Hello\", \"Good\", \"Where\", \"Been\", \"World\", \"House\"]\n\n# Call the function\nresult = filterWords(arr)\n\n# Print the result\nprint(\"Filtered list of words:\", result)" + }, + { + "comment": "Create a Python function to identify the number of even numbers present in a given list of numbers.", + "code_snippet": "def countEvenNum(list):\n return len([x for x in list if x % 2 == 0])\n\nlist = [1, 2, 3, 4, 5]\nprint(countEvenNum(list))" + }, + { + "comment": "Write a Python function to generate a random string of length 8 containing alphanumeric characters.", + "code_snippet": "import string\nimport random\n\ndef generate_random_string(length):\n chars = string.ascii_letters + string.digits\n return ''.join(random.choice(chars) for _ in range(length))" + }, + { + "comment": "Write a Python program to solve a linear equation system of the form: ax + by = c.", + "code_snippet": "def solve_linear_equation_system(a, b, c):\n x = (c - b) / a\n y = (c - a*x) / b\n return x, y\n\nx, y = solve_linear_equation_system(a, b, c)\nprint(\"x = {}, y = {}\".format(x, y)) # x = 2.0, y = 2.0" + }, + { + "comment": "This code loads a JSON fixture file, extracts properties from it, creates Property objects from the properties, and saves them to the database. To use this code, you need to create a JSON fixture file with a \"properties\" key containing a list of property objects. Then, run the code with the appropriate command line arguments to specify the fixture file and folder. The saved objects will be printed to the console.", + "code_snippet": "#!/usr/bin/env python\n# coding: utf-8\n\nfrom __future__ import (\n print_function,\n unicode_literals,\n absolute_import\n)\n\nimport argparse\nimport json\nimport os\n\n\ndef get_path():\n return unicode(os.path.abspath('.'))\n\n\ndef parse_args():\n _parser = argparse.ArgumentParser()\n _parser.add_argument('--fixture', type=str, help='fixture file to load', default='properties.json')\n _parser.add_argument('--fixture_folder', type=str,\n default='models/fixtures',\n help='where fixtures are stored.'\n )\n return _parser.parse_args()\n\ndef main(base_path):\n properties_to_save = []\n args = parse_args()\n path = os.path.sep.join([base_path,\n 'app',\n args.fixture_folder,\n args.fixture])\n with open(path) as file_:\n data = json.load(file_)\n properties = data['properties']\n for property_ in properties:\n property_.pop('id')\n properties_to_save.append(Property(**property_))\n Property.objects.insert(properties_to_save)\n\n return len(properties_to_save)\n\n\nif __name__ == '__main__':\n from app.models.properties import Property\n base_path = get_path()\n out = main(base_path)\n print(\"{} objects saved\".format(out))" + }, + { + "comment": "Create an algorithm in Python to determine the most efficient order of tasks from an array of given tasks.", + "code_snippet": "def most_efficient_order(tasks):\n \"\"\"\n This method takes a list of tasks and produces the most efficient order for completing the tasks.\n\n Parameters\n ----------\n tasks: List\n A list of tasks to be performed.\n\n Returns\n -------\n List\n An ordered list of tasks representing the most efficient order for completing the tasks.\n \"\"\"\n tasks_to_complete = tasks.copy()\n order = [] \n while tasks_to_complete:\n min_time = float(\"inf\")\n task_index = None\n for i, task in enumerate(tasks_to_complete):\n if task.get_time() < min_time:\n min_time = task.get_time()\n task_index = i\n order.append(tasks_to_complete.pop(task_index))\n return order" + }, + { + "comment": "Optimize a given Python script that reverse a string.", + "code_snippet": "def reverse_string(string):\n return string[::-1]" + }, + { + "comment": "Create an HTML form with a submit button to send information to a Python program.", + "code_snippet": "
\n \n
" + }, + { + "comment": "Generate a Python script that contains a function with two parameters and returns the sum of the two parameters.", + "code_snippet": "def add(x, y): \n \"\"\"Returns the sum of x and y\"\"\"\n return x + y" + }, + { + "comment": "Create a Python program to read an array of integers and calculate their sum.", + "code_snippet": "def calculate_sum(arr):\n sum = 0\n\n for i in arr:\n sum += i\n\n return sum\n\ninput_array = [1, 3, 5, 7]\n\nresult = calculate_sum(input_array)\n\nprint(result) # prints 16" + }, + { + "comment": "Create a Python program that multiplies two input numbers and prints the result.", + "code_snippet": "def multiply(a, b):\n result = a * b\n print(result)\n\nmultiply(a, b)" + }, + { + "comment": "The code is a Python class called FileSystem that provides methods for saving, deleting, and finding task data. To use this class, import it and create an instance with a parameter dictionary that includes a 'taskDir' key specifying the directory where task data should be stored. Then call the methods on the instance as needed:\n\n- To save task data, call the save_task method with a dictionary containing the data. If the dictionary does not already include an 'id' key, one will be generated and added to the dictionary. The task data will be stored in a file in a subdirectory of the taskDir directory named after the task ID.\n- To delete task data, call the delete_task method with the ID of the task to delete. This will remove the subdirectory containing the task data.\n- To find task data by ID, call the find_by_id method with the ID of the task to find. This will return the task data as a dictionary.\n- To find task data for multiple IDs, call the find_by_ids method with a list of IDs. This will return a list of task data dictionaries.\n- To find all task data, call the all_task_data method. This will return a list of all task data dictionaries, sorted by ID in ascending order by default (or descending order if the 'order' parameter is set to 'desc').\n- To get task data for a specific ID without raising an error if the data is not found, call the task_data method with the ID of the task to find. This will return the task data as a dictionary, or None if the task data is not found.", + "code_snippet": "import os\nimport json\nimport logging\nimport fcntl\n\nfrom jsub.util import safe_mkdir\nfrom jsub.util import safe_rmdir\nfrom jsub.error import RepoReadError\nfrom jsub.error import TaskNotFoundError\n\nID_FILENAME = 'id'\n\nclass FileSystem(object):\n\tdef __init__(self, param):\n\t\tself.__jsub_dir = os.path.expanduser(param.get('taskDir', '~/jsub/'))\n#\t\tself.__id_file = os.path.join(self.__jsub_dir, ID_FILENAME)\n\n\t\tself.__logger = logging.getLogger('JSUB')\n\n#\t\tself.__create_repo_dir()\n\n\t\tself.__json_format = param.get('format', 'compact')\n\n\tdef save_task(self, data):\n\t\tif 'id' not in data:\n\t\t\tsafe_mkdir(self.__jsub_dir)\n\t\t\tdata['id'] = self.__new_task_id()\n\t\tsafe_mkdir(os.path.join(self.__jsub_dir,str(data['id']),'taskInfo'))\n\t\ttask_path = os.path.join(self.__jsub_dir, str(data['id']),'taskInfo','repo')\n\n\t\tdata_str = self.__json_str(data)\n\t\twith open(task_path, 'a+') as f:\n\t\t\tfcntl.flock(f, fcntl.LOCK_EX)\n\t\t\tf.seek(0)\n\t\t\tf.truncate()\n\t\t\tf.write(data_str)\n\n\tdef delete_task(self, task_id):\n\t\tsafe_rmdir(os.path.join(self.__jsub_dir,str(task_id)))\n\n\tdef find_by_id(self, task_id):\n\t\treturn self.task_data(task_id)\n\n\tdef find_by_ids(self, task_ids):\n\t\tall_data = []\n\t\tfor task_id in task_ids:\n\t\t\ttry:\n\t\t\t\ttd = self.task_data(task_id)\n\t\t\t\tall_data.append(td)\n\t\t\texcept RepoReadError as e:\n\t\t\t\tself.__logger.debug(e)\n\t\treturn all_data\n\n\tdef all_task_data(self, order='asc'):\n\t\ttask_ids =[d for d in os.listdir(self.__jsub_dir) if os.path.isdir(os.path.join(self.__jsub_dir,d))]\n\t\ttask_ids.sort(key=int, reverse=(order=='desc'))\n\t\treturn self.find_by_ids(task_ids)\n\n\tdef task_data(self, task_id):\n\t\tsafe_mkdir(os.path.join(self.__jsub_dir,str(task_id),'taskInfo'))\n\t\ttask_path = os.path.join(self.__jsub_dir,str(task_id),'taskInfo','repo')\n\t\twith open(task_path, 'a+') as f:\n\t\t\tfcntl.flock(f, fcntl.LOCK_EX)\n\t\t\tf.seek(0)\n\t\t\tdata_str = f.read()\n\n\t\ttry:\n\t\t\treturn json.loads(data_str)\n\t\texcept ValueError as e:\n\t\t\traise RepoReadError('JSON decode error on task %s: %s' % (task_id, e))\n\n#\tdef __create_repo_dir(self):\n#\t\tsafe_mkdir(self.__jsub_dir)\n\n\tdef __new_task_id(self):\n\t\ttask_ids =[int(d) for d in os.listdir(self.__jsub_dir) if os.path.isdir(os.path.join(self.__jsub_dir,d))]\n\t\tif not task_ids:\n\t\t\treturn 1\n\t\ttask_ids.sort(key=int, reverse=True)\n\t\treturn(task_ids[0]+1)\n\n\tdef __json_str(self, data):\n\t\tif self.__json_format == 'pretty':\n\t\t\treturn json.dumps(data, indent=2)\n\t\treturn json.dumps(data, separators=(',', ':'))\n" + }, + { + "comment": "Create a visualization in Python using Matplotlib that displays the top 5 most popular programming languages.", + "code_snippet": "import matplotlib.pyplot as plt\n\nx_values = [\"Python\", \"Java\", \"C++\", \"Javascript\", \"C#\"]\ny_values = [45, 25, 15, 10, 5]\n\nplt.bar(x_values, y_values)\n\nplt.title(\"Popular Programming Languages\")\nplt.ylabel(\"Percentage of Use\")\nplt.xlabel(\"Languages\")\n\nplt.show()" + }, + { + "comment": "Generate a single Python line to create a list that contains elements from another list.", + "code_snippet": "new_list = [element for element in given_list]" + }, + { + "comment": "Write a Python function to find the maximum of three numbers.", + "code_snippet": "def max_of_three(a, b, c):\n if a > b and a > c:\n return a\n elif b > a and b > c:\n return b\n else:\n return c\n\nresult = max_of_three(3, 4, 5)\nprint(result)" + }, + { + "comment": "Write a Python program to scrape the table at the following URL and extract the planets information (name, mass, and distance from the sun).", + "code_snippet": "import requests\nfrom bs4 import BeautifulSoup\n\npage = requests.get('https://en.wikipedia.org/wiki/List_of_gravitationally_rounded_objects_of_the_Solar_System')\nsoup = BeautifulSoup(page.content, 'lxml')\n\nplanets_table = soup.find('table', class_='wikitable sortable')\n\nplanets = []\nfor row in planets_table.find_all('tr'):\n if row.find('th'):\n continue\n cells = row.find_all('td')\n planets.append({\n 'name': cells[0].text,\n 'mass': cells[2].text,\n 'distance_from_sun': cells[5].text\n })\n\nprint(planets)" + }, + { + "comment": "Create a Python dictionary to store data about a student.", + "code_snippet": "student_data = {\n 'name': 'John Smith',\n 'year': 'Freshman',\n 'gpa': 3.25,\n 'courses': ['math', 'english', 'Computer Science', 'Statistics'],\n 'extracurricular': ['Chess Club', 'Student Government', 'Debate Team']\n}" + }, + { + "comment": "Write a function in Python to remove duplicate entries from a list.", + "code_snippet": "def removeDuplicates(input): \n final_list = [] \n for num in input: \n if num not in final_list: \n final_list.append(num) \n return final_list \n\nlst = [1,2,2,3,3,4]\nprint(removeDuplicates(lst))" + }, + { + "comment": "Given the following array of numbers, write a Python program to find the maximum element.", + "code_snippet": "#import max from the built-in library\nfrom max import max\n\n#initialize array of numbers\nnumbers = [1, 43, 78, 3, 92, 42]\n\n#find maximum element\nprint(max(numbers))\n\n#output\n92" + }, + { + "comment": "Create a Python program to compress a given data sequence.", + "code_snippet": "def compress_sequence(nums):\n output = []\n temp = []\n\n for i in range(1, len(nums)):\n if nums[i-1] * nums[i] >= 0:\n temp.append(nums[i-1])\n else:\n temp.append(nums[i-1])\n output.append(temp)\n temp = []\n temp.append(nums[i])\n output.append(temp)\n\n return output\n\nprint(compress_sequence([9, -2, 6, 0, -7]))" + }, + { + "comment": "Write a function in python to split an given array into two parts with equal sum.", + "code_snippet": "def split_equal_sum(arr):\n n = len(arr) \n leftsum = 0\n rightsum = sum(arr)\n \n for i in range(n): \n rightsum -= arr[i]\n if leftsum == rightsum:\n return True \n leftsum += arr[i] \n return False" + }, + { + "comment": "Create a for loop in Python to calculate the total sum of all elements in the given list.", + "code_snippet": "total = 0\nfor element in data:\n total = total + element\nprint(total)" + }, + { + "comment": "Suppose you want to build an autocomplete feature for a text editor, develop a Python program to generate a list of suggestions based on a given prefix.", + "code_snippet": "def auto_complete(dictionary, prefix):\n # list for words with the given prefix\n prefix_words = []\n\n # iterate through the dictionary\n for word in dictionary:\n # if the word starts with given prefix, \n # add it to the list\n if word.startswith(prefix):\n prefix_words.append(word)\n\n return prefix_words\n\n\ndictionary = [\"dog\", \"deer\", \"deal\", \"dungeon\", \"dark\", \"dusk\"]\nprefix = \"d\"\n\nprefix_words = auto_complete(dictionary, prefix)\nprint(prefix_words)\n\n# Output:\n# ['dog', 'deer', 'deal', 'dungeon', 'dark', 'dusk']" + }, + { + "comment": "Design a neural network in Python to predict a customer\u2019s annual income based on their age and education level.", + "code_snippet": "import numpy as np\nimport keras \nfrom keras.layers import Dense\nfrom keras.models import Sequential\n\n# Build model\nmodel = Sequential()\nmodel.add(Dense(64, input_dim = 2, activation = 'relu'))\nmodel.add(Dense( 1))\n\n# Compile the model\nmodel.compile(loss = 'mean_squared_error',\n optimizer = 'adam')\n\n# Obtain some data - age (years), education level (high school, college, university)\nx_train = np.array([[25, 0], [30, 0], [35, 0], \n\t\t [40, 0], [45, 1], [45, 2],\n\t\t [50, 1], [50, 2], [55, 1],\n\t\t [55, 2], [50, 3], [60, 3]])\n\n# Labels - annual income\ny_train = [15000, 20000, 25000, 30000,\n 40000, 45000, 50000, 60000, \n\t 65000, 70000, 80000, 90000]\n\n# Fit the model\nmodel.fit(x_train, y_train, epochs = 150, batch_size = 2)\n\n# Calculate the predicted annual income\nage = 50\neducation = 3\nannualIncome = model.predict(np.array([[age, education]]))\nprint(annualIncome)\n# output: [[80000]]" + }, + { + "comment": "Create a python program to classify text documents into two classes: positive and negative.", + "code_snippet": "import nltk\nfrom nltk.classify import NaiveBayesClassifier \n \ndef label_words(words): \n return dict([(word, True) for word in words]) \n\npositive_tokens = nltk.word_tokenize(positiveText) \nnegative_tokens = nltk.word_tokenize(negativeText)\n\npositive_data = [(label_words(positive_tokens), 'positive')] \nnegative_data = [(label_words(negative_tokens), 'negative')]\n \ntrain_data = positive_data + negative_data \nclassifier = NaiveBayesClassifier.train(train_data) \n \n# classify \nclassifier.classify( \n\tlabel_words(nltk.word_tokenize(\"This movie was ok\")))" + }, + { + "comment": "Design a Python program to filter out the odd numbers from a list.", + "code_snippet": "def filter_odd_numbers(numbers):\n filtered_list = []\n for num in numbers:\n if num % 2 != 0:\n filtered_list.append(num)\n return filtered_list\n\nlist1 = [1,2,3,4,5,6]\nfiltered_list = filter_odd_numbers(list1)\nprint(filtered_list) # [1, 3, 5]" + }, + { + "comment": "Write a Python script to refresh a given table of data in a PostgreSQL database every 5 minutes.", + "code_snippet": "import psycopg2\nfrom datetime import datetime, timedelta\nimport schedule\nimport time\n\nconn = psycopg2.connect(\n host=\"localhost\", \n database=\"db\", \n user=\"user\", \n password=\"password\"\n)\n\ndef refresh_data():\n cur = conn.cursor()\n query = 'REFRESH TABLE \"TableName\";'\n cur.execute(query)\n conn.commit()\n\n# run the refresh_data job every 5 minutes\nschedule.every(5).minutes.do(refresh_data)\n\nwhile True:\n schedule.run_pending()\n time.sleep(1)" + }, + { + "comment": "Make the following Python code snippet more efficient.", + "code_snippet": "def determine_commission_rate(gross_sales):\n if gross_sales >= 10000:\n return 0.1\n elif gross_sales >= 5000:\n return 0.07\n else:\n return 0.05" + }, + { + "comment": "Construct a Python program that computes the area of a circle with the given radius.", + "code_snippet": "import math\n\ndef area_circle(radius):\n return math.pi * (radius ** 2)\n\narea = area_circle(radius)\nprint('The area of the circle is %.2f' % area)" + }, + { + "comment": "Implement a basic version control system in Python that keeps track of changes in the code.", + "code_snippet": "class VersionControl:\n def __init__(self, lines):\n self.lines = lines\n self.mark = 0\n \n def commit(self):\n self.mark += 1\n log_file = open(\"log_file.txt\", \"a+\")\n log_file.write(str(self.mark) + \": \" + str(self.lines))\n log_file.close()\n \n def restore(self):\n log_file = open(\"log_file.txt\", \"r\")\n lines = log_file.readlines()\n to_mark = self.mark-1\n \n self.lines = lines[to_mark]\n log_file.close()" + }, + { + "comment": "Write a Python program to solve the Towers of Hanoi game.", + "code_snippet": "def hanoi(n, source, spare, target):\n if n == 1:\n disk = source.pop(0)\n print(\"Moving disk {0} from {1} to {2}\".format(disk[0], disk[1], target[1]))\n target.insert(0, disk)\n else:\n hanoi(n-1, source, target, spare)\n disk = source.pop(0)\n print(\"Moving disk {0} from {1} to {2}\".format(disk[0], disk[1], target[1]))\n target.insert(0, disk)\n hanoi(n-1, spare, source, target)\n\nn = 8\nsource = [(i, \"A\") for i in range(1, n+1)]\ntarget = []\nspare = []\n\nhanoi(n, source, spare, target)" + }, + { + "comment": "Analyze a dataset of customers and create a classification model in scikit-learn to determine customer churn.", + "code_snippet": "# Python code\nimport pandas as pd\nimport numpy as np\nfrom sklearn.ensemble import RandomForestClassifier\nfrom sklearn.model_selection import train_test_split\n\n# Load the data set\ndata = pd.read_csv(\"customer_data.csv\")\n\n# Select features\nX = data.drop(['churn'], axis=1)\n\n# Select targets\ny = data['churn']\n\n# Split the data into training and testing sets\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n\n# Create the model\nmodel = RandomForestClassifier()\n\n# Train the model\nmodel.fit(X_train, y_train)\n\n# Make predictions and measure accuracy\npredictions = model.predict(X_test)\nprint(model.score(X_test, y_test))" + }, + { + "comment": "Create a Django application with a model that stores the name, address, and email of a user.", + "code_snippet": "# create Django app\ndjango-admin startproject myapp\n\n# create user model\nfrom django.db import models\n\nclass User(models.Model): \n name = models.CharField(max_length=100) \n address = models.CharField(max_length=100)\n email = models.EmailField(max_length=100)\n\n# migrate models\npython manage.py makemigrations\npython manage.py migrate" + }, + { + "comment": "Create a function in Python to convert a given number into its Roman form.", + "code_snippet": "def int_to_Roman(number): \n \n val = [ \n 1000, 900, 500, 400, \n 100, 90, 50, 40,\n 10, 9, 5, 4,\n 1\n ] \n syb = [ \n \"M\", \"CM\", \"D\", \"CD\", \n \"C\", \"XC\", \"L\", \"XL\", \n \"X\", \"IX\", \"V\", \"IV\",\n \"I\"\n ] \n roman_num = '' \n i = 0\n while number > 0:\n for_val = number // val[i]\n roman_num += syb[i] * for_val\n number -= val[i] * for_val\n i += 1\n return roman_num" + }, + { + "comment": "Create a linked-list in Python that can traverse in both directions.", + "code_snippet": "class Node:\n def __init__(self, data):\n self.data = data\n self.next = None\n self.prev = None\n\n\nclass DoubleLinkedList:\n def __init__(self): \n self.head = None\n \n def append(self, new_data): \n new_node = Node(new_data) \n if self.head is None:\n self.head = new_node\n else: \n curr_node = self.head\n while curr_node.next != None:\n curr_node = curr_node.next\n curr_node.next = new_node\n new_node.prev = curr_node\n \n def prepend(self, new_data):\n new_node = Node(new_data) \n if self.head is None: \n self.head = new_node\n return\n new_node.next = self.head\n self.head.prev = new_node \n self.head = new_node\n\n def reverse(self):\n curr_node = self.head\n while curr_node:\n temp = curr_node.next\n curr_node.next = curr_node.prev\n curr_node.prev = temp\n curr_node = curr_node.prev\n if temp:\n self.head = temp.prev" + }, + { + "comment": "Program a python code to convert Celsius to Fahrenheit.", + "code_snippet": "def celsiusToFahrenheit(temp):\n return round((temp * 9/5) + 32, 2)" + }, + { + "comment": "Create a machine learning algorithm in Python to categorize a dataset of records.", + "code_snippet": "import numpy as np\nfrom sklearn.svm import SVC \n\n# Dataset \ntraining_data = [\n {\"label\": \"apple\", \"features\": [1, 1, 0]}, \n {\"label\": \"banana\", \"features\": [0, 1, 1]}, \n {\"label\": \"lemon\", \"features\": [0, 0, 1]}, \n {\"label\": \"orange\", \"features\": [1, 0, 0]}, \n {\"label\": \"pear\", \"features\": [0, 1, 0]}, \n]\n\n# Feature extraction \nX = []\ny = []\nfor data in training_data:\n X.append(data['features'])\n y.append(data['label'])\n\n# Model \nclf = SVC()\nclf.fit(X, y) \n\n# Prediction \npredict_data = [1, 0, 1]\npredicted_label = clf.predict([predict_data])\n\nprint(predicted_label[0])" + }, + { + "comment": "Create an application in Python for encryption and decryption of strings. The application should take a string as input, and use a cipher text algorithm of choice to encrypt the string.", + "code_snippet": "from Crypto.Cipher import AES\n\nkey = b'Sixteen byte key'\n\ndef encrypt(plaintext):\n cipher = AES.new(key, AES.MODE_ECB)\n return cipher.encrypt(plaintext)\n\ndef decrypt(ciphertext):\n cipher = AES.new(key, AES.MODE_ECB)\n return cipher.decrypt(ciphertext)" + }, + { + "comment": "Suggest a valid Python syntax to calculate the sum of two variables using lambda", + "code_snippet": "sum = lambda a, b : a + b\nprint(sum(3,4))" + }, + { + "comment": "Generate code for a Machine Learning model in Python which can recognize handwritten digits from 0 to 9", + "code_snippet": "# Importing necessary libraries\n\nimport numpy as np\nimport pandas as pd\nfrom tensorflow.keras.datasets import mnist\nfrom tensorflow.keras.layers import Dense, Input, Dropout\nfrom tensorflow.keras.models import Model\nfrom tensorflow.keras.utils import to_categorical\n\n# Loading data\n(X_train, y_train), (X_test, y_test) = mnist.load_data()\n\n# Defining the neural network model\n\n# Input layer\ninputs = Input(shape=(28,28,))\n\n# Hidden layer\nh1 = Dense(64, activation='relu')(inputs)\nh2 = Dropout(0.5)(h1)\n\n# Output layer\noutputs = Dense(10, activation='softmax')(h2)\n\n# Compiling the model\nmodel = Model(inputs=inputs, outputs=outputs)\nmodel.compile(loss='categorical_crossentropy',\n optimizer='adam',\n metrics=['accuracy'])\n\n# Data pre-processing\n\n# Reshape inputs from (60000, 28, 28) to (60000, 784)\nX_train = X_train.reshape(60000, 784)\nX_test = X_test.reshape(10000, 784)\n\n# Normalize pixel values\nX_train = X_train.astype('float32')\nX_train /= 255\nX_test = X_test.astype('float32')\nX_test /= 255\n\n# One-hot encode labels\ny_train = to_categorical(y_train, num_classes=10)\ny_test = to_categorical(y_test, num_classes=10)\n\n# Fitting the model\nmodel.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=5, batch_size=128)" + }, + { + "comment": "Explain the difference between a ``list`` and a ``tuple`` in Python.", + "code_snippet": "The difference between a list and a tuple in Python is that a list is mutable, meaning its contents can be changed, while a tuple is immutable, meaning its contents cannot be changed. A list has square brackets around it, while a tuple has parentheses around it. Lists are used when the data needs to be changed, while tuples are used when the data is fixed and cannot be changed." + }, + { + "comment": "Generate a Python program to calculate the Fibonacci number at a given position.", + "code_snippet": "def fibonacci(n):\n if n == 0:\n return 0\n elif n == 1:\n return 1\n else:\n return fibonacci(n-1) + fibonacci(n-2)\n\nn = 10\nprint(fibonacci(n))" + }, + { + "comment": "Create a program in Python to generate a Random Password of length 8 characters, which contains at least one of each character type (lowercase, uppercase, digits, special characters).", + "code_snippet": "import string\nimport random\n\n# length of password\nlength = 8\n\n# special characters\nspecial_characters = \"!#$%&'()*+,-./:;<=>?@[\\]^_`{|}~\"\n\n# generating password\npassword = random.choice(string.ascii_lowercase)\npassword += random.choice(string.ascii_uppercase)\npassword += random.choice(string.digits)\npassword += random.choice(special_characters)\n\nfor i in range(length):\n password += random.choice(string.ascii_lowercase + string.ascii_uppercase + string.digits + special_characters)\n\npassword = ''.join(random.sample(password,len(password)))\n\nprint (\"Password is: \", password)" + }, + { + "comment": "Write a Python program to extract all the words starting with a specific letter", + "code_snippet": "\"\"\"\nExtract all the words starting with a specific letter\n\"\"\"\n\ndef extract_words(word, letter):\n words_list = []\n for w in word.split():\n if w[0] == letter:\n words_list.append(w)\n return words_list\n\nif __name__ == '__main__':\n words = 'This is a sample sentence to test the program'\n letter = 's'\n print(extract_words(words, letter))" + }, + { + "comment": "Implement a hash table in Python that supports insert, delete and retrieve operations.", + "code_snippet": "class HashTable:\n def __init__(self):\n self.table = [[] for _ in range(256)]\n \n def insert(self, key, value):\n h = hash(key) % 256\n for i, kv in enumerate(self.table[h]):\n if kv[0] == key:\n self.table[h][i] = (key, value)\n return\n self.table[h].append((key, value))\n \n def retrieve(self, key):\n h = hash(key) % 256\n for kv in self.table[h]:\n if kv[0] == key:\n return kv[1]\n \n def delete(self, key):\n h = hash(key) % 256\n for i, kv in enumerate(self.table[h]):\n if kv[0] == key:\n del self.table[h][i]" + }, + { + "comment": "Create a search engine in Python to quickly search through a given array.", + "code_snippet": "# Define the array\narray = ['school', 'hospital', 'bookstore', 'mall', 'theatre']\n\n# Function to perform linear search\ndef linearSearch(search_item):\n # Loop through array\n for i in range(len(array)):\n # If search item is found, return its position\n if array[i] == search_item:\n return i\n # If item is not found, return -1\n return -1\n\n# Input search item\ns = input(\"Enter the item to be searched: \")\n\n# Search the item\nresult = linearSearch(s)\n\n# Print result\nif result == -1:\n print(\"Item not found.\")\nelse:\n print(\"Item is found at position \"+str(result))" + }, + { + "comment": "Create a function in Python that prints out the largest value from a given list of numbers.", + "code_snippet": "def get_max_value(numbers): \n return max(numbers)\n\nprint(get_max_value(list)) # 6" + }, + { + "comment": "Write a python script that takes a list of numbers from 1 to 8 and prints its cubic values.", + "code_snippet": "list_numbers = [1, 2, 3, 4, 5, 6, 7, 8]\n\nfor num in list_numbers:\n print(num**3)" + }, + { + "comment": "Create a dictionary in Python with key-value pairs", + "code_snippet": "my_dict = {\n \"FirstName\": \"John\"\n}" + }, + { + "comment": "Write a Python code to find the number of unique paths from a given source to a destination.", + "code_snippet": "def num_unique_paths(m, n):\n dp = [[0 for x in range(m)] for y in range(n)] \n \n # Count of paths to reach any\n # cell in first column is 1 \n for i in range(n): \n dp[i][0] = 1\n \n # Count of paths to reach any\n # cell in first column is 1 \n for j in range(m): \n dp[0][j] = 1\n \n # Calculate count of paths for other \n # cells in bottom-up manner using\n # the recursive solution \n for i in range(1, n): \n for j in range(1, m): \n \n # By uncommenting the last\n # part the code calculatest he total\n # possible paths if the diagonal \n # Movements are allowed \n dp[i][j] = dp[i-1][j] + dp[i][j-1]# + dp[i-1][j-1]\n \n return dp[n-1][m-1]" + }, + { + "comment": "Generate a Python program to display a Fibonacci sequence of first n numbers.", + "code_snippet": "def Fibonacci(n):\n if n==1:\n return 0\n elif n==2:\n return 1\n else:\n return Fibonacci(n-1)+Fibonacci(n-2)\n\nn = 10\nfor i in range(1, n):\n print(Fibonacci(i))" + }, + { + "comment": "This code is a Python script that provides a command-line interface to download subtitles for movies and TV shows. To use it, run the script and provide one or more release paths as arguments. You can also specify the language and subtitle site to use. The available commands are \"download\", \"exist\", \"test\", \"list\", \"help\", and \"version\".", + "code_snippet": "#!/usr/bin/env python\n#-*- coding:utf-8 -*-\n########################################################\n# Name: Subtitles Client\n# Site: http://RealGame.co.il\n__author__ = 'RealGame (Tomer Zait)'\n__license__ = 'GPL v3'\n__version__ = '1.0'\n__email__ = 'realgam3@gmail.com'\n########################################################\n\nfrom os import path\nfrom sys import argv\nfrom docopt import docopt\n\nfrom engines.engine import SubtitleSite, SUBTITLE_SITE_LIST, DEFAULTS\n\n\n__doc__ = \\\n\"\"\"\nSubtitles Client\n\nUsage:\n {prog} download ... [--lang= --engine=...]\n {prog} exist ... [--lang= --engine=...]\n {prog} test [...]\n {prog} (-l | --list)\n {prog} (-h | --help)\n {prog} (-v | --version)\n\nOptions:\n -l --list Show subtitles engine list.\n -h --help Show this screen.\n -v --version Show version.\n --lang= Subtitle language (alpha2) [default: {def_language}].\n --engine= Subtitle site [default: {def_engine}].\n\"\"\".format(prog=path.basename(argv[0]),\n def_language=DEFAULTS['subtitle_language'],\n def_engine=DEFAULTS['subtitle_engine'])\n\n\ndef download_subtitles(releases, engines=[DEFAULTS['subtitle_engine']], lang=DEFAULTS['subtitle_language']):\n if releases:\n for release in releases:\n for engine in engines:\n subtitle_release = SubtitleSite.get_file_properties(release)['release_name']\n print \"[{engine: ^15}] Trying To Download Subtitles For: '{release}'\".format(engine=engine,\n release=subtitle_release)\n sub_obj = SubtitleSite.class_factory(engine)\n subtitle_path = sub_obj.download_subtitle(release, lang)\n if subtitle_path:\n print \"{0:17} Download Success: ({file_path}).\\n\".format(\"\", file_path=subtitle_path)\n else:\n print \"{0:17} Subtitles Not Found.\\n\".format(\"\")\n\n\ndef is_subtitles_exist(releases, engines=[DEFAULTS['subtitle_engine']], lang=DEFAULTS['subtitle_language']):\n if releases:\n for release in releases:\n for engine in engines:\n subtitle_release = SubtitleSite.get_file_properties(release)['release_name']\n\n sub_obj = SubtitleSite.class_factory(engine)\n exist_flag = sub_obj.is_subtitle_exist(release, lang)\n res = \"Exist\"\n if not exist_flag:\n res = \"Does Not \" + res\n print \"[{engine: ^15}] '{release}' - {res}.\".format(engine=engine,\n release=subtitle_release,\n res=res)\n\n\ndef test_engines(engines):\n if not engines:\n engines = SUBTITLE_SITE_LIST.keys()\n\n for engine_key in engines:\n t = SubtitleSite.class_factory(engine_key)\n t.test_engine()\n\n\ndef main():\n args = docopt(__doc__, help=True, version='Subtitles Client %s' % __version__)\n\n if args['download']:\n download_subtitles(args[''], args['--engine'], args['--lang'])\n elif args['exist']:\n is_subtitles_exist(args[''], args['--engine'], args['--lang'])\n elif args['test']:\n test_engines(args[''])\n elif args['--list']:\n for sub_site in SUBTITLE_SITE_LIST.keys():\n sub_dict = SUBTITLE_SITE_LIST.get(sub_site)\n print sub_dict.get('class_name')\n\n\nif __name__ == \"__main__\":\n main()\n" + }, + { + "comment": "Optimize the following Python program to find the maximum number in a list.", + "code_snippet": "def max_num(list):\n max_num = list[0]\n\n for num in list:\n if num > max_num:\n max_num = num\n \n return max_num" + }, + { + "comment": "Develop an algorithm in Python that takes a list of strings as an input and sorts them alphabetically.", + "code_snippet": "def sortAlphabetically(strings): \n strings.sort() \n return strings \n\n#Test \nstrings = [\"hello\", \"world\", \"good\", \"morning\", \"programming\"]\nsorted_strings = sortAlphabetically(strings) \nprint(*sorted_strings)" + }, + { + "comment": "Create a Python program to print a formatted table of grades for a given set of students.", + "code_snippet": "def print_grade_table(students):\n max_name_length = max(len(student['name']) for student in students)\n line_template = \"{{name:<{max_name_length}}} {{grade}}\".format(max_name_length=max_name_length)\n header = line_template.format(name='Name', grade='Grade')\n sep = '-' * len(header)\n print(header)\n print(sep)\n for student in students:\n print(line_template.format(**student))" + }, + { + "comment": "Design a Python code snippet that deletes all duplicates in a given list of numbers.", + "code_snippet": "def deleteDuplicates(list): \n final_list = [] \n for num in list: \n if num not in final_list: \n final_list.append(num) \n return final_list" + }, + { + "comment": "Write a Python program to visually summarize the Twitter data.", + "code_snippet": "import matplotlib.pyplot as plt\n\n# Process the Twitter data to extract\n# the relevant data fields\n# ...\n\n# Plot the tweet authors\nplt.xlabel('Tweet Authors')\nplt.ylabel('Number of tweets')\nplt.title('Tweet Author Summary')\nplt.bar(authors, num_tweets)\nplt.show()\n\n# Plot the number of likes\nplt.xlabel('Tweets')\nplt.ylabel('Number of Likes')\nplt.title('Number of Likes Summary')\nplt.bar(tweets, num_likes)\nplt.show()\n\n# Plot the number of retweets\nplt.xlabel('Tweets')\nplt.ylabel('Number of Retweets')\nplt.title('Number of Retweets Summary')\nplt.bar(tweets, num_retweets)\nplt.show()" + }, + { + "comment": "Develop a function in Python that takes in a string of sentences and removes all the punctuations.", + "code_snippet": "import string\n\ndef remove_punctuations(s):\n return s.translate(str.maketrans('', '', string.punctuation))\n\nif __name__ == '__main__':\n sentence = \"This is a sample string!\"\n print(remove_punctuations(sentence))" + }, + { + "comment": "Create a model in Python using Linear Regression that can predict the housing prices given the living area and number of rooms.", + "code_snippet": "import numpy as np\nfrom sklearn import linear_model\n\nX = np.array([[2000, 3], [1600, 2.5], [2400, 3.5], [1400, 2], [3000, 4]])\ny = np.array([75000, 43000, 59000, 32000, 85000])\n\nmodel = linear_model.LinearRegression()\nmodel.fit(X, y)\n\nprediction = model.predict([[2200, 3]])" + }, + { + "comment": "Create a loop in Python that prints each item of the following list with a message:", + "code_snippet": "my_list = ['A', 'B', 'C', 'D']\n\nfor item in my_list:\n print(\"The item is: {}\".format(item))" + }, + { + "comment": "Develop a regular expression in Python to match all numeric strings.", + "code_snippet": "import re \n \n# Regular expression to match all numeric strings \npattern = '^[0-9]+$'\n \n# Input string \nstring = '123456789'\n \n# Matching a pattern \nresult = re.match(pattern, string) \nif result: \n print(\"String is a valid numeric string\") \nelse: \n print(\"String isn't a valid numeric string\")" + }, + { + "comment": "Create a BPMN diagram for FOMDES process 1 using Python and the bpmn_pgv library. The diagram should include clusters for Secretar\u00eda Ejecutiva, Presidencia, and Presupuesto/Administraci\u00f3n, with specific tasks and edges defined within each cluster. Additionally, include nodes for SIGEFOMDES Administraci\u00f3n and SISAC, and connect them to the appropriate clusters using dashed edges. Finally, save the diagram as a PNG file named \"proc4.png\" and a DOT file named \"proc4.dot\".", + "code_snippet": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n\"\"\"\nBPMN diagram for FOMDES process 1\n\"\"\"\n\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom __future__ import print_function\nfrom __future__ import unicode_literals\n\nfrom bpmn_pgv import *\nimport pygraphviz as pgv\n\n__author__ = 'mapologo'\n\nPROCESS_LABEL = \"Liquidaci\u00f3n de Cr\u00e9ditos\"\n# A graph for FOMDES processes\nF = pgv.AGraph(strict=False, directed=True)\n\nF.graph_attr.update(label=\"\", rankdir=\"TB\", splines=\"ortho\", labelloc=\"b\",\n size=\"8, 7.5\", forcelabels=\"true\", ranksep=\"0.25\", fontname=\"Liberation Sans Narrow Condensed\")\nF.node_attr.update(fontname=\"Liberation Sans Narrow Condensed\")\nF.edge_attr.update(fontname=\"Liberation Sans Narrow Condensed\", fontsize=\"10\")\n\nse_cluster = {\"se7\": (\"Recibir el documento protocolizado\", \"start\"),\n \"se8\": (\"Revisar el documento protocolizado\", \"human\"),\n \"se9\": (\"\", \"end\")}\n\nse_edges = {\"se7\": {\"se8\": {}},\n \"se8\": {\"se9\": {\"style\": \"invis\"}}}\n\nSE = add_cluster(F, \"se\", \"Secretar\u00eda Ejecutiva\", se_cluster, se_edges)\n\np_cluster = {\"p1\": (\"Firma del cheque\", \"human\"),\n \"p2\": (\"Entregar cheque a beneficiario\", \"message\")}\n\np_edges = {\"p1\":{\"p2\": {}}}\n\nP = add_cluster(F, \"p\", \"Presidencia\", p_cluster, p_edges)\n\npr_cluster = {\"pr2\": (\"Verificar documentaci\u00f3n legal y elaborar certificaci\u00f3n de disponibilidad\", \"human\"),\n \"pr3\": (\"Crear las cuentas por cobrar\", \"human\"),\n \"pr4\": (\"Generar tablas de amortizaci\u00f3n\", \"human\"),\n \"pr5\": (\"Imprimir y firmar orden de liquidaci\u00f3n y cheque\", \"human\")}\n\npr_edges = {\"pr2\": {\"pr3\": {}},\n \"pr3\": {\"pr4\": {}},\n \"pr4\": {\"pr5\": {}}}\n\nPR = add_cluster(F, \"pr\", \"Presupuesto/Administraci\u00f3n\", pr_cluster, pr_edges)\n\nF.add_node(\"SIGEFOMDES Administraci\u00f3n\", image=IMAGE_PATH + \"database.png\", shape=\"plaintext\", label=\"\", xlabel=\"SIGEFOMDES Administraci\u00f3n\")\nF.add_node(\"SISAC\", image=IMAGE_PATH + \"database.png\", shape=\"plaintext\", label=\"\", xlabel=\"SISAC\")\n\nglobal_edges = {\"Beneficiario\": {\"se7\": {\"style\": \"dashed\"}},\n \"se8\": {\"pr2\": {\"style\": \"dashed\"}},\n \"pr3\": {\"SIGEFOMDES Administraci\u00f3n\": {\"style\": \"dashed\"}},\n \"pr4\": {\"SISAC\": {\"style\": \"dashed\"}},\n \"pr5\": {\"p1\": {\"style\": \"dashed\"}},\n \"p2\": {\"se9\": {\"style\": \"dashed\"}, \"Beneficiario\": {\"style\": \"dashed\"}}}\n\nadd_edges(F, global_edges)\n\nF.draw(\"proc4.png\", prog='dot')\nF.write(\"proc4.dot\")\n" + }, + { + "comment": "Write a python function to calculate an exponential series", + "code_snippet": "def exponential_series(x,n):\n sum = 0\n for i in range(n+1):\n sum += x ** i\n return sum" + }, + { + "comment": "Design an algorithm in Python to add two large numbers represented as strings.", + "code_snippet": "def add_large_numbers(num1, num2):\n num1 = num1[::-1]\n num2 = num2[::-1] \n carry = 0\n result = \"\" \n \n # Iterate over the length of the length of larger string \n for i in range(max(len(num1), len(num2))): \n if i < len(num1):\n digit1 = int(num1[i])\n else:\n digit1 = 0\n\n if i < len(num2):\n digit2 = int(num2[i])\n else:\n digit2 = 0\n \n sum_total = digit1 + digit2 + carry \n carry = sum_total // 10 \n\n result += str(sum_total % 10) \n\n # Add remaining carry \n if carry > 0: \n result += str(carry) \n\n return result[::-1]\n\nprint(add_large_numbers(\"111\", \"1337\"))\n# Output: 1448" + }, + { + "comment": "Design an algorithm in Python, that takes an array and sort it in ascending order.", + "code_snippet": "def sort_ascending(array):\n array.sort()\n return array\n\nsort_ascending([10, 3, 9, 1, 15, 2]) # [1, 2, 3, 9, 10, 15]" + }, + { + "comment": "Complete the Python class below so that it can calculate the sum of two integers.", + "code_snippet": "class Sum:\n def __init__(self, x, y):\n self.x = x\n self.y = y\n \n def add(self):\n return self.x + self.y" + }, + { + "comment": "Suggest a completion for the following Python code to check if a given number is an Armstrong number.", + "code_snippet": "def is_armstrong_number(num):\n order = len(str(num))\n sum = 0\n temp = num\n while temp > 0:\n digit = temp % 10\n sum += digit ** order\n temp //= 10\n if num == sum:\n return True \n else:\n return False" + }, + { + "comment": "Write an algorithm in Python that finds the maximum sum of an array of non-negative integers, given an upper limit value.", + "code_snippet": "def findMaxSum(limit, array):\n maxSum = 0\n for i in range(len(array)):\n currentSum = 0\n for j in range(i, len(array)):\n currentSum += array[j]\n if currentSum <= limit and currentSum > maxSum:\n maxSum = currentSum\n return maxSum" + }, + { + "comment": "Write a Python program to generate n-grams of the given text with a window size of 3.", + "code_snippet": "from collections import Counter\n\n\ndef generate_ngrams(text, window_size):\n text = text.lower().split(' ')\n ngrams = []\n for n in range(window_size, len(text)+1):\n for i in range(len(text)-n+1):\n ngrams.append(' '.join(text[i:i+n]))\n return Counter(ngrams)\n\n\ntext = \"The quick brown fox jumps over the lazy dog\"\nwindow_size = 3\n\nngrams_count = generate_ngrams(text, window_size)\n\nprint('\\nNGRAMS COUNT:',ngrams_count)\n\n# Output\n# NGRAMS COUNT: Counter({'the quick brown': 3,\n# 'quick brown fox': 2,\n# 'over the lazy': 1,\n# 'brown fox jumps': 1,\n# 'fox jumps over': 1,\n# 'the lazy dog': 1,\n# 'jumps over the': 1,\n# 'quick brown fox jumps': 1})" + }, + { + "comment": "Output the Fibonacci sequence as a list of integers in Python", + "code_snippet": "def fibonacci_sequence(n): \n # Creating list of length n \n fib_list = [0]*n \n \n # first and second terms \n fib_list[0] = 0\n fib_list[1] = 1\n \n # Application of the recursive algorithm \n for i in range(2, n): \n fib_list[i] = fib_list[i-1] + fib_list[i-2] \n \n return fib_list" + }, + { + "comment": "Develop a machine learning algorithm in Python to identify apples from bananas.", + "code_snippet": "import numpy as np\nimport matplotlib.pyplot as plt\nfrom sklearn.svm import SVC\n\n# Load data\nX = np.array([[1,2,3], [-1,2,5], [-1,2,7], [5,5,5], [3,3,3], [5,5,7]])\ny = np.array([0, 0, 0, 1, 0, 1])\n\n# Initialize classifier\nclf = SVC(kernel='linear')\n\n# Fit data\nclf.fit(X, y)\n\n# Test classifier\nx_test = np.array([[2,2,2], [4,4,4]])\n\nprediction = clf.predict(x_test)\nprint(prediction)" + }, + { + "comment": "Write a Python program to convert a list of lists into a dictionary where the first element of each list is the key and the rest of the elements are the values.", + "code_snippet": "dict1 = {}\nfor lst in [list1, list2]:\n key = lst[0]\n val = lst[1:]\n dict1[key] = val\n\nprint(dict1)\n# Output: {'apple': ['red', 'green'], 'banana': ['yellow', 'green']}" + }, + { + "comment": "Generate a fuzzy search algorithm in Python that can match strings with near similarities.", + "code_snippet": "def find_matches(query, choices, threshold):\n # Convert query and choices to lower case\n query, choices = query.lower(), [choice.lower() for choice in choices]\n # Initialize empty list to store matches\n matches = []\n \n # Loop through each choice\n for choice in choices:\n # Calculate Levenshtein distance between query and choice\n distance = levenshtein_distance(query, choice)\n # If distance is less than threshold, append choice to matches\n if distance <= threshold:\n matches.append(choice)\n \n return matches" + }, + { + "comment": "Write a Python program to generate a random password. The program should generate a string of 8 characters (numbers, letters and special characters)", + "code_snippet": "import random\nimport string\n\ndef generate_password():\n password_characters = string.ascii_letters + string.digits + string.punctuation\n password = ''.join(random.choice(password_characters) for i in range(8))\n print(password)\n\ngenerate_password()" + }, + { + "comment": "Is it possible to create a HTML page that displays a table of contents from the data stored in a database?", + "code_snippet": "Yes, it is possible to create a HTML page that displays a table of contents from the data stored in a database. You can use HTML, CSS, and JavaScript to create the table and a server-side language such as PHP or Python to query the database and retrieve the relevant data. Once you have the data, you can use JavaScript to render the table within the HTML page." + }, + { + "comment": "Write a Python program to compute the average salary of people over a given range of numbers from the dataset 'salary.csv'.", + "code_snippet": "import csv\n\ndef get_average_salary(filename):\n total = 0\n count = 0\n\n with open(filename, 'r') as csvfile:\n csvreader = csv.reader(csvfile)\n next(csvreader) # skip header\n\n # loop through the CSV rows\n for row in csvreader:\n total += int(row[1])\n count += 1\n \n return total/count\n\naverage_salary = get_average_salary('salary.csv')\nprint('Average Salary: ', average_salary)\n\n# Output: \n# Average Salary: 2000.0" + }, + { + "comment": "Implement a supervised learning algorithm in Python for a classification task using the iris dataset.", + "code_snippet": "# Import necessary libraries\nimport numpy as np\nimport pandas as pd\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.preprocessing import StandardScaler\nfrom sklearn.neighbors import KNeighborsClassifier\nfrom sklearn.metrics import confusion_matrix\n\n# Load and explore the data\ndataset = pd.read_csv('iris.csv')\nX = dataset.iloc[:, :-1].values\ny = dataset.iloc[:, -1].values\n\n# Split the dataset into training and test sets\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)\n\n# Preprocess the data\nscaler = StandardScaler()\nX_train = scaler.fit_transform(X_train)\nX_test = scaler.transform(X_test)\n\n# Define the model\nclf = KNeighborsClassifier(n_neighbors=5)\n\n# Fit the model to the training set\nclf.fit(X_train, y_train)\n\n# Make predictions on the test set\ny_pred = clf.predict(X_test)\n\n# Evaluate the model's performance\ncm = confusion_matrix(y_test, y_pred)\nprint(cm)" + }, + { + "comment": "Improve the following Python code to check if a number is in the range of 1 to 10 (inclusive).", + "code_snippet": "def check_number(num):\n if (num > 0 and num < 11):\n return True\n else:\n return False" + }, + { + "comment": "Create an algorithm in Python to generate the first n elements of the Sierpinski triangle.", + "code_snippet": "def sierpinski_triangle(n): \n # Drawing lines for first row \n for i in range(2**n): \n print(' ', end=\" \") \n \n # loop for printing n rows \n for i in range(1, n+1): \n # bit pattern for first and \n # last line of each row \n for j in range(2**(i-1), 2**i): \n print('1', end=\" \") \n print() \n \n # inner rows have opposite bit pattern \n if i > 1: \n for j in range(2**(i-1)+1, 2**i-1): \n print('0', end=\" \") \n print() \n \nsierpinski_triangle(6)" + }, + { + "comment": "Write a function in Python to count the number of vowels in a string.", + "code_snippet": "def count_vowels(string):\n count = 0\n vowels = set(\"aeiouAEIOU\")\n for letter in string:\n if letter in vowels:\n count += 1\n return count" + }, + { + "comment": "Implement a function f() in Python that takes an argument n and prints the multiplication table of n", + "code_snippet": "def f(n):\n for i in range(1, 11):\n print(\"{} * {} = {}\".format(n, i, n*i))" + }, + { + "comment": "Write a python program to optimize the given objective function.", + "code_snippet": "from scipy.optimize import minimize \n\ndef obj_func(x):\n # objective function\n # ...\n\ndef optimize(): \n # set up optimization problem\n x0 = [0.0, 0.0, 0.0] \n res = minimize(obj_func, x0, method='nelder-mead', options={'xtol': 1e-8, 'disp': True}) \n return res.x\n\nprint(optimize())" + }, + { + "comment": "Create a Python generator that returns numbers from a given list.", + "code_snippet": "def list_generator(input_list):\n for item in input_list:\n yield item\n\ngen = list_generator([1,3,5,7,9])\nfor item in gen:\n print(item)" + }, + { + "comment": "Develop a Python program to create an autocomplete system that predicts words based on the input text.", + "code_snippet": "def autocomplete(input_text):\n # Generate the word candidates\n word_candidates = generate_candidates(input_text)\n # Filter the word candidates \n filtered_words = filter_candidates(word_candidates)\n # Rank the words and return the top 5 \n sorted_words = rank_words(filtered_words)\n return sorted_words[:5]" + }, + { + "comment": "Write a Python code snippet to print the unique elements of a given list.", + "code_snippet": "def print_unique(my_list):\n seen = set()\n for x in my_list:\n if x not in seen:\n print(x)\n seen.add(x)" + }, + { + "comment": "Create a Python program that convert a given string to a list of integers.", + "code_snippet": "def to_int_list(s):\n return [int(x) for x in s.split(',')]" + }, + { + "comment": "Create a basic blockchain in Python using only the core modules", + "code_snippet": "import hashlib\nimport json\n\nclass Blockchain:\n\n def __init__(self):\n self.chain = []\n self.transactions = []\n\n def create_block(self, nonce, previous_hash):\n block = {\n 'block_number': len(self.chain) + 1,\n 'timestamp': self._current_timestamp(),\n 'nonce': nonce,\n 'previous_hash': previous_hash\n }\n self.chain.append(block)\n return block\n\n def _current_timestamp(self):\n return round(time.time() * 1000)\n\n def hash_block(self, block):\n string_object = json.dumps(block, sort_keys=True)\n block_string = string_object.encode()\n raw_hash = hashlib.sha256(block_string)\n hex_hash = raw_hash.hexdigest()\n return hex_hash" + }, + { + "comment": "Create a Python program to remove all duplicate elements from a list and preserving the original order.", + "code_snippet": "# Program to remove duplicate elements\n\ndef remove_duplicates(nums):\n new_list = []\n for num in nums:\n if num not in new_list:\n new_list.append(num)\n \nreturn new_list\n\n# Main program\nnums = [1, 3, 3, 5, 5, 7]\ndedup_nums = remove_duplicates(nums)\nprint(dedup_nums) # [1, 3, 5, 7]" + }, + { + "comment": "Generate a voltage signal with random noise using a Python script.", + "code_snippet": "import numpy as np \n\nfreq = 250 \namplitude = 1 \n\nt= np.linspace(0, 1, 1000) \nvoltage_signal = np.sin(2*np.pi*freq*t) + np.random.normal(0, 0.1, 1000)" + }, + { + "comment": "Write a Python function that takes an array of numbers and returns an array with the greatest and smallest values.", + "code_snippet": "def min_max(arr):\n min_val = min(arr)\n max_val = max(arr)\n return [min_val, max_val]\n\nresult = min_max([3, 4, 2, 8, 15, 6])\nprint(result)" + }, + { + "comment": "Construct a Python code that accepts a string as an input and returns the total number of vowels in the string", + "code_snippet": "def count_vowels(string): \n vowels = \"aeiou\"\n count = 0\n for s in string:\n if s.lower() in vowels:\n count += 1\n return count" + }, + { + "comment": "Generate a Python program that prints out every number from 0 to 10, but with every number being multiplied by 2.", + "code_snippet": "for i in range(11):\n print(i*2)" + }, + { + "comment": "Create a Python program that takes a string and indicates whether it is a palindrome or not.", + "code_snippet": "def is_palindrome(s):\n s = s.lower()\n left = 0\n right = len(s) - 1\n \n while left < right:\n if s[left] != s[right]:\n return False\n left += 1\n right -= 1\n return True\n \nprint(is_palindrome(\"racecar\"))" + }, + { + "comment": "Generate a machine learning model in Python using scikit-learn for classifying digits in the MNIST dataset.", + "code_snippet": "# Import the necessary libraries \nfrom sklearn.datasets import fetch_openml\nimport numpy as np\nfrom sklearn.linear_model import LogisticRegression\n\n#Load the dataset\nmnist = fetch_openml('mnist_784')\n\n# Split into features and labels\nX = mnist.data\ny = mnist.target\n\n# Reshape data to be valid\nX = X.reshape((X.shape[0], -1))\nprint(X.shape, y.shape)\n\n# Create a Logistic Regression classifier \nclf = LogisticRegression()\n\n# Fit the model to the data \nclf.fit(X, y)" + }, + { + "comment": "Develop a Python script to generate an RSA public/private key pair.", + "code_snippet": "from Crypto.PublicKey import RSA\n\ndef generate_key_pair():\n key = RSA.generate(2048)\n pub_key = key.publickey().export_key().decode()\n with open('public.pem', 'w') as file:\n file.write(pub_key)\n \n priv_key = key.export_key().decode()\n with open('private.pem', 'w') as file:\n file.write(priv_key)\n\ngenerate_key_pair()" + }, + { + "comment": "Create a web application in Python using Flask that will take user input and generate an HTML page with the input.", + "code_snippet": "from flask import Flask, render_template, request\n\napp = Flask(__name__)\n\n@app.route('/', methods=['GET', 'POST'])\ndef home():\n if request.method == 'POST':\n input_text = request.form.get('input_text')\n return render_template('result.html', input_text=input_text)\n return render_template('index.html')\n\nif __name__ == '__main__':\n app.run(debug=True)\n\n// result.html file\n\n \n

Your Input:

\n

{{input_text}}

\n \n" + }, + { + "comment": "Implement a basic machine learning model in Python that performs binary classification on the given data.", + "code_snippet": "from sklearn import linear_model\nfrom sklearn.metrics import accuracy_score\n\nX = [[0.3, 0.2, 0.6], [0.3, 0.1, 0.4], [0.2, 0.3, 0.4], [0.7, 0.4, 0.2], [0.5, 0.2, 0.1]]\ny = [1, 0, 0, 1, 0]\n\nmodel = linear_model.LogisticRegression()\nmodel.fit(X, y)\n\ny_pred = model.predict(X)\naccuracy = accuracy_score(y, y_pred)\n\nprint('Model accuracy:', accuracy)" + }, + { + "comment": "Design a machine learning algorithm in Python that can identify whether a given sentence is an 'affirmative' sentence or a 'negative' sentence.", + "code_snippet": "import re \nimport nltk\nnltk.download('stopwords')\nfrom nltk.corpus import stopwords \n\n# Function to find the negation words\ndef findNegation(sentence):\n # save all the negation words\n negationwords = {'not', 'never', 'no', 'none', 'non', 'neither',\n 'nobody', 'nowhere', 'cannot', 'couldnt', 'shouldnt', \n 'wouldnt', 'dont', 'didnt', 'hasnt', 'havent', 'isnt', 'arent'} \n words = nltk.word_tokenize(sentence)\n neg = []\n for word in words:\n if word in negationwords:\n neg.append(word)\n return neg\n\n# Function to check if the sentence is affirmative or negative\ndef isAffirmativeorNegative(sentence):\n negationwords = findNegation(sentence)\n if len(negationwords)==0: \n return \"Affirmative\" \n else: \n return \"Negative\" \n\nsentence = \"He always comes late but I dont mind.\"\nresult = isAffirmativeorNegative(sentence) \nprint(result) # prints Negative" + }, + { + "comment": "Create an environment object that can execute and analyze Python code. The environment includes a set of predefined global variables and functions, as well as the ability to add additional global variables. The environment can execute Python code and analyze it for variable usage and imports. The environment also includes a stdout object that can be used to capture and display output from executed code.", + "code_snippet": "import os\nimport ast\nimport traceback\nimport time\nimport sys\nimport types\nimport builtins\nimport collections\nimport astor\nimport weakref\nfrom .jsonify import jsonify, jsonify_print, jsonify_print_expr\nfrom .datalayer import Analysis, Execution, FileEdit\nfrom .router import send\nfrom . import stdlib\n\ndef now():\n return int(time.time() * 1000)\n\nclass Environment:\n\n extra_globals = {}\n\n active = weakref.WeakSet()\n\n def __init__(self, path):\n self.path = path\n self.globals = {\n \"print\": jsonify_print,\n \"print_expr\": jsonify_print_expr,\n \"jsonify\": jsonify,\n \"jsonify_print\": jsonify_print,\n \"listdir\": stdlib.listdir,\n \"__builtins__\": __builtins__,\n \"FILES\": stdlib.FilesDict(self.path),\n }\n for name in stdlib.builtin_names:\n self.globals[name] = getattr(stdlib, name)\n self._cached_analysis = {}\n self.active.add(self)\n\n predefined_names = set([\"parsed\"])\n\n def init_commands(self):\n \"\"\"Returns a list of commands that represent the existing state of the\n filesystem\"\"\"\n for path in os.listdir(self.path):\n if path.endswith(\".json\"):\n continue\n if not os.path.isfile(os.path.join(self.path, path)):\n continue\n try:\n with open(os.path.join(self.path, path), \"r\") as fp:\n content = fp.read()\n yield FileEdit(filename=path, content=content, external_edit=True)\n except UnicodeDecodeError:\n pass\n\n def fixup_globals(self):\n for name, value in self.extra_globals.items():\n self.globals.setdefault(name, value)\n\n def execute(self, filename, content, subexpressions=False):\n print(\"Executing\", filename, subexpressions)\n self.fixup_globals()\n stdout = Stdout()\n compiled = None\n try:\n parsed = ast.parse(content, filename, mode='exec')\n RewriteExprToPrint(subexpressions).walk(parsed)\n var_inspect = VariableInspector()\n var_inspect.walk(parsed)\n print(\"varsed used:\", sorted(var_inspect.used), \"set:\", sorted(var_inspect.set), \"imported:\", var_inspect.imports)\n compiled = compile(parsed, filename, 'exec')\n except:\n stdout.write(traceback.format_exc())\n\n def displayhook(value):\n stdout.write_repr(value)\n\n orig_displayhook = sys.displayhook\n sys.displayhook = displayhook\n orig_stdout = sys.stdout\n orig_stderr = sys.stderr\n sys.stdout = stdout\n sys.stderr = stdout\n self.globals[\"parsed\"] = parsed\n self.globals[\"ast\"] = ast\n globals_before = self.globals.copy()\n start = time.time()\n try:\n try:\n if compiled:\n exec(compiled, self.globals)\n except:\n traceback.print_exc()\n finally:\n end = time.time()\n sys.dipslayhook = orig_displayhook\n sys.stdout = orig_stdout\n sys.stderr = orig_stderr\n local_scope = dict(\n (name, value)\n for name, value in self.globals.items()\n if name not in globals_before or globals_before[name] is not value)\n defines = dict(\n (key, {\n \"json\": jsonify(local_scope[key]),\n \"type\": str(type(local_scope[key])),\n })\n for key in local_scope\n if not isinstance(local_scope[key], types.ModuleType))\n command = Execution(\n filename=filename,\n content=content,\n emitted=stdout.emitted,\n defines=defines,\n start_time=int(start * 1000),\n end_time=int(end * 1000),\n exec_time=int((end - start) * 1000),\n with_subexpressions=subexpressions,\n )\n send(command)\n\n def analyze(self, filename, content):\n print(\"Analyzing\", filename)\n properties = {}\n try:\n parsed = ast.parse(content, filename, mode='exec')\n var_inspect = VariableInspector()\n var_inspect.walk(parsed)\n except:\n return\n properties[\"parse_error\"] = jsonify(traceback.format_exc())\n else:\n properties = var_inspect.json\n if properties != self._cached_analysis.get(filename):\n self._cached_analysis[filename] = properties\n send(Analysis(filename=filename, content=content, properties=properties))\n\n\nclass VariableInspector(astor.TreeWalk):\n\n builtin_names = dir(builtins)\n\n def init_variables(self):\n self.used = set()\n self.set = set()\n self.imports = set()\n self.in_target = False\n\n @property\n def json(self):\n used = set(self.used)\n for key in self.builtin_names:\n used.discard(key)\n for key in self.set:\n used.discard(key)\n for key in Environment.predefined_names:\n used.discard(key)\n return {\n \"variables_used\": list(used),\n \"variables_set\": list(self.set),\n \"imports\": list(self.imports)\n }\n\n def pre_arg(self):\n self.set.add(self.cur_node.arg)\n\n def pre_Name(self):\n if self.in_target:\n # Actually this is a set\n self.set.add(self.cur_node.id)\n else:\n self.used.add(self.cur_node.id)\n\n def pre_For(self):\n self.process_assignment(self.cur_node.target)\n\n def pre_Assign(self):\n self.process_assignment(self.cur_node.targets)\n\n def pre_withitem(self):\n self.process_assignment(self.cur_node.optional_vars)\n\n def pre_ExceptHandler(self):\n if self.cur_node.name:\n self.set.add(self.cur_node.name)\n\n def pre_alias(self):\n # Used in imports\n name = self.cur_node.asname or self.cur_node.name\n name = name.split(\".\")[0]\n self.set.add(name)\n self.imports.add(name)\n\n def pre_FunctionDef(self):\n self.set.add(self.cur_node.name)\n\n def pre_ListComp(self):\n self.process_assignment(self.cur_node.elt)\n\n def process_assignment(self, item):\n if isinstance(item, list):\n for x in item:\n self.process_assignment(x)\n return\n old_in_target = self.in_target\n self.in_target = True\n try:\n self.walk(item)\n finally:\n self.in_target = old_in_target\n\nclass RewriteExprToPrint(astor.TreeWalk):\n\n expr_node_types = \"\"\"\n UnaryOp\n BinOp\n BoolOp\n Compare\n Call\n IfExp\n Attribute\n Subscript\n ListComp SetComp GeneratorExp DictComp\n \"\"\".split()\n # Skipped:\n # UAdd USub Not Invert\n # Add Sub Mult Div FloorDiv Mod Pow LShift RShift BitOr BitXor BitAnd MatMult\n # And Or\n # Eq NotEq Lt Gt GtE Is IsNot In NotIn\n # Index Slice ExtSlice\n\n def __init__(self, subexpressions=False):\n self.subexpressions = subexpressions\n self.id_counter = 0\n astor.TreeWalk.__init__(self)\n if self.subexpressions:\n for method in self.expr_node_types:\n self.pre_handlers[method] = self.save_node_name\n self.post_handlers[method] = self.fixup_subexpressions\n del self.post_handlers['Module']\n\n def post_Name(self):\n if not self.subexpressions:\n return\n if isinstance(self.cur_node.ctx, ast.Load):\n self.replace(self.rewrite_expr(self.cur_node))\n\n def post_Module(self):\n node = self.cur_node\n node.body = [\n self.rewrite_expr(n) if isinstance(n, ast.Expr) else n\n for n in node.body]\n\n def save_node_name(self):\n self.cur_node.astor_repr = astor.to_source(self.cur_node)\n\n def fixup_subexpressions(self):\n new_node = self.rewrite_expr(self.cur_node, self.cur_node.astor_repr)\n self.replace(new_node)\n\n def rewrite_expr(self, node, expr_string=None):\n if expr_string is None:\n expr_string = astor.to_source(node)\n node_string = ast.Str(s=expr_string)\n self.id_counter += 1\n if isinstance(node, ast.Expr):\n new_node = ast.Expr(\n ast.Call(\n func=ast.Name(id='print_expr', ctx=ast.Load()),\n args=[node_string, node.value, ast.Num(n=self.id_counter)],\n keywords=[],\n starargs=None,\n )\n )\n new_node.is_print_expr = True\n else:\n new_node = ast.Call(\n func=ast.Name(id='print_expr', ctx=ast.Load()),\n args=[node_string, node, ast.Num(n=self.id_counter)],\n keywords=[],\n starargs=None,\n )\n new_node.is_print_expr = True\n ast.fix_missing_locations(new_node)\n return new_node\n\n\nclass Stdout:\n\n total_exprs_limit = 100\n expr_limit = 10\n\n def __init__(self):\n self.emitted = []\n self.total_exprs_printed = 0\n self.exprs_printed = collections.Counter()\n\n def write(self, content):\n self.emitted.append({\n \"type\": \"print\",\n \"time\": now(),\n \"parts\": [{\"type\": \"str\", \"str\": content}],\n })\n\n def writejson(self, json):\n assert json.get(\"type\"), \"JSON objects must have a type\"\n json.setdefault(\"time\", now())\n self.emitted.append(json)\n\n def write_repr(self, o):\n self.emitted.append(jsonify(o))\n\n def flush(self):\n pass\n\ndef add_global(name, value):\n Environment.extra_globals[name] = value\n Environment.predefined_names.add(name)\n for env in Environment.active:\n env.globals.setdefault(name, value)\n" + }, + { + "comment": "Write a Python class to modify the case of the string", + "code_snippet": "class StringCaseModifier:\n def __init__(self, string):\n self.string = string\n\n def to_upper(self):\n return self.string.upper()\n\n def to_lower(self):\n return self.string.lower()\n \n def to_title(self):\n return self.string.title()\n\nif __name__ == '__main__':\n test_string = 'Hello World'\n string_modifier = StringCaseModifier(test_string)\n print(string_modifier.to_upper())\n print(string_modifier.to_lower())\n print(string_modifier.to_title())" + }, + { + "comment": "Generate a Python program to reverse the order of words in a given string.", + "code_snippet": "def reverse_words(str):\n return \" \".join(str.split()[::-1])" + }, + { + "comment": "Write a Python program to replace a given string with another string.", + "code_snippet": "sentence = \"I love walking on the beach\"\nold_word = \"walking\"\nnew_word = \"swimming\"\n\nnew_sentence = sentence.replace(old_word, new_word)\n\nprint(\"The new sentence is: '{}'\".format(new_sentence))" + }, + { + "comment": "Write a python program to merge two lists of integers into one sorted list without using the in-built sort function.", + "code_snippet": "def merge_sort(list1, list2): \n merged_list = list1 + list2 \n for i in range(len(merged_list)): \n min_idx = i \n for j in range(i+1, len(merged_list)): \n if merged_list[min_idx] > merged_list[j]: \n min_idx = j \n merged_list[i], merged_list[min_idx] = merged_list[min_idx], merged_list[i] \n return merged_list \n \nlist1 = [3, 5, 9, 1, 8] \nlist2 = [4, 11, 7, 2]\n \nprint(merge_sort(list1, list2))" + }, + { + "comment": "Create a Python dictionary with three keys named \"Name\", \"Address\" and \"Phone\".", + "code_snippet": "info = {\n 'Name':Name,\n 'Address':Address,\n 'Phone':Phone\n}" + }, + { + "comment": "Implement a chatbot in Python that can provide customer support in a restaurant.", + "code_snippet": "import random\n\n# list of possible answers\npossible_responses = [\n 'We serve a variety of dishes - from salads to pizzas to steaks!',\n 'Check out our menu for a full list of options',\n 'We serve a variety of dishes, including traditional Italian, Mexican, and American fare. What would you like to try?',\n 'We have a great selection of meals! What kind of dish are you looking for?',\n 'We have a unique selection of meals - have you checked out our menu?'\n]\n\n# read the user's question\nwith open('random_user_question.txt') as user_question:\n question = user_question.read()\n\n# choose a random response\nresponse = random.choice(possible_responses)\n\n# display the response to the user\nprint(response)" + }, + { + "comment": "Design a Python program to simulate a simple ATM machine.", + "code_snippet": "# account class with the necessary functions \nclass Account:\n def __init__(self, name, balance):\n self.name = name\n self.balance = balance\n\n def deposit(self, amount):\n self.balance += amount\n\n def withdrawal(self, amount):\n self.balance -= amount\n\n# ATM class with the necessary functions\nclass ATM:\n def __init__(self):\n self.accounts = []\n\n def createAccount(self, name, balance):\n account = Account(name, balance)\n self.accounts.append(account)\n\n def deposit(self, name, amount):\n for account in self.accounts:\n if account.name == name:\n account.deposit(amount)\n\n def withdrawal(self, name, amount):\n for account in self.accounts:\n if account.name == name:\n account.withdrawal(amount)\n\n def printBalance(self, name):\n for account in self.accounts:\n if account.name == name:\n print(name, \" Balance: \", account.balance)" + }, + { + "comment": "Create a program in Python which will take in a list of strings, and print out the longest string in the list.", + "code_snippet": "def longest_string(str_list): \n longest_str = '' \n for str in str_list: \n if len(str) > len(longest_str): \n longest_str = str \n \n return longest_str \n\nstring_list = ['foo', 'test', 'longstring', 'bar'] \nlong_string = longest_string(string_list) \n\nprint(long_string)" + }, + { + "comment": "Create a program in Python that will find the smallest number in a list of numbers.", + "code_snippet": "def find_smallest_number(numbers):\n smallest = numbers[0] \n for num in numbers:\n if num < smallest:\n smallest = num\n return smallest\n\nprint(find_smallest_number([5, 4, 12, 17, 9]))" + }, + { + "comment": "Generate a Python code to compute the moving average of time-series data points.", + "code_snippet": "def moving_average(data_points, window):\n moving_average = []\n for index in range(len(data_points)):\n start = 0 if index-window+1 < 0 else index-window+1\n window_data = data_points[start:index+1]\n average = sum(window_data)/len(window_data)\n moving_average.append(average)\n \n return moving_average\n \nwindow = 3\ntime_series = [3, 5, 7, 2, 8, 10, 11, 65, 72, 81, 99, 100, 150]\nmoving_average = moving_average(time_series, window)\nprint(moving_average)" + }, + { + "comment": "Create a Python program to filter an array by a given criteria.", + "code_snippet": "# Function to filter an array by a given criteria\ndef filter_array(array, criteria):\n # Create an empty list\n filtered_array = []\n # Iterate through the array\n for value in array:\n # Check if it matches the criteria\n if criteria(value):\n # If it matches, add it to the list\n filtered_array.append(value)\n\n # Return the filtered array\n return filtered_array\n\n# Input criteria\ndef criteria(x):\n return x % 5 == 0\n\nresult = filter_array(array, criteria)\nprint(result) # Outputs [5, 10, 15, 20, 25, 30]" + }, + { + "comment": "Create a Python function to find the maximum number from a list of non-negative integers.", + "code_snippet": "def find_max(list): \n max_num = 0\n for i in list: \n if i > max_num: \n max_num = i\n \n return max_num\n\nlist = [1, 3, 12, 5, 8, 10]\nmax_num = find_max(list)\nprint(\"Maximum number is:\", max_num)" + }, + { + "comment": "Write a Python function that takes a list of strings and returns the concatenation of all the elements with a separator/delimiter.", + "code_snippet": "def concatenate_strings(strings, separator):\n return separator.join(strings)" + }, + { + "comment": "Come up with a code in Python to find the union of two lists.", + "code_snippet": "list1 = [1, 2, 3, 4, 5]\nlist2 = [3, 4, 5, 6, 7]\n\ndef unionList(list1, list2):\n return set(list1 + list2)\n\nresult = unionList(list1, list2)\nprint(result)" + }, + { + "comment": "Construct a python dictionary containing student names and marks as key-value pairs.", + "code_snippet": "student_marks = { \n \"John\" : 90, \n \"Levi\" : 85, \n \"Jill\" : 95, \n \"Sara\" : 75\n}" + }, + { + "comment": "Write a code snippet for a simple linear regression model in Python.", + "code_snippet": "import pandas as pd\nimport matplotlib.pyplot as plt\nfrom sklearn import linear_model\n\n# Read data from CSV\ndata = pd.read_csv('data.csv')\n\n# Set X and Y\nX = data['X']\nY = data['Y']\n\n# Create linear regression model\nmodel = linear_model.LinearRegression()\n\n# Train the model\nmodel.fit(X, Y)\n\n# Make predictions\nY_pred = model.predict(X)\n\n# Visualize the results\nplt.scatter(X, Y)\nplt.plot(X, Y_pred, color='red')\nplt.show()" + }, + { + "comment": "Write code in Python to implement a linked list using classes.", + "code_snippet": "class Node:\n \"\"\"Node class to represent the node in a linked list\"\"\"\n def __init__(self, data):\n self.data = data\n self.next = None\n\n\nclass LinkedList:\n \"\"\"LinkedList class to represent the entire linked list\"\"\"\n def __init__(self):\n self.head = None\n \n def print_list(self):\n node = self.head\n while(node):\n print(node.data)\n node = node.next\n\n# Creating a linked list \nlinked_list = LinkedList()\n\n# Creating the nodes\nnode1 = Node(1)\nnode2 = Node(2)\nnode3 = Node(3)\n\n# Linking the nodes\nlinked_list.head = node1\nnode1.next = node2\nnode2.next = node3\n\n# Printing the linked list\nlinked_list.print_list()" + }, + { + "comment": "Construct an XML document using Python which contains the following data.", + "code_snippet": "import xml.etree.ElementTree as ET\n\n# creating the root element\ndata = ET.Element('data')\n\nitems = ['Item1', 'Item2', 'Item3']\n\n# loop over items\nfor item in items:\n # creating sub elements\n item_element = ET.SubElement(data, 'item')\n\n # assign the value for the sub elements\n item_element.text = item\n\n# write the XML Tree\ntree = ET.ElementTree(data)\ntree.write('data.xml')" + }, + { + "comment": "Make a Python program generating numbers", + "code_snippet": "def generate_numbers():\n numbers = []\n for i in range(10):\n numbers.append(random.randint(0,10))\n return numbers" + }, + { + "comment": "Convert this sql query into a python program", + "code_snippet": "import datetime, pyodbc\n\n# Establish a connection to the database\nconn = pyodbc.connect(\"\")\ncursor = conn.cursor()\n\n# Get the year of the order date\nsql = \"SELECT * FROM orders\"\nquery_date = datetime.date.today().year\nwhere_clause = \"WHERE YEAR(order_date) = ?\"\n\n# Execute the query\ncursor.execute(sql + \" \" + where_clause, query_date)\nresults = cursor.fetchall()\n\n# Output the results\nfor result in results:\n print(result)" + }, + { + "comment": "This code loads a configuration file and libraries, imports necessary modules, defines two custom colormaps, loads a data file, performs cubic spline interpolation on the data, applies a threshold to remove small values, and generates three plots: a histogram, an interpolated image, and a contour plot. To use this code, make sure to have the necessary files and libraries in the correct paths, and adjust the parameters as needed for your data.", + "code_snippet": "# -*- coding: utf-8 -*-\n\nimport os, sys\nprint(\"CWD: \" + os.getcwd() )\n\n# Load configuration file before pyplot\nconfig_path = os.path.abspath('../matplotlib/')\nsys.path.append(config_path)\nimport configuration as config\n\n# Library path\nlib_path = os.path.abspath('../../lib')\nsys.path.append(lib_path)\nimport framemanager_python\n\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport scipy.interpolate\n\n\n# Color map\n# Define \"bds_highcontrast\" color map by Britton Smith from http://yt-project.org/ \ncdict = {'red': ((0.0, 80/256., 80/256.),\n (0.2, 0.0, 0.0),\n (0.4, 0.0, 0.0),\n (0.6, 256/256., 256/256.),\n (0.95, 256/256., 256/256.),\n (1.0, 150/256., 150/256.)),\n 'green': ((0.0, 0/256., 0/256.),\n (0.2, 0/256., 0/256.),\n (0.4, 130/256., 130/256.),\n (0.6, 256/256., 256/256.),\n (1.0, 0.0, 0.0)),\n 'blue': ((0.0, 80/256., 80/256.),\n (0.2, 220/256., 220/256.),\n (0.4, 0.0, 0.0),\n (0.6, 20/256., 20/256.),\n (1.0, 0.0, 0.0))}\n\nplt.register_cmap(name='bds_highcontrast', data=cdict) \n\n# Define YELLOW_RED colormap: each row consists of (x, y0, y1) where the x must increase from 0 to 1\n#row i: x y0 y1\n# /\n# /\n#row i+1: x y0 y1\ncdict = {'red': ((0.0, 0.9, 0.9),\n (1.0, 0.9, 0.9)),\n 'green': ((0.0, 0.9, 0.9),\n (1.0, 0.0, 0.0)),\n 'blue': ((0.0, 0.0, 0.0),\n (1.0, 0.0, 0.0))}\nplt.register_cmap(name='YELLOW_RED', data=cdict) \n#cmap=plt.get_cmap('YELLOW_RED')\n#cmap=plt.get_cmap('autumn')\n#cmap=plt.get_cmap('gist_heat')\n#cmap=plt.get_cmap('Spectral_r')\n#cmap.set_under([0.0, 0.0, 0.0])\n\n\n\n# Load profile\nprofileName = os.path.abspath(\"foam_ball_short.dsa\")\nframeID = 230\n\nframeManager = framemanager_python.FrameManagerWrapper()\nframeManager.load_profile(profileName);\nnumTSFrames = frameManager.get_tsframe_count();\n\nmatrixID = 1\n\n# Load single frame\ntsframe = np.copy( frameManager.get_tsframe(frameID, matrixID) );\n\ncols = tsframe.shape[1]\nrows = tsframe.shape[0]\n\n# Add padding on border\npadding = 2\nv_padding = np.empty((padding, cols)); v_padding.fill(-50)\nh_padding = np.empty((rows+2*padding, padding)); h_padding.fill(-50)\nzs = np.vstack([v_padding, tsframe]) # Top\nzs = np.vstack([zs, v_padding]) # Bottom\nzs = np.hstack([h_padding, zs]) # Left\nzs = np.hstack([zs, h_padding]) # Right\n\n# Update matrix size with padding\ncols = zs.shape[1]\nrows = zs.shape[0]\n\n# Coordinates of sampled data points\nxs = np.arange(0, cols, 1)\nys = np.arange(0, rows, 1)\n\n# Coordinates of interpolation points\nscaleFactor = 10;\nxi = np.linspace(xs.min(), xs.max(), cols*scaleFactor)\nyi = np.linspace(ys.min(), ys.max(), rows*scaleFactor)\n\n\n\n\n\n#------------------------------------------------------\n# Interpolate with cubic splines\nspline = scipy.interpolate.RectBivariateSpline(ys, xs, zs, kx=3, ky=3, s=0)\n\n# Evaluate splines\nzi = spline(yi, xi)\n\n#------------------------------------------------------\n\n\n'''\n#------------------------------------------------------\n# Polynomial interpolation: \u2018linear\u2019, \u2018nearest\u2019, \u2018cubic\u2019\ncoordinates = [(y, x) for y in ys for x in xs]\nzs_flattened = np.ravel(zs, order='C')\ncoordinates_interpolated = [(y, x) for y in yi for x in xi]\n\n# Interpolate with griddata\nzi_flattened= scipy.interpolate.griddata(coordinates, zs_flattened, coordinates_interpolated, method='cubic')\n\n# Reshape flattened array to 2D\nzi = zi_flattened.reshape((rows*scaleFactor, cols*scaleFactor))\n#------------------------------------------------------\n'''\n\n\n\n\n#------------------------------------------------------\n# Old API\n# Set up a regular grid of sampled data points\n#ys, xs = np.meshgrid(xs, ys)\n\n# Set up a regular grid of interpolated points\n#yi, xi = np.meshgrid(xi, yi)\n\n# Interpolate\n#tck = scipy.interpolate.bisplrep(xs2, ys2, zs, kx=3, ky=3, s=0)\n\n# Evaluate splines\n#zi = scipy.interpolate.bisplev(xi2[:,0], yi2[0,:], tck)\n#------------------------------------------------------\n\n\n\n\n# Apply threshold to level out small values (interpolation ripples)\nmin_threshold = 25\nzi[zi < min_threshold ] = 0 \n\n\n\n#########################################\n# Plotting\n#########################################\nfig, ax = plt.subplots()\n\n\n############\n# Histogram\n############\nplt.hist(zi.flatten(), 128, range=(min_threshold, zi.max()), fc='k', ec='k')\nplt.savefig(\"histogram.pdf\", format='pdf')\nplt.close() \n\n########################\n# Interpolated image\n########################\nfig, ax = plt.subplots()\n\n# Interpolated image\n#cmap=plt.get_cmap('gray')\ncmap=plt.get_cmap('bds_highcontrast')\ncax = ax.imshow(zi, cmap=cmap, vmin=zs.min(), vmax=zs.max(), origin='lower', extent=[xs.min(), xs.max(), ys.min(), ys.max()])\n\n# Colorbar with countour levels\ncbar = fig.colorbar(cax)\ncbar.set_label('Raw sensor value', rotation=90)\ncbar.solids.set_edgecolor(\"face\") # set the color of the lines\n\nax.invert_yaxis()\nax.xaxis.tick_top()\nplt.axis('off')\n\nplt.savefig(\"interpolation.pdf\", format='pdf')\nplt.close() \n\n\n\n############\n# Contour\n############\nfig, ax = plt.subplots()\n\n# Nearest-Neighbor Image\ncax = ax.imshow(zs, interpolation='nearest', cmap=plt.get_cmap('gray'), vmin=zs.min(), vmax=zs.max(), origin='lower', extent=[xs.min(), xs.max(), ys.min(), ys.max()]) \n\n#------------------------------------------------------\n# Contour lines: contour()\n#------------------------------------------------------\ncountour_threshold = 50\nlevels = np.linspace(countour_threshold, zs.max(), 10)\n#contour = ax.contour(xi, yi, zi, levels, linewidths=1.0, colors=[(0.0, 0.0, 0.0)], origin='upper') # black contour\ncontour = ax.contour(xi, yi, zi, levels, linewidths=1.0, colors=[(1.0, 0.0, 0.0)], origin='upper') # Red contour\n#contour = ax.contour(xi, yi, zi, levels, linewidths=1.0, cmap=plt.get_cmap('bds_highcontrast'), origin='upper') # Colormap\n\n#plt.clabel(contour, inline=True, fontsize=9)\n\n# Colorbar with countour levels\ncbar = fig.colorbar(cax)\ncbar.add_lines(contour)\ncbar.set_label('Raw sensor value', rotation=90)\ncbar.solids.set_edgecolor(\"face\") # set the color of the lines\n\n'''\n#------------------------------------------------------\n# Filled contours: contourf()\n#------------------------------------------------------\n\n# Background image\nbackground = np.empty((rows, cols)); background.fill(0)\ncax = ax.imshow(background, cmap=plt.get_cmap('gray'), origin='lower', extent=[xs.min(), xs.max(), ys.min(), ys.max()] )\n\n# Filled contour\ncountour_threshold = 100 # Ignore \"ripples\" from spline extrapolation\nmax_threshold = 0 # Boost the upper limit to avoid truncation error\nlevels = np.linspace(countour_threshold, zs.max(), num=10, endpoint=True)\n\n# Levels correspond to midpoint of layers:\n# Extend level range to enlarge top layer (avoid ugly hole)\nlevels[-1] = levels[-1] + (levels[-1] - levels[-2])/2\n\ncontour = ax.contourf(xi, yi, zi, levels=levels, cmap=plt.get_cmap('bds_highcontrast'), origin='upper') \n\ncbar = fig.colorbar(contour, format='%.0f')\ncbar.set_label('mV', rotation=0)\ncbar.solids.set_edgecolor(\"face\") # set the color of the lines\n\n# Restore old levels\n#levels[-1] = zs.max() \n#cbar.set_ticks(levels)\n#------------------------------------------------------\n'''\n\n\nax.invert_yaxis()\nax.xaxis.tick_top()\nplt.axis('off')\n\nplt.savefig(\"contour.pdf\", format='pdf')\nplt.show() \n\n\n\n \n" + }, + { + "comment": "Write a function to generate a set of random numbers in Python.", + "code_snippet": "import random\n\ndef generate_randoms(n):\n # generate a set of n random numbers\n rands = []\n for _ in range(n):\n rands.append(random.randint(1,100))\n return rands\n\ngenerate_randoms(10)" + }, + { + "comment": "Write a python program to check if a given string contains any numbers", + "code_snippet": "def string_contains_number(string):\n pattern = re.compile(\"[0-9]\") \n return pattern.search(string) != None" + }, + { + "comment": "Design a class in Python for storing movie information including the name, year of release, genre and rating.", + "code_snippet": "class Movie:\n def __init__(self, name, release_year, genre, rating):\n self.name = name\n self.release_year = release_year\n self.genre = genre\n self.rating = rating\n\nmovie = Movie(\"Interstellar\", 2014, \"Sci-Fi\", 8.4)\nprint(movie.name, movie.release_year, movie.genre, movie.rating)" + }, + { + "comment": "Given an input string, write a Python program to count the occurrence of each character in the string.", + "code_snippet": "def char_occurrences(a_string):\n char_count = {}\n for char in a_string:\n if char in char_count:\n char_count[char] += 1\n else:\n char_count[char] = 1\n return char_count\n\nstring = \"Hello, World!\"\nprint(char_occurrences(string))\n\n# Output\n# {'H': 1, 'e': 1, 'l': 3, 'o': 2, ', ': 1, 'W': 1, 'r': 1, 'd': 1, '!': 1}" + }, + { + "comment": "Create a Python program to generate a random password. Specify a minimum length of 8 characters and it should contain at least one number and one special character.", + "code_snippet": "import string\nimport random\n\ndef generate_password():\n length = 8\n chars = string.ascii_letters + string.digits + string.punctuation\n password = \"\".join(random.choice(chars) for i in range(length))\n \n return password\n\npassword = generate_password()\nprint(password)" + }, + { + "comment": "Write a Python function to generate an even number between 10 and 200 that is divisible by 5.", + "code_snippet": "def generate_even_number():\n# Generate a random number between 10 and 200\n num = random.randint(10, 200)\n# Check if the number is even\n if num % 2 == 0:\n# Check if the number is divisible by 5\n if num % 5 == 0:\n return num\n# If number not divisible by 5, increment number\n else:\n return generate_even_number(num+1)\n# If number not even, increment number\n else:\n return generate_even_number(num+1)" + }, + { + "comment": "Create a Python function to find the closest value to a given number in a given array.", + "code_snippet": "def closest_num(arr, num):\n arr.sort()\n n = len(arr)\n left = 0\n right = n - 1\n \n if arr[right] <= num:\n return arr[right]\n elif arr[left] >= num:\n return arr[left]\n while right-left > 1:\n mid = (right+left)//2\n if arr[mid] == num:\n return arr[mid]\n elif arr[mid] > num:\n right = mid\n else:\n left = mid\n return sorted([arr[right], arr[left]])[0]\n\narr = [5, 4, 8, 7]\nnum = 5\nclosest = closest_num(arr, num)\nprint(closest)" + }, + { + "comment": "Write a Python code to store and print the multiplication table of a given number.", + "code_snippet": "# Function to print the multiplication table\ndef print_multiplication_table(num):\n # Iterate over numbers from 1 to 10\n for i in range(1, 11):\n print('{0} x {1} = {2}'.format(num, i, num*i))\n\nprint_multiplication_table(5)" + }, + { + "comment": "Found and fix any bugs with the following python code.", + "code_snippet": "def sum_list(list):\n sum_list = 0\n for num in list:\n sum_list += num\n return sum_list" + }, + { + "comment": "Generate a function in Python that takes two parameters: \u2018x\u2019 and \u2018y\u2019 and prints the output as \u201cx is greater than y\u201d when x is greater than y, otherwise \u201cy is greater than or equal to x\u201d.", + "code_snippet": "def print_comparison(x, y):\n if x > y:\n print(f'{x} is greater than {y}')\n else:\n print(f'{y} is greater than or equal to {x}')" + }, + { + "comment": "Create a Python program to take an array of integers and calculate the sum of squares of all numbers provided in the array.", + "code_snippet": "def sum_squares(arr):\n total = 0\n for num in arr:\n total += num ** 2\n return total\n\narr = [2, 3, 4]\n\ntotal = sum_squares(arr)\nprint(total) # 29" + }, + { + "comment": "Design an algorithm in Python for finding out the factorial of a given number.", + "code_snippet": "def factorial(n):\n fact = 1\n for i in range(2,n+1):\n fact = fact * i\n return fact" + }, + { + "comment": "Construct a class in Python which implements two methods to add two numbers.", + "code_snippet": "class Calculator:\n def __init__(self):\n pass\n \n def add_two_numbers(self, a, b):\n return a + b\n\n def add(self, a, b, c):\n return a + b + c\n\ncalculator = Calculator()\nresult = calculator.add_two_numbers(1, 2)\nprint(result)" + }, + { + "comment": "Create a Python program that takes in a positive integer, then uses a while loop to output the numbers counting down to 1.", + "code_snippet": "num = int(input(\"Enter a positive integer: \"))\n\nwhile num > 0:\n print(num)\n num -= 1\n\nprint(\"Done!\")" + }, + { + "comment": "Develop an AI Tic-Tac-Toe game using Python.", + "code_snippet": "import random \n \n# printing the board \ndef drawBoard(board): \n \n print(\"---------------\") \n print(\" \"+board[1]+\" | \"+board[2]+\" | \"+board[3]+\" \") \n print(\"___|___|___\") \n print(\" \"+board[4]+\" | \"+board[5]+\" | \"+board[6]+\" \") \n print(\"___|___|___\") \n print(\" \"+board[7]+\" | \"+board[8]+\" | \"+board[9]+\" \") \n print(\" | | \") \n \n# defining the part of the game \ndef checkWin(board, player): \n return ( \n (board[1] == board[2] == board[3] == player) or\n (board[5] == board[4] == board[6] == player) or \n (board[7] == board[8] == board[9] == player) or \n (board[1] == board[5] == board[9] == player) or \n (board[3] == board[5] == board[7] == player) or \n (board[1] == board[4] == board[7] == player) or \n (board[2] == board[5] == board[8] == player) or \n (board[3] == board[6] == board[9] == player)) \n \ndef getComputerSpot(board,player): \n openSpots = [] \n indices = [i for i, spot in enumerate(board) if spot == '-'] \n \n for i in indices: \n board[i] = player \n \n if checkWin(board, player): \n board[i] = '-' \n return i \n board[i] = '-' \n \n for i in indices: \n openSpots.append(i) \n if len(openSpots): \n return random.choice(openSpots) \n else: \n return None \n \n \ndef playGame(): \n board = ['-' for x in range(10)] \n won = False\n turn = -1\n while not won: \n if turn == -1: \n # human turn \n humanSpot = int(input(\"Enter your spot: \"))\n if board[humanSpot] == '-': \n board[humanSpot] = 'X' \n else: \n print(\"the spot is already filled!\") \n continue\n turn *= -1\n \n if checkWin(board,'X'): \n drawBoard(board) \n print(\"You won!\") \n won = True\n break\n \n if turn == 1: \n # computer turn \n computerSpot = getComputerSpot(board,'O') \n if computerSpot == None: \n drawBoard(board) \n print(\"The game is drawn!\")\n break\n else: \n board[computerSpot] = 'O' \n turn *= -1\n \n drawBoard(board) \n \nplayGame()" + }, + { + "comment": "Create a Python program to calculate the sum of series 1 + \u00bd + \u2153 + ... + 1/n.", + "code_snippet": "def seriesSum(n):\n # set the initial sum to 0\n total = 0\n\n # loop over the range\n for i in range(1, n+1):\n total += 1 / i\n\n return total\n\nprint(seriesSum(5))" + }, + { + "comment": "Develop a decision tree classifier in Python to predict a fourth feature from three other features.", + "code_snippet": "import pandas as pd\n\n#importing the dataset \ndataset = pd.read_csv('data.csv')\n\n#splitting the dataset into features and labels \nX = dataset.iloc[:, :-1].values \ny = dataset.iloc[:, 3].values\n\n#importing DecisionTreeClassifier \nfrom sklearn.tree import DecisionTreeClassifier\n\nclassifier = DecisionTreeClassifier(criterion = 'entropy')\n\n#fitting the classifier to the dataset\nclassifier.fit(X,y)" + }, + { + "comment": "Implement a function in Python that takes a string argument and returns the characters of the string in reverse order.", + "code_snippet": "def reverse_string(input_string):\n reversed_string = ''\n for i in range(len(input_string)-1, -1, -1):\n reversed_string += input_string[i]\n return reversed_string" + }, + { + "comment": "Once the user has provided a list of numbers and a target number, suggest a Python function to check if any two numbers from the list sum up to the target.", + "code_snippet": "def check_sum(numbers, target):\n for i in range(len(numbers)):\n for j in range(i+1, len(numbers)):\n if numbers[i] + numbers[j] == target:\n return True\n return False" + }, + { + "comment": "Write a Python Program to print out the first n prime numbers.", + "code_snippet": "def sieve_of_eratosthenes(n):\n primes = [True] * (n+1)\n primes[0] = primes[1] = False\n for i in range(2, int(n**0.5)+1):\n if primes[i]:\n for j in range(i*i, n+1, i):\n primes[j] = False\n\n prime_numbers = []\n for i in range(len(primes)):\n if primes[i]:\n prime_numbers.append(i) \n return prime_numbers" + }, + { + "comment": "Generate a Python function that takes a dictionary as an argument and returns an inverted dictionary.", + "code_snippet": "def invert_dictionary(d):\n inverted_d = {}\n\n for key, value in d.items():\n if value not in inverted_d:\n inverted_d[value] = []\n inverted_d[value].append(key)\n\n return inverted_d" + }, + { + "comment": "Write a Python code to implement Gradient Descent Algorithm.", + "code_snippet": "\"\"\"\nImplement gradient descent algorithm in Python\n\"\"\"\nimport numpy as np\n\ndef gradient_descent(x,y,learning_rate=0.01,iterations=100): \n m_curr = b_curr = 0\n n = len(x)\n for i in range(iterations):\n y_predicted = m_curr * x + b_curr\n cost = (1/n) * sum([val**2 for val in (y-y_predicted)])\n md = -(2/n)*sum(x*(y-y_predicted))\n bd = -(2/n)*sum(y-y_predicted)\n m_curr = m_curr - learning_rate * md\n b_curr = b_curr - learning_rate * bd\n print (\"m {}, b {}, cost {} iteration {}\".format(m_curr,b_curr,cost, i))\n return m_curr, b_curr" + }, + { + "comment": "Binary search is an efficient algorithm for finding an item in a sorted list of items. Develop an efficient algorithm using Python that implements a binary search.", + "code_snippet": "def binary_search(nums, val):\n low = 0\n high = len(nums) - 1\n \n while low <= high:\n mid = (low + high) // 2\n if nums[mid] == val:\n return mid\n elif nums[mid] > val:\n high = mid - 1\n else:\n low = mid + 1\n return -1" + }, + { + "comment": "Construct a nested loop in Python to print out the following elements in a new line.", + "code_snippet": "for x in [1,2,3]:\n for y in [4,5,6]:\n for z in [7,8,9]:\n print(x,y,z)" + }, + { + "comment": "Create a machine learning program in Python that will classify text data into 3 different categories.", + "code_snippet": "import pandas as pd\nimport numpy as np\nfrom sklearn.feature_extraction.text import CountVectorizer\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.naive_bayes import MultinomialNB\nfrom sklearn.metrics import classification_report\n\n# Load the data\ndata = pd.read_csv(\"data.csv\")\n\n# Vectorize the text\ncv = CountVectorizer()\nX = cv.fit_transform(data[\"text\"])\n\n# Convert target labels to numerical values\ny = np.array([1 if label == \"category1\" else 2 if label == \"category2\" else 3 for label in data[\"category\"]])\n\n# Split into train and test data\nX_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)\n\n# Train the model\nnb = MultinomialNB()\nnb.fit(X_train, y_train)\n\n# Test the model\ny_pred = nb.predict(X_test)\n\n# Print out the results\nprint(classification_report(y_test, y_pred))" + }, + { + "comment": "Create a Python function that takes in a list and prints a dictionary with the elements and the product of each element.", + "code_snippet": "def product_of_list(list):\n output = {}\n for element in list:\n output[element] = element * element\n return output\n\nprint(product_of_list([7, 8, 5]))" + }, + { + "comment": "Write a function in Python to print the Fibonacci series.", + "code_snippet": "def printFibonacciSeries(n): \n \n # Taking 1st two fibonacci nubers as 0 and 1 \n f1 = 0\n f2 = 1\n print(f1, f2, end = \" \") \n \n for i in range(2, n): \n next = f1 + f2 \n print(next, end = \" \") \n \n # update values \n f1 = f2 \n f2 = next" + }, + { + "comment": "Design an algorithm in Python to find the longest common substring in two strings.", + "code_snippet": "def longestCommonSubstring(string1, string2):\n n1=len(string1)\n n2=len(string2)\n \n L=[[0 for _ in range(n2+1)]for _ in range(n1+1)]\n longestSubstring=\"\"\n longestSubstringLength=0\n for i in range(1, n1+1):\n for j in range(1, n2+1):\n if string1[i-1]==string2[j-1]:\n L[i][j]=L[i-1][j-1]+1\n if L[i][j]>longestSubstringLength:\n longestSubstringLength=L[i][j]\n longestSubstring=string1[i-1-longestSubstringLength+1:i]\n else:\n L[i][j]=0\n return longestSubstring" + }, + { + "comment": "Create a Python function to shuffle a list of numbers.", + "code_snippet": "import random\n\ndef shuffle_list(nums):\n random.shuffle(nums)\n return nums\n\nshuffled_list = shuffle_list([1, 2, 3, 4, 5])\nprint(shuffled_list) #[3, 5, 2, 4, 1]" + }, + { + "comment": "What Python code can you write that takes two strings and returns whether they are anagrams?", + "code_snippet": "def is_anagram(str1, str2):\n if len(str1) != len(str2):\n return False\n\n str1_counts = collections.Counter(str1)\n str2_counts = collections.Counter(str2)\n \n for char in str1_counts:\n if str1_counts[char] != str2_counts[char]:\n return False\n return True" + }, + { + "comment": "Create a basic Python script that computes the sum of two variables and stores the result in a third variable.", + "code_snippet": "# compute the sum of x and y\nresult = x + y\n\n# store the result in a third variable\nz = result\n\n#print the result\nprint(z) # Output: 13" + }, + { + "comment": "Generate a set of unique random numbers in the range 0-10 using Python.", + "code_snippet": "import random\nrandom_numbers = set()\nwhile len(random_numbers) < 10:\n random_numbers.add(random.randint(0, 10))\n\nprint(random_numbers)" + }, + { + "comment": "Write a function in Python to search for a given word in a large document. The function should return the line number of the document where the word is found.", + "code_snippet": "def findWord(document, word):\n lines = document.split('\\n')\n line_number = -1\n for i, line in enumerate(lines):\n if word in line:\n line_number = (i + 1)\n break\n return line_number\n\nfindWord(largeDocument, word) # 2" + }, + { + "comment": "Design a script in Python to scrape photos and captions from a given website.", + "code_snippet": "\"\"\"\nScript to scrape photos and captions from a given website\n\"\"\"\n\nfrom bs4 import BeautifulSoup\nimport requests\n\n# Get the HTML source code\nurl = 'https://example.com/webpage'\nreq = requests.get(url)\nhtml = req.text\n\n# Parse HTML source and extract photo and caption\nsoup = BeautifulSoup(html, features='lxml')\nimage_divs = soup.find_all('div', {'class': 'image-gallery__image'})\n\nfor image_div in image_divs:\n figure = image_div.find('figure')\n src = figure.find('img')['src']\n caption = figure.find('figcaption')\n print('Photo: ', src)\n if caption:\n print('Caption: ', caption.text)\n else:\n print('No caption')\n print('\\n')" + }, + { + "comment": "Create a python program that prints \"Hello World!\" five times.", + "code_snippet": "for x in range(5):\n print(\"Hello World!\")" + }, + { + "comment": "Write a Python program to find the common elements between two given lists.", + "code_snippet": "def find_common_elements(list1, list2):\n common = [x for x in list1 if x in list2]\n return common" + }, + { + "comment": "Generate a list of all numbers from 0 to 50 in Python, that are divisible by both 3 and 5.", + "code_snippet": "my_list = [x for x in range(0, 51) if x % 3 == 0 and x % 5 == 0]" + }, + { + "comment": "Create a class to create a linked list in python nodes.", + "code_snippet": "class ListNode:\n def __init__(self, data):\n self.data = data\n self.next = None" + }, + { + "comment": "Design a web server in Python using the Flask framework that would serve a json object containing the current temperature for a city based on the city name given in the request.", + "code_snippet": "import requests\nimport json\n\nfrom flask import Flask, request\n\napp = Flask(name)\n\n@app.route('/getTemp', methods=['POST'])\ndef get_temp():\n city = request.json['city']\n url = 'http://api.openweathermap.org/data/2.5/weather?q={}&APPID=xxxxxx'\n r = requests.get(url.format(city))\n weather = json.loads(r.text)\n return {'temperature': weather['main']['temp']}\n\nif name == 'main':\n app.run(debug=True)" + }, + { + "comment": "Improve the following Python program to reduce its time complexity.", + "code_snippet": "def find_max_sum(arr):\n max_sum = 0\n left = 0\n right = len(arr) - 1\n while left < right:\n if arr[left] + arr[right] > max_sum:\n max_sum = arr[left] + arr[right]\n if arr[left] > arr[right]:\n right -= 1\n else:\n left += 1\n return max_sum" + }, + { + "comment": "Write a Python program to format a given piece of text (input) with different options for font-style, size, and color.", + "code_snippet": "def format_text(text, font=\"Times New Roman\", size='14px', color='#000000'):\n return \"{}\".format(font, size, color, text)\n\nprint(format_text('Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer ut lectus vel nisi consequat bibendum ac a erat. Aliquam non velit sit amet arcu placerat vulputate a ut nibh.'))" + }, + { + "comment": "Write a Python script that takes a list of integers, and returns a list of tuples that contain the index and square of each number in the original list.", + "code_snippet": "def square_index(nums):\n return [(index, num ** 2) for index, num in enumerate(nums)]\n\nsquare_index(nums)\n# Output: [(0, 1), (1, 4), (2, 9), (3, 16), (4, 25)]" + }, + { + "comment": "Using Python, create a function that takes two numbers as input, and generates a random number between them.", + "code_snippet": "def random_number_generator(min, max):\n return random.randint(min, max)" + }, + { + "comment": "Generate a Python program to demonstrate a sorting algorithm.", + "code_snippet": "def sort_list(mylist):\n for i in range(len(mylist)):\n \n min_index = i\n temp = mylist[i]\n \n for j in range(i + 1, len(mylist)):\n \n if mylist[min_index] > mylist[j]:\n min_index = j\n \n mylist[i] = mylist[min_index]\n mylist[min_index] = temp\n \n return mylist\n \nmylist = [1, 5, 7, 8, 4, 10, 2]\n \nprint(\"Sorted list is:\")\nprint(sort_list(mylist))" + }, + { + "comment": "Write a code to delete a certain element from a linked list.", + "code_snippet": "# Python program to delete a node from Linked List \n \n# Node class \nclass Node: \n \n # Function to initialize the node object \n def __init__(self, data): \n self.data = data # Assign data \n self.next = None # Initialize next as null \n \n \n# Linked List class contains a Node object \nclass LinkedList: \n \n # Function to initialize head \n def __init__(self): \n self.head = None\n \n # Function to delete a node \n def deleteNode(self, node): \n \n # Store head node \n temp = self.head \n \n # If head node itself holds the key to be deleted \n if (temp is not None): \n if (temp == node): \n self.head = temp.next\n temp = None\n return\n \n # Search for the key to be deleted, keep track of the \n # previous node as we need to change 'prev.next' \n while(temp is not None): \n if temp == node: \n break\n prev = temp \n temp = temp.next \n \n # if key is not present in linked list \n if(temp == None): \n return\n \n # Unlink the node from linked list \n prev.next = temp.next\n \n temp = None" + }, + { + "comment": "Create a Python program to determine the total sum of all elements of a list.", + "code_snippet": "def calculate_sum_of_list(arr):\n total_sum = 0\n for item in arr:\n total_sum += item\n return total_sum\n\nlist1 = [1, 2, 3, 4]\nsum_of_list = calculate_sum_of_list(list1)\nprint(sum_of_list)" + }, + { + "comment": "Write a script in Python to compete in a Kaggle competition.", + "code_snippet": "# Load the necessary libraries\nimport pandas as pd\nimport numpy as np\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import accuracy_score\n\n# Read in the data\ntrain_data = pd.read_csv(\"data.csv\")\n\n# Split the data into X (predictors) and y (response)\nX = train_data.drop('response', axis=1)\ny = train_data['response']\n\n# Split into training and testing sets\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=42)\n\n# Define the model and fit it\nmodel = ...\nmodel.fit(X_train, y_train)\n\n# Make predictions on the test set\ny_pred = model.predict(X_test)\n\n# Score the prediction\nscore = accuracy_score(y_test, y_pred)\n\n# Submit the prediction to Kaggle\n# ..." + }, + { + "comment": "Given a list of integers and an integer k, can you write a Python program to find the consecutive integers whose sum is equal to the given integer k?", + "code_snippet": "def find_consecutive_integers(lst, k):\n # Edge cases\n if k > sum(lst) or k < 0:\n return -1\n \n # Create a window and move it's boundaries\n l, h, curr_sum = 0, 0, 0\n while h < len(lst):\n # Sum of current window\n curr_sum += lst[h] \n \n # See if the window sum equals k\n while curr_sum > k and l <= h:\n curr_sum -= lst[l]\n l += 1\n \n # When window sum is equal to k, print the winow\n if curr_sum == k:\n return lst[l:h+1]\n \n # Move the window one step at a time\n h += 1\n \n # If window size reaches last element and no window is \n # found\n return -1\n \nlst = [1,3,5,7,9]\nk = 10\nprint(find_consecutive_integers(lst, k)) # Output: [3,5,7]" + }, + { + "comment": "Design a basic chatbot in Python for responding to casual inquiries.", + "code_snippet": "import random\n\n#list of possible answers \nanswers = [\"That's a great question!\", \n \"I'm not sure, but I'll try to find out!\", \n \"That sounds interesting, tell me more!\", \n \"I have no idea, sorry!\"]\n\ndef chatbot_response(user_input): \n # get a random response from answers\n response = random.choice(answers)\n return response\n\n# simple loop to keep the conversation going\nwhile True:\n user_input = input('You: ')\n if user_input == 'Goodbye':\n print('Chatbot: Goodbye!')\n break\n else:\n print('Chatbot: ', chatbot_response(user_input))" + }, + { + "comment": "Write a Python program to print the top 5 most frequent words in a given sentence.", + "code_snippet": "import collections\n \nsentence = \"Python is an interpreted, high-level, general-purpose programming language.\"\n \n# Split sentence into words\nwords = sentence.split()\n \n# Set the counter for words\ncounter = collections.Counter(words)\n \n# Find top 5 most frequent words\nresult = counter.most_common(5)\nprint(result)" + }, + { + "comment": "Make a program in Python to print a staircase of height 'n', where n is an integer.", + "code_snippet": "def staircase(n): \n for i in range(0, n): \n for j in range(0, n - i - 1): \n print(end=\" \") \n for j in range(0, i + 1): \n print(\"#\", end=\"\") \n print(\"\\r\") \n \n# Driver code \nn = 5\nstaircase(n)" + }, + { + "comment": "Write python code to return the maximum number in a list.", + "code_snippet": "def find_max(nums):\n '''Returns the maximum number in the list.'''\n max_val = nums[0]\n for num in nums:\n if num > max_val:\n max_val = num\n \n return max_val" + }, + { + "comment": "Compose a python program to identify the characters in a given alphabet", + "code_snippet": "alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n\ndef identify_characters(alphabet):\n char_list = []\n for c in alphabet:\n char_list.append(c)\n return char_list" + }, + { + "comment": "Optimize a Flask application for efficient performance.", + "code_snippet": "from flask import Flask, request, jsonify\n\napp = Flask(__name__)\n\n@app.route('/api/', methods=['GET', 'POST'])\ndef process_request(endpoint):\n # Performance optimization\n # Use Redis for caching session and query performance\n # Use uWSGI for Python applications\n # Use gunicorn as WSGI server\n # Use Flask-Compress extension for compression\n # Use global variables where applicable\n # Don't use sql queries directly, always use model methods\n # Use query parameter in URLs instead of plain parameters\n # Use thread-local objects for performance\n\n # Your code here" + }, + { + "comment": "Design a Python program to take a list of integers and return the sum of the even numbers in the list.", + "code_snippet": "def sum_even_numbers(numbers):\n \n result = 0\n \n for number in numbers:\n if number % 2 == 0:\n result += number\n \n return result\n \nprint(sum_even_numbers([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]))" + }, + { + "comment": "Write a Python program to print the maximum number from a given list.", + "code_snippet": "def max_num(nums):\n max = nums[0]\n for num in nums[1:]:\n if num > max:\n max = num\n return max\n\nnums = [5, 4, 2, 7, 12]\nprint(max_num(nums))" + }, + { + "comment": "Write a Python program to sort a list of dictionaries by a key in each dictionary.", + "code_snippet": "def sort_list_of_dicts_by_key(my_list, key):\n return sorted(my_list, key=lambda k: k[key])" + }, + { + "comment": "Create a Python program to remove all occurrences of the given element in a given array.", + "code_snippet": "def remove_element(arr, element):\n arr = [x for x in arr if x != element]\n return arr" + }, + { + "comment": "Create a Python program to optimize a given multivariate function.", + "code_snippet": "import scipy.optimize as opt \n \ndef optimize_function(function, initial_guess): \n result = opt.minimize(function, initial_guess) \n return result.x" + }, + { + "comment": "Build a Python class to identify if a provided number is prime or composite.", + "code_snippet": "class PrimeNumber:\n def __init__(self, num):\n self.num = num\n\n def is_prime(self):\n for i in range(2, self.num):\n if(self.num % i == 0):\n return False\n return True\n\nnum = 10\nobj = PrimeNumber(num)\n\nif obj.is_prime():\n print(\"Number is Prime\")\nelse:\n print(\"Number is Composite\")" + }, + { + "comment": "Write a Python function to format a two-dimensional array as a table.", + "code_snippet": "def printTable(array):\n # find the longest string in each of the inner lists\n # so we can format the output\n col_width = [max(len(str(x)) for x in col) for col in array]\n for row in array:\n print(\" \".join(str(x).ljust(col_width[i]) for i, x in enumerate(row)))\n\narray = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]\nprintTable(array)\n\n# Output: \n# 1 2 3\n# 4 5 6\n# 7 8 9" + }, + { + "comment": "Develop a program in Python to check whether a string contains only digits.", + "code_snippet": "def is_digit_only(string):\n for char in string:\n if not char.isdigit():\n return False\n return True\n\nprint(is_digit_only(\"0123\"))" + }, + { + "comment": "Implement a function to remove all the duplicates from a linked list in Python.", + "code_snippet": "class Node: \n # Function to initialise the node object \n def __init__(self, data): \n self.data = data # Assign data \n self.next = None # Initialize next as null \n \n \n# Linked List class contains a Node object \nclass LinkedList: \n # Function to initialize head \n def __init__(self): \n self.head = None\n\n def remove_duplicates(self, list_nodes):\n curr_node= self.head \n new_list=[]\n while curr_node != None: \n if curr_node.data not in new_list: \n new_list.append(curr_node.data) \n curr_node = curr_node.next\n \n # creating a linked list from the unique elements of list_nodes \n self.head=None\n for i in new_list:\n self.insert_node(i)\n \n def insert_node(self, data): \n # Create a new node \n new_node = Node(data) \n # Check if list is empty\n if self.head is None: \n self.head = new_node \n return\n # Otherwise, traverse to the end of list before \n # inserting the new Node \n last = self.head \n while (last.next): \n last = last.next\n last.next = new_node" + }, + { + "comment": "Generate a Python program to calculate the maximum, minimum, and average values from a given sequence of numbers.", + "code_snippet": "# Function to calculate the maximum, minimum, and average values\ndef calculate_metrics(list):\n # Calculate the maximum value\n maximum = max(list)\n \n # Calculate the minimum value\n minimum = min(list)\n \n # Calculate the average\n n = len(list)\n total = 0\n for num in list:\n total += num\n average = total/n\n \n return maximum, minimum, average\n\n# Main Program \nlist = [3, 4, 5, 6, 21, 8]\n\nmaximum, minimum, average = calculate_metrics(list)\n\nprint(\"Maximum value:\", maximum)\nprint(\"Minimum value:\", minimum)\nprint(\"Average value:\", average)" + }, + { + "comment": "Create a Deep Learning Program in Python to Predict Stock Price.", + "code_snippet": "from keras.models import Sequential\nfrom keras.layers import Dense\nfrom keras.layers import LSTM\nfrom keras.layers import Dropout\nimport numpy as np\n\n# define constants\ntime_steps = 60\nbatch_size = 32\n\n# build the model\nmodel = Sequential()\nmodel.add(LSTM(units=50, return_sequences=True, input_shape=(time_steps, 1)))\nmodel.add(Dropout(0.2))\n\nmodel.add(LSTM(units=50, return_sequences=True))\nmodel.add(Dropout(0.2))\n\nmodel.add(LSTM(units=50))\nmodel.add(Dropout(0.2))\n\nmodel.add(Dense(units=1))\n\nmodel.compile(optimizer='adam', loss='mean_squared_error')\n\n# read the data \ndataset = np.loadtxt('data.csv', delimiter=',')\n\ndata = dataset[:, 0:1]\n\n# create train and test data\nx_train = data[:int(len(data)*0.8)]\nx_test = data[int(len(data)*0.8):]\n\n# reshape the data for input format\nx_train = np.reshape(x_train, (x_train.shape[0], time_steps, 1))\nx_test = np.reshape(x_test, (x_test.shape[0], time_steps, 1))\n\n# train the model\nmodel.fit(x_train, x_train, epochs=50, batch_size=batch_size, validation_data=(x_test, x_test))" + }, + { + "comment": "Generate a Python program that performs an edit distance calculation using dynamic programming.", + "code_snippet": "def edit_distance(str1, str2):\n m = len(str1)\n n = len(str2)\n edit_table = [[0 for x in range(n+1)] for x in range(m+1)] \n \n for i in range(m+1): \n for j in range(n+1): \n if i == 0: \n edit_table[i][j] = j\n elif j == 0: \n edit_table[i][j] = i\n elif str1[i-1] == str2[j-1]: \n edit_table[i][j] = edit_table[i-1][j-1] \n else: \n edit_table[i][j] = 1 + min(edit_table[i][j-1], edit_table[i-1][j], edit_table[i-1][j-1]) \n \n return edit_table[m][n]" + }, + { + "comment": "Create an algorithm in python that calculates the sum of squares of all the numbers from 1 to N.", + "code_snippet": "def sum_of_squares(n):\n result = 0\n for i in range(n+1):\n result += i**2\n return result" + }, + { + "comment": "Generate a Python program that takes a string and capitalizes the first character of each word.", + "code_snippet": "def capitalize_string(str):\n words = str.split(' ')\n capitalized_words = [word.capitalize() for word in words]\n return \" \".join(capitalized_words)\n\ncapitalized_string = capitalize_string(\"this is an example\")\nprint(capitalized_string)" + }, + { + "comment": "Construct a python program which takes in input the size of a jagged array and prints it(no values).", + "code_snippet": "def print_jagged_array(array_size): \n # Initialize a jagged array with the given size\n array = [None] * array_size\n \n # Populate the array with empty arrays\n for i in range(array_size):\n array[i] = []\n \n # Print the output array\n print(array)\n\nif __name__ == \"__main__\":\n array_size = 4\n print_jagged_array(array_size)" + }, + { + "comment": "Create a simple chatbot using Python and Dialogflow, which can answer questions about the current days of the week.", + "code_snippet": "from flask import Flask\nfrom flask_restful import Resource, Api\nfrom dialogflow import detect_intent_texts\n\napp = Flask(__name__)\napi = Api(app)\n\n\n@app.route('/', methods=['GET', 'POST'])\ndef detect_intent_text():\n IF session_id NOT present\n PLEASE create session_id\n request = detect_intent_texts(session_id, text)\n response = request.fulfillment_text\n return response\n\n\nif __name__ == '__main__':\n app.run()" + }, + { + "comment": "Create a python program for constructing a decision tree algorithm for predicting the value of a stock.", + "code_snippet": "# Load libraries\nimport pandas as pd\nimport numpy as np\n\n# Load data\ndata = pd.read_csv(\"stockdata.csv\")\n\n# Split data\nX = data.iloc[:, :-1].values\ny = data.iloc[:, -1].values\n\n# Train/Test Split\nfrom sklearn.model_selection import train_test_split\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)\n\n# Decision Tree Model\nfrom sklearn.tree import DecisionTreeClassifier\nclf = DecisionTreeClassifier(criterion='entropy', random_state=0)\nclf.fit(X_train, y_train)\n\n# Model Accuracy\ny_pred = clf.predict(X_test)\nprint('Model accuracy: ',clf.score(X_test, y_test))" + }, + { + "comment": "Create a Python class with the given attributes and functions.", + "code_snippet": "class Person:\n \n def __init__(self, name, age, email):\n self.name = name\n self.age = age\n self.email = email\n \n def toString(self):\n return f\"Name: {self.name}, Age: {self.age}, Email: {self.email}\"" + }, + { + "comment": "How would you create a class in Python to store and process data in a Car object?", + "code_snippet": "class Car:\n def __init__(self, make, model, color, mileage):\n self.make = make\n self.model = model\n self.color = color\n self.mileage = mileage\n\n def accelerate(self, speed):\n self.speed = speed\n\n def decelerate(self, speed):\n self.speed = speed" + }, + { + "comment": "Write a Python program to print out the Fibonacci series up to n numbers where n is a user input.", + "code_snippet": "# Python Program to print the Fibonacci series up to n numbers\n\nn = int(input(\"Enter the value of 'n': \"))\n\n# first two numbers\na = 0\nb = 1\n\nprint(\"Fibonacci Series:\") \nprint(a, b, end=\" \") \n \nfor i in range(2,n):\n \n c = a + b\n a = b\n b = c\n print(c, end = \" \")\n \nprint()" + }, + { + "comment": "Edit the following Python program to return true if the following string contains the word \"Hello\".", + "code_snippet": "def check_hello(s):\n return 'Hello' in s" + }, + { + "comment": "Given a list of integers, write a Python program to find the index of the largest number.", + "code_snippet": "nums = [5, 10, 20, 6, 8]\nmax_num = max(nums)\nmax_index = nums.index(max_num)\n\nprint(max_index)" + }, + { + "comment": "Design a python program to handle an array with the following rules:\nIf the element is divisible by 3, the element should be replaced with \"Fizz\".\nIf the element is divisible by 5, the element should be replaced with \"Buzz\".\nIf the element is divisible by 3 and 5, the element should be replaced with \"FizzBuzz\".", + "code_snippet": "def fizz_buzz(arr):\n new_arr = []\n for element in arr:\n if element % 3 == 0 and element % 5 == 0:\n new_arr.append(\"FizzBuzz\")\n elif element % 3 == 0:\n new_arr.append(\"Fizz\")\n elif element % 5 == 0:\n new_arr.append(\"Buzz\")\n else:\n new_arr.append(element)\n return new_arr\n\nprint(fizz_buzz([2, 3, 4, 5, 6, 15]))" + }, + { + "comment": "Write a Python function that takes two strings as arguments and returns the longest common sub-string between them.", + "code_snippet": "def longest_substring(str_1, str_2):\n len_1 = len(str_1)\n len_2 = len(str_2)\n longest_substring = ''\n for x in range(len_1):\n for y in range(len_2):\n if str_1[x] == str_2[y]:\n cur_substring = str_1[x]\n while (x + 1 < len_1 and y + 1 < len_2 and\n str_1[x + 1] == str_2[y + 1]):\n cur_substring += str_1[x + 1]\n x += 1\n y += 1\n if len(cur_substring) > len(longest_substring):\n longest_substring = cur_substring\n return longest_substring\n\nlongest_sub = longest_substring(str_1, str_2)\nprint(longest_sub)" + }, + { + "comment": "Design a program to reverse a given string.", + "code_snippet": "def reverse_string(input_string):\n reversed_string = \"\"\n for i in range(len(input_string)-1, -1, -1):\n reversed_string += input_string[i]\n return reversed_string\n\ninput_string = \"Python\"\n\nprint(reverse_string(input_string))" + }, + { + "comment": "Generate a python program to calculate the minimum and maximum values in an array", + "code_snippet": "def min_max(array):\n min = array[0]\n max = array[0]\n\n for val in array[1:]:\n if val > max:\n max = val\n if val < min:\n min = val\n return min, max" + }, + { + "comment": "Create a function in Python that takes a list of strings, converts it to camelCase, and returns a new list with the converted strings.", + "code_snippet": "def convertToCamelCase(list):\n camelCaseList = []\n\n for string in list:\n string = string.capitalize()\n camelCaseList.append(string)\n\n return ''.join(camelCaseList)" + }, + { + "comment": "Write a Python algorithm that finds the longest contiguous sequence of increasing numbers within an array.", + "code_snippet": "def find_longest_increasing_sequence(arr):\n longest_start = 0\n longest_length = 0\n\n current_start = 0\n current_length = 0\n\n for i in range(1, len(arr)):\n prev_val = arr[i - 1]\n curr_val = arr[i]\n\n if curr_val > prev_val:\n current_length += 1\n else:\n current_start = i\n current_length = 1\n\n if current_length > longest_length:\n longest_start = current_start\n longest_length = current_length\n\n longest_sequence = arr[longest_start:longest_start + longest_length]\n return longest_sequence\n\narr = [3, 2, 1, 4, 5, 6, 7, 8]\nlongest_seq = find_longest_increasing_sequence(arr)\nprint(longest_seq) // Output: [4, 5, 6, 7, 8]" + }, + { + "comment": "Generate a Python function to parse a JSON data structure.", + "code_snippet": "import json\n\ndef parse_json(data):\n data = json.loads(data)\n return data['name'], data['age'], data['occupation']\n\nname, age, occupation = parse_json(data)\nprint(name, age, occupation)\n# Output: John 18 Software Engineer" + }, + { + "comment": "Suggest an improvement for the following python code for finding the sum of elements of a list", + "code_snippet": "def sum_elements(arr):\n return sum(arr) # return sum of elements of arr with one line of code." + }, + { + "comment": "Generate a Python class to represent a 3-dimensional vector.", + "code_snippet": "class Vector3D:\n def __init__(self, x, y, z):\n self.x = x\n self.y = y\n self.z = z\n \n def length(self):\n return (self.x**2 + self.y**2 + self.z**2)**0.5" + }, + { + "comment": "Work out a solution to the Towers of Hanoi game using Python.", + "code_snippet": "def TowersOfHanoi(n, fromRod, toRod, auxRod): \n if n == 1: \n print(\"Move disk 1 from rod\",fromRod,\"to rod\",toRod) \n return\n TowersOfHanoi(n-1, fromRod, auxRod, toRod) \n print(\"Move disk\", n, \"from rod\", fromRod, \"to rod\", toRod) \n TowersOfHanoi(n-1, auxRod, toRod, fromRod) \n\nn = 4\nTowersOfHanoi(n, 'A', 'C', 'B')" + } +] \ No newline at end of file diff --git a/examples/data/issue_comment.json b/examples/data/issue_comment.json new file mode 100644 index 00000000..85e9335b --- /dev/null +++ b/examples/data/issue_comment.json @@ -0,0 +1,8264 @@ +[ + { + "title": "How to set_epoch with interleave_datasets?", + "html_url": "https://github.com/huggingface/datasets/issues/7051", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7051/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "add checkpoint and resume title in docs", + "html_url": "https://github.com/huggingface/datasets/pull/7050", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7050/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7050.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7050', 'merged_at': '2024-07-15T15:59:56Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/7050.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7050'}", + "is_pull_request": true + }, + { + "title": "Save nparray as list", + "html_url": "https://github.com/huggingface/datasets/issues/7049", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7049/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "ImportError: numpy.core.multiarray when using `filter`", + "html_url": "https://github.com/huggingface/datasets/issues/7048", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7048/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Save Dataset as Sharded Parquet ", + "html_url": "https://github.com/huggingface/datasets/issues/7047", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7047/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Support librosa and numpy 2.0 for Python 3.10", + "html_url": "https://github.com/huggingface/datasets/pull/7046", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7046/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7046.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7046', 'merged_at': '2024-07-12T12:58:17Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/7046.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7046'}", + "is_pull_request": true + }, + { + "title": "Fix tensorflow min version depending on Python version", + "html_url": "https://github.com/huggingface/datasets/pull/7045", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7045/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7045.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7045', 'merged_at': '2024-07-12T12:33:00Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/7045.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7045'}", + "is_pull_request": true + }, + { + "title": "Mark tests that require librosa", + "html_url": "https://github.com/huggingface/datasets/pull/7044", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7044/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7044.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7044', 'merged_at': '2024-07-12T09:00:09Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/7044.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7044'}", + "is_pull_request": true + }, + { + "title": "Add decorator as explicit test dependency", + "html_url": "https://github.com/huggingface/datasets/pull/7043", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7043/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7043.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7043', 'merged_at': '2024-07-12T08:07:10Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/7043.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7043'}", + "is_pull_request": true + }, + { + "title": "Improved the tutorial by adding a link for loading datasets", + "html_url": "https://github.com/huggingface/datasets/pull/7042", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7042/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7042.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7042', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/7042.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7042'}", + "is_pull_request": true + }, + { + "title": "`sort` after `filter` unreasonably slow", + "html_url": "https://github.com/huggingface/datasets/issues/7041", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7041/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "load `streaming=True` dataset with downloaded cache", + "html_url": "https://github.com/huggingface/datasets/issues/7040", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7040/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix export to JSON when dataset larger than batch size", + "html_url": "https://github.com/huggingface/datasets/pull/7039", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7039/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7039.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7039', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/7039.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7039'}", + "is_pull_request": true + }, + { + "title": "Yes, can definitely elaborate:", + "html_url": "https://github.com/huggingface/datasets/issues/7038", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7038/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "A bug of Dataset.to_json() function", + "html_url": "https://github.com/huggingface/datasets/issues/7037", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7037/comments", + "labels": "[{'color': 'd73a4a', 'default': True, 'description': \"Something isn't working\", 'id': 1935892857, 'name': 'bug', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODU3', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/bug'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix doc generation when NamedSplit is used as parameter default value", + "html_url": "https://github.com/huggingface/datasets/pull/7036", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7036/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7036.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7036', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/7036.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7036'}", + "is_pull_request": true + }, + { + "title": "Docs are not generated when a parameter defaults to a NamedSplit value", + "html_url": "https://github.com/huggingface/datasets/issues/7035", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7035/comments", + "labels": "[{'color': 'd4c5f9', 'default': False, 'description': 'Maintenance tasks', 'id': 4296013012, 'name': 'maintenance', 'node_id': 'LA_kwDODunzps8AAAABAA_01A', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/maintenance'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "chore: fix typos in docs", + "html_url": "https://github.com/huggingface/datasets/pull/7034", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7034/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7034.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7034', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/7034.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7034'}", + "is_pull_request": true + }, + { + "title": "`from_generator` does not allow to specify the split name", + "html_url": "https://github.com/huggingface/datasets/issues/7033", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7033/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Register `.zstd` extension for zstd-compressed files", + "html_url": "https://github.com/huggingface/datasets/pull/7032", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7032/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7032.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7032', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/7032.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7032'}", + "is_pull_request": true + }, + { + "title": "CI quality is broken: use ruff check instead", + "html_url": "https://github.com/huggingface/datasets/issues/7031", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7031/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Add option to disable progress bar when reading a dataset (\"Loading dataset from disk\")", + "html_url": "https://github.com/huggingface/datasets/issues/7030", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7030/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "load_dataset on AWS lambda throws OSError(30, 'Read-only file system') error", + "html_url": "https://github.com/huggingface/datasets/issues/7029", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7029/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix ci", + "html_url": "https://github.com/huggingface/datasets/pull/7028", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7028/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7028.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7028', 'merged_at': '2024-07-04T15:19:16Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/7028.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7028'}", + "is_pull_request": true + }, + { + "title": "Missing line from previous pr", + "html_url": "https://github.com/huggingface/datasets/pull/7027", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7027/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7027.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7027', 'merged_at': '2024-07-04T14:34:36Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/7027.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7027'}", + "is_pull_request": true + }, + { + "title": "Fix check_library_imports", + "html_url": "https://github.com/huggingface/datasets/pull/7026", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7026/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7026.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7026', 'merged_at': '2024-07-04T14:20:02Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/7026.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7026'}", + "is_pull_request": true + }, + { + "title": "feat: support non streamable arrow file binary format", + "html_url": "https://github.com/huggingface/datasets/pull/7025", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7025/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7025.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7025', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/7025.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7025'}", + "is_pull_request": true + }, + { + "title": "Streaming dataset not returning data", + "html_url": "https://github.com/huggingface/datasets/issues/7024", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7024/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Remove dead code for pyarrow < 15.0.0", + "html_url": "https://github.com/huggingface/datasets/pull/7023", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7023/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7023.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7023', 'merged_at': '2024-07-03T09:17:35Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/7023.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7023'}", + "is_pull_request": true + }, + { + "title": "There is dead code after we require pyarrow >= 15.0.0", + "html_url": "https://github.com/huggingface/datasets/issues/7022", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7022/comments", + "labels": "[{'color': 'd4c5f9', 'default': False, 'description': 'Maintenance tasks', 'id': 4296013012, 'name': 'maintenance', 'node_id': 'LA_kwDODunzps8AAAABAA_01A', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/maintenance'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix casting list array to fixed size list", + "html_url": "https://github.com/huggingface/datasets/pull/7021", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7021/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7021.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7021', 'merged_at': '2024-07-03T08:41:55Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/7021.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7021'}", + "is_pull_request": true + }, + { + "title": "Casting list array to fixed size list raises error", + "html_url": "https://github.com/huggingface/datasets/issues/7020", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7020/comments", + "labels": "[{'color': 'd73a4a', 'default': True, 'description': \"Something isn't working\", 'id': 1935892857, 'name': 'bug', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODU3', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/bug'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Allow Polars round trip by supporting pyarrow large list", + "html_url": "https://github.com/huggingface/datasets/pull/7019", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7019/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7019.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7019', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/7019.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7019'}", + "is_pull_request": true + }, + { + "title": "`load_dataset` fails to load dataset saved by `save_to_disk`", + "html_url": "https://github.com/huggingface/datasets/issues/7018", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7018/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Support fsspec 2024.6.1", + "html_url": "https://github.com/huggingface/datasets/pull/7017", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7017/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7017.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7017', 'merged_at': '2024-07-01T12:06:24Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/7017.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7017'}", + "is_pull_request": true + }, + { + "title": "`drop_duplicates` method", + "html_url": "https://github.com/huggingface/datasets/issues/7016", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7016/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "add split argument to Generator", + "html_url": "https://github.com/huggingface/datasets/pull/7015", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7015/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7015.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7015', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/7015.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7015'}", + "is_pull_request": true + }, + { + "title": "Skip faiss tests on Windows to avoid running CI for 360 minutes", + "html_url": "https://github.com/huggingface/datasets/pull/7014", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7014/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7014.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7014', 'merged_at': '2024-07-01T07:10:27Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/7014.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7014'}", + "is_pull_request": true + }, + { + "title": "CI is broken for faiss tests on Windows: node down: Not properly terminated", + "html_url": "https://github.com/huggingface/datasets/issues/7013", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7013/comments", + "labels": "[{'color': 'd4c5f9', 'default': False, 'description': 'Maintenance tasks', 'id': 4296013012, 'name': 'maintenance', 'node_id': 'LA_kwDODunzps8AAAABAA_01A', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/maintenance'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Raise an error when a nested object is expected to be a mapping that displays the object", + "html_url": "https://github.com/huggingface/datasets/pull/7012", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7012/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7012.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7012', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/7012.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7012'}", + "is_pull_request": true + }, + { + "title": "Re-enable raising error from huggingface-hub FutureWarning in CI", + "html_url": "https://github.com/huggingface/datasets/pull/7011", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7011/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7011.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7011', 'merged_at': '2024-06-28T12:19:28Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/7011.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7011'}", + "is_pull_request": true + }, + { + "title": "Re-enable raising error from huggingface-hub FutureWarning in CI", + "html_url": "https://github.com/huggingface/datasets/issues/7010", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7010/comments", + "labels": "[{'color': 'd4c5f9', 'default': False, 'description': 'Maintenance tasks', 'id': 4296013012, 'name': 'maintenance', 'node_id': 'LA_kwDODunzps8AAAABAA_01A', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/maintenance'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Support ruff 0.5.0 in CI", + "html_url": "https://github.com/huggingface/datasets/pull/7009", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7009/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7009.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7009', 'merged_at': '2024-06-28T07:11:17Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/7009.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7009'}", + "is_pull_request": true + }, + { + "title": "Support ruff 0.5.0 in CI", + "html_url": "https://github.com/huggingface/datasets/issues/7008", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7008/comments", + "labels": "[{'color': 'd4c5f9', 'default': False, 'description': 'Maintenance tasks', 'id': 4296013012, 'name': 'maintenance', 'node_id': 'LA_kwDODunzps8AAAABAA_01A', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/maintenance'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix CI by temporarily pinning ruff < 0.5.0", + "html_url": "https://github.com/huggingface/datasets/pull/7007", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7007/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7007.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7007', 'merged_at': '2024-06-28T05:25:17Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/7007.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7007'}", + "is_pull_request": true + }, + { + "title": "CI is broken after ruff-0.5.0: E721", + "html_url": "https://github.com/huggingface/datasets/issues/7006", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7006/comments", + "labels": "[{'color': 'd4c5f9', 'default': False, 'description': 'Maintenance tasks', 'id': 4296013012, 'name': 'maintenance', 'node_id': 'LA_kwDODunzps8AAAABAA_01A', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/maintenance'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "EmptyDatasetError: The directory at /metadata.jsonl doesn't contain any data files", + "html_url": "https://github.com/huggingface/datasets/issues/7005", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7005/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix WebDatasets KeyError for user-defined Features when a field is missing in an example", + "html_url": "https://github.com/huggingface/datasets/pull/7004", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7004/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7004.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7004', 'merged_at': '2024-06-28T09:30:12Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/7004.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7004'}", + "is_pull_request": true + }, + { + "title": "minor fix for bfloat16", + "html_url": "https://github.com/huggingface/datasets/pull/7003", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7003/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7003.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7003', 'merged_at': '2024-06-25T16:10:10Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/7003.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7003'}", + "is_pull_request": true + }, + { + "title": "Fix dump of bfloat16 torch tensor", + "html_url": "https://github.com/huggingface/datasets/pull/7002", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7002/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7002.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7002', 'merged_at': '2024-06-25T15:51:52Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/7002.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7002'}", + "is_pull_request": true + }, + { + "title": "Datasetbuilder Local Download FileNotFoundError", + "html_url": "https://github.com/huggingface/datasets/issues/7001", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7001/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "IterableDataset: Unsupported ScalarType BFloat16", + "html_url": "https://github.com/huggingface/datasets/issues/7000", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7000/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Remove tasks", + "html_url": "https://github.com/huggingface/datasets/pull/6999", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6999/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6999.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6999', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6999.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6999'}", + "is_pull_request": true + }, + { + "title": "Fix tests using hf-internal-testing/librispeech_asr_dummy", + "html_url": "https://github.com/huggingface/datasets/pull/6998", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6998/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6998.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6998', 'merged_at': '2024-06-25T08:13:42Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6998.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6998'}", + "is_pull_request": true + }, + { + "title": "CI is broken for tests using hf-internal-testing/librispeech_asr_dummy", + "html_url": "https://github.com/huggingface/datasets/issues/6997", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6997/comments", + "labels": "[{'color': 'd4c5f9', 'default': False, 'description': 'Maintenance tasks', 'id': 4296013012, 'name': 'maintenance', 'node_id': 'LA_kwDODunzps8AAAABAA_01A', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/maintenance'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Remove deprecated code", + "html_url": "https://github.com/huggingface/datasets/pull/6996", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6996/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6996.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6996', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6996.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6996'}", + "is_pull_request": true + }, + { + "title": "ImportError when importing datasets.load_dataset", + "html_url": "https://github.com/huggingface/datasets/issues/6995", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6995/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix incorrect rank value in data splitting", + "html_url": "https://github.com/huggingface/datasets/pull/6994", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6994/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6994.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6994', 'merged_at': '2024-06-25T16:19:17Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6994.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6994'}", + "is_pull_request": true + }, + { + "title": "less script docs", + "html_url": "https://github.com/huggingface/datasets/pull/6993", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6993/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6993.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6993', 'merged_at': '2024-06-27T09:31:21Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6993.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6993'}", + "is_pull_request": true + }, + { + "title": "Dataset with streaming doesn't work with proxy", + "html_url": "https://github.com/huggingface/datasets/issues/6992", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6992/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Unblock NumPy 2.0", + "html_url": "https://github.com/huggingface/datasets/pull/6991", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6991/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6991.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6991', 'merged_at': '2024-07-12T12:04:53Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6991.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6991'}", + "is_pull_request": true + }, + { + "title": "Problematic rank after calling `split_dataset_by_node` twice", + "html_url": "https://github.com/huggingface/datasets/issues/6990", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6990/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "cache in nfs error", + "html_url": "https://github.com/huggingface/datasets/issues/6989", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6989/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "[`feat`] Move dataset card creation to method for easier overriding", + "html_url": "https://github.com/huggingface/datasets/pull/6988", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6988/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6988.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6988', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6988.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6988'}", + "is_pull_request": true + }, + { + "title": "Remove beam", + "html_url": "https://github.com/huggingface/datasets/pull/6987", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6987/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6987.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6987', 'merged_at': '2024-06-26T19:35:42Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6987.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6987'}", + "is_pull_request": true + }, + { + "title": "Add large_list type support in string_to_arrow", + "html_url": "https://github.com/huggingface/datasets/pull/6986", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6986/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6986.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6986', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6986.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6986'}", + "is_pull_request": true + }, + { + "title": "AttributeError: module 'pyarrow.lib' has no attribute 'ListViewType'", + "html_url": "https://github.com/huggingface/datasets/issues/6985", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6985/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Convert polars DataFrame back to datasets", + "html_url": "https://github.com/huggingface/datasets/issues/6984", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6984/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Remove metrics", + "html_url": "https://github.com/huggingface/datasets/pull/6983", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6983/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6983.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6983', 'merged_at': '2024-06-28T06:51:30Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6983.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6983'}", + "is_pull_request": true + }, + { + "title": "cannot split dataset when using load_dataset", + "html_url": "https://github.com/huggingface/datasets/issues/6982", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6982/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Update docs on trust_remote_code defaults to False", + "html_url": "https://github.com/huggingface/datasets/pull/6981", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6981/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6981.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6981', 'merged_at': '2024-06-19T14:26:37Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6981.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6981'}", + "is_pull_request": true + }, + { + "title": "Support NumPy 2.0", + "html_url": "https://github.com/huggingface/datasets/issues/6980", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6980/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "How can I load partial parquet files only?", + "html_url": "https://github.com/huggingface/datasets/issues/6979", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6979/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix regression for pandas < 2.0.0 in JSON loader", + "html_url": "https://github.com/huggingface/datasets/pull/6978", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6978/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6978.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6978', 'merged_at': '2024-06-19T05:50:18Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6978.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6978'}", + "is_pull_request": true + }, + { + "title": "load json file error with v2.20.0", + "html_url": "https://github.com/huggingface/datasets/issues/6977", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6977/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Ensure compatibility with numpy 2.0.0", + "html_url": "https://github.com/huggingface/datasets/pull/6976", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6976/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6976.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6976', 'merged_at': '2024-06-19T14:04:34Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6976.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6976'}", + "is_pull_request": true + }, + { + "title": "Set temporary numpy upper version < 2.0.0 to fix CI", + "html_url": "https://github.com/huggingface/datasets/pull/6975", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6975/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6975.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6975', 'merged_at': '2024-06-17T12:43:56Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6975.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6975'}", + "is_pull_request": true + }, + { + "title": "IndexError during training with Squad dataset and T5-small model", + "html_url": "https://github.com/huggingface/datasets/issues/6973", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6973/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix webdataset pickling", + "html_url": "https://github.com/huggingface/datasets/pull/6972", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6972/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6972.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6972', 'merged_at': '2024-06-14T15:37:35Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6972.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6972'}", + "is_pull_request": true + }, + { + "title": "packaging: Remove useless dependencies", + "html_url": "https://github.com/huggingface/datasets/pull/6971", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6971/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6971.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6971', 'merged_at': '2024-06-14T13:57:24Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6971.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6971'}", + "is_pull_request": true + }, + { + "title": "Set dev version", + "html_url": "https://github.com/huggingface/datasets/pull/6970", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6970/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6970.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6970', 'merged_at': '2024-06-13T14:59:56Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6970.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6970'}", + "is_pull_request": true + }, + { + "title": "Release: 2.20.0", + "html_url": "https://github.com/huggingface/datasets/pull/6969", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6969/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6969.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6969', 'merged_at': '2024-06-13T14:55:53Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6969.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6969'}", + "is_pull_request": true + }, + { + "title": "Use `HF_HUB_OFFLINE` instead of `HF_DATASETS_OFFLINE`", + "html_url": "https://github.com/huggingface/datasets/pull/6968", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6968/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6968.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6968', 'merged_at': '2024-06-13T17:25:37Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6968.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6968'}", + "is_pull_request": true + }, + { + "title": "Method to load Laion400m", + "html_url": "https://github.com/huggingface/datasets/issues/6967", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6967/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Remove underlines between badges", + "html_url": "https://github.com/huggingface/datasets/pull/6966", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6966/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6966.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6966', 'merged_at': '2024-06-19T14:10:11Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6966.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6966'}", + "is_pull_request": true + }, + { + "title": "Improve skip take shuffling and distributed", + "html_url": "https://github.com/huggingface/datasets/pull/6965", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6965/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6965.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6965', 'merged_at': '2024-06-24T15:16:16Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6965.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6965'}", + "is_pull_request": true + }, + { + "title": "Fix resuming arrow format", + "html_url": "https://github.com/huggingface/datasets/pull/6964", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6964/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6964.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6964', 'merged_at': '2024-06-14T14:58:37Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6964.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6964'}", + "is_pull_request": true + }, + { + "title": "[Streaming] retry on requests errors", + "html_url": "https://github.com/huggingface/datasets/pull/6963", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6963/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6963.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6963', 'merged_at': '2024-06-28T09:46:52Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6963.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6963'}", + "is_pull_request": true + }, + { + "title": "fix(ci): remove unnecessary permissions", + "html_url": "https://github.com/huggingface/datasets/pull/6962", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6962/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6962.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6962', 'merged_at': '2024-06-11T08:25:47Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6962.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6962'}", + "is_pull_request": true + }, + { + "title": "Manual downloads should count as downloads", + "html_url": "https://github.com/huggingface/datasets/issues/6961", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6961/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "feat(ci): add trufflehog secrets detection", + "html_url": "https://github.com/huggingface/datasets/pull/6960", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6960/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6960.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6960', 'merged_at': '2024-06-08T14:52:18Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6960.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6960'}", + "is_pull_request": true + }, + { + "title": "Better error handling in `dataset_module_factory`", + "html_url": "https://github.com/huggingface/datasets/pull/6959", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6959/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6959.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6959', 'merged_at': '2024-06-10T07:27:43Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6959.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6959'}", + "is_pull_request": true + }, + { + "title": "My Private Dataset doesn't exist on the Hub or cannot be accessed", + "html_url": "https://github.com/huggingface/datasets/issues/6958", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6958/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix typos in docs", + "html_url": "https://github.com/huggingface/datasets/pull/6957", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6957/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6957.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6957', 'merged_at': '2024-06-05T12:43:26Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6957.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6957'}", + "is_pull_request": true + }, + { + "title": "update docs on N-dim arrays", + "html_url": "https://github.com/huggingface/datasets/pull/6956", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6956/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6956.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6956', 'merged_at': '2024-06-04T16:40:27Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6956.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6956'}", + "is_pull_request": true + }, + { + "title": "Fix small typo", + "html_url": "https://github.com/huggingface/datasets/pull/6955", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6955/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6955.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6955', 'merged_at': '2024-06-04T15:20:55Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6955.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6955'}", + "is_pull_request": true + }, + { + "title": "Remove default `trust_remote_code=True`", + "html_url": "https://github.com/huggingface/datasets/pull/6954", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6954/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6954.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6954', 'merged_at': '2024-06-07T12:20:29Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6954.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6954'}", + "is_pull_request": true + }, + { + "title": "Remove canonical datasets from docs", + "html_url": "https://github.com/huggingface/datasets/issues/6953", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6953/comments", + "labels": "[{'color': '0075ca', 'default': True, 'description': 'Improvements or additions to documentation', 'id': 1935892861, 'name': 'documentation', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODYx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/documentation'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Move info_utils errors to exceptions module", + "html_url": "https://github.com/huggingface/datasets/pull/6952", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6952/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6952.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6952', 'merged_at': '2024-06-10T14:03:55Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6952.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6952'}", + "is_pull_request": true + }, + { + "title": "load_dataset() should load all subsets, if no specific subset is specified", + "html_url": "https://github.com/huggingface/datasets/issues/6951", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6951/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "How to set_epoch with interleave_datasets?", + "html_url": "https://github.com/huggingface/datasets/issues/7051", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7051/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "add checkpoint and resume title in docs", + "html_url": "https://github.com/huggingface/datasets/pull/7050", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7050/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7050.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7050', 'merged_at': '2024-07-15T15:59:56Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/7050.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7050'}", + "is_pull_request": true + }, + { + "title": "Save nparray as list", + "html_url": "https://github.com/huggingface/datasets/issues/7049", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7049/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "ImportError: numpy.core.multiarray when using `filter`", + "html_url": "https://github.com/huggingface/datasets/issues/7048", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7048/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Save Dataset as Sharded Parquet ", + "html_url": "https://github.com/huggingface/datasets/issues/7047", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7047/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Support librosa and numpy 2.0 for Python 3.10", + "html_url": "https://github.com/huggingface/datasets/pull/7046", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7046/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7046.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7046', 'merged_at': '2024-07-12T12:58:17Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/7046.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7046'}", + "is_pull_request": true + }, + { + "title": "Fix tensorflow min version depending on Python version", + "html_url": "https://github.com/huggingface/datasets/pull/7045", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7045/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7045.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7045', 'merged_at': '2024-07-12T12:33:00Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/7045.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7045'}", + "is_pull_request": true + }, + { + "title": "Mark tests that require librosa", + "html_url": "https://github.com/huggingface/datasets/pull/7044", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7044/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7044.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7044', 'merged_at': '2024-07-12T09:00:09Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/7044.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7044'}", + "is_pull_request": true + }, + { + "title": "Add decorator as explicit test dependency", + "html_url": "https://github.com/huggingface/datasets/pull/7043", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7043/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7043.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7043', 'merged_at': '2024-07-12T08:07:10Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/7043.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7043'}", + "is_pull_request": true + }, + { + "title": "Improved the tutorial by adding a link for loading datasets", + "html_url": "https://github.com/huggingface/datasets/pull/7042", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7042/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7042.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7042', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/7042.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7042'}", + "is_pull_request": true + }, + { + "title": "`sort` after `filter` unreasonably slow", + "html_url": "https://github.com/huggingface/datasets/issues/7041", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7041/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "load `streaming=True` dataset with downloaded cache", + "html_url": "https://github.com/huggingface/datasets/issues/7040", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7040/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix export to JSON when dataset larger than batch size", + "html_url": "https://github.com/huggingface/datasets/pull/7039", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7039/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7039.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7039', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/7039.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7039'}", + "is_pull_request": true + }, + { + "title": "Yes, can definitely elaborate:", + "html_url": "https://github.com/huggingface/datasets/issues/7038", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7038/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "A bug of Dataset.to_json() function", + "html_url": "https://github.com/huggingface/datasets/issues/7037", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7037/comments", + "labels": "[{'color': 'd73a4a', 'default': True, 'description': \"Something isn't working\", 'id': 1935892857, 'name': 'bug', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODU3', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/bug'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix doc generation when NamedSplit is used as parameter default value", + "html_url": "https://github.com/huggingface/datasets/pull/7036", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7036/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7036.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7036', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/7036.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7036'}", + "is_pull_request": true + }, + { + "title": "Docs are not generated when a parameter defaults to a NamedSplit value", + "html_url": "https://github.com/huggingface/datasets/issues/7035", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7035/comments", + "labels": "[{'color': 'd4c5f9', 'default': False, 'description': 'Maintenance tasks', 'id': 4296013012, 'name': 'maintenance', 'node_id': 'LA_kwDODunzps8AAAABAA_01A', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/maintenance'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "chore: fix typos in docs", + "html_url": "https://github.com/huggingface/datasets/pull/7034", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7034/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7034.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7034', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/7034.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7034'}", + "is_pull_request": true + }, + { + "title": "`from_generator` does not allow to specify the split name", + "html_url": "https://github.com/huggingface/datasets/issues/7033", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7033/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Register `.zstd` extension for zstd-compressed files", + "html_url": "https://github.com/huggingface/datasets/pull/7032", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7032/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7032.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7032', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/7032.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7032'}", + "is_pull_request": true + }, + { + "title": "CI quality is broken: use ruff check instead", + "html_url": "https://github.com/huggingface/datasets/issues/7031", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7031/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Add option to disable progress bar when reading a dataset (\"Loading dataset from disk\")", + "html_url": "https://github.com/huggingface/datasets/issues/7030", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7030/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "load_dataset on AWS lambda throws OSError(30, 'Read-only file system') error", + "html_url": "https://github.com/huggingface/datasets/issues/7029", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7029/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix ci", + "html_url": "https://github.com/huggingface/datasets/pull/7028", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7028/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7028.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7028', 'merged_at': '2024-07-04T15:19:16Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/7028.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7028'}", + "is_pull_request": true + }, + { + "title": "Missing line from previous pr", + "html_url": "https://github.com/huggingface/datasets/pull/7027", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7027/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7027.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7027', 'merged_at': '2024-07-04T14:34:36Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/7027.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7027'}", + "is_pull_request": true + }, + { + "title": "Fix check_library_imports", + "html_url": "https://github.com/huggingface/datasets/pull/7026", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7026/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7026.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7026', 'merged_at': '2024-07-04T14:20:02Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/7026.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7026'}", + "is_pull_request": true + }, + { + "title": "feat: support non streamable arrow file binary format", + "html_url": "https://github.com/huggingface/datasets/pull/7025", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7025/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7025.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7025', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/7025.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7025'}", + "is_pull_request": true + }, + { + "title": "Streaming dataset not returning data", + "html_url": "https://github.com/huggingface/datasets/issues/7024", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7024/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Remove dead code for pyarrow < 15.0.0", + "html_url": "https://github.com/huggingface/datasets/pull/7023", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7023/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7023.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7023', 'merged_at': '2024-07-03T09:17:35Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/7023.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7023'}", + "is_pull_request": true + }, + { + "title": "There is dead code after we require pyarrow >= 15.0.0", + "html_url": "https://github.com/huggingface/datasets/issues/7022", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7022/comments", + "labels": "[{'color': 'd4c5f9', 'default': False, 'description': 'Maintenance tasks', 'id': 4296013012, 'name': 'maintenance', 'node_id': 'LA_kwDODunzps8AAAABAA_01A', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/maintenance'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix casting list array to fixed size list", + "html_url": "https://github.com/huggingface/datasets/pull/7021", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7021/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7021.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7021', 'merged_at': '2024-07-03T08:41:55Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/7021.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7021'}", + "is_pull_request": true + }, + { + "title": "Casting list array to fixed size list raises error", + "html_url": "https://github.com/huggingface/datasets/issues/7020", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7020/comments", + "labels": "[{'color': 'd73a4a', 'default': True, 'description': \"Something isn't working\", 'id': 1935892857, 'name': 'bug', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODU3', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/bug'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Allow Polars round trip by supporting pyarrow large list", + "html_url": "https://github.com/huggingface/datasets/pull/7019", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7019/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7019.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7019', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/7019.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7019'}", + "is_pull_request": true + }, + { + "title": "`load_dataset` fails to load dataset saved by `save_to_disk`", + "html_url": "https://github.com/huggingface/datasets/issues/7018", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7018/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Support fsspec 2024.6.1", + "html_url": "https://github.com/huggingface/datasets/pull/7017", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7017/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7017.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7017', 'merged_at': '2024-07-01T12:06:24Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/7017.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7017'}", + "is_pull_request": true + }, + { + "title": "`drop_duplicates` method", + "html_url": "https://github.com/huggingface/datasets/issues/7016", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7016/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "add split argument to Generator", + "html_url": "https://github.com/huggingface/datasets/pull/7015", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7015/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7015.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7015', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/7015.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7015'}", + "is_pull_request": true + }, + { + "title": "Skip faiss tests on Windows to avoid running CI for 360 minutes", + "html_url": "https://github.com/huggingface/datasets/pull/7014", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7014/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7014.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7014', 'merged_at': '2024-07-01T07:10:27Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/7014.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7014'}", + "is_pull_request": true + }, + { + "title": "CI is broken for faiss tests on Windows: node down: Not properly terminated", + "html_url": "https://github.com/huggingface/datasets/issues/7013", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7013/comments", + "labels": "[{'color': 'd4c5f9', 'default': False, 'description': 'Maintenance tasks', 'id': 4296013012, 'name': 'maintenance', 'node_id': 'LA_kwDODunzps8AAAABAA_01A', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/maintenance'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Raise an error when a nested object is expected to be a mapping that displays the object", + "html_url": "https://github.com/huggingface/datasets/pull/7012", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7012/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7012.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7012', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/7012.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7012'}", + "is_pull_request": true + }, + { + "title": "Re-enable raising error from huggingface-hub FutureWarning in CI", + "html_url": "https://github.com/huggingface/datasets/pull/7011", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7011/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7011.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7011', 'merged_at': '2024-06-28T12:19:28Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/7011.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7011'}", + "is_pull_request": true + }, + { + "title": "Re-enable raising error from huggingface-hub FutureWarning in CI", + "html_url": "https://github.com/huggingface/datasets/issues/7010", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7010/comments", + "labels": "[{'color': 'd4c5f9', 'default': False, 'description': 'Maintenance tasks', 'id': 4296013012, 'name': 'maintenance', 'node_id': 'LA_kwDODunzps8AAAABAA_01A', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/maintenance'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Support ruff 0.5.0 in CI", + "html_url": "https://github.com/huggingface/datasets/pull/7009", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7009/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7009.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7009', 'merged_at': '2024-06-28T07:11:17Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/7009.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7009'}", + "is_pull_request": true + }, + { + "title": "Support ruff 0.5.0 in CI", + "html_url": "https://github.com/huggingface/datasets/issues/7008", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7008/comments", + "labels": "[{'color': 'd4c5f9', 'default': False, 'description': 'Maintenance tasks', 'id': 4296013012, 'name': 'maintenance', 'node_id': 'LA_kwDODunzps8AAAABAA_01A', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/maintenance'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix CI by temporarily pinning ruff < 0.5.0", + "html_url": "https://github.com/huggingface/datasets/pull/7007", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7007/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7007.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7007', 'merged_at': '2024-06-28T05:25:17Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/7007.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7007'}", + "is_pull_request": true + }, + { + "title": "CI is broken after ruff-0.5.0: E721", + "html_url": "https://github.com/huggingface/datasets/issues/7006", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7006/comments", + "labels": "[{'color': 'd4c5f9', 'default': False, 'description': 'Maintenance tasks', 'id': 4296013012, 'name': 'maintenance', 'node_id': 'LA_kwDODunzps8AAAABAA_01A', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/maintenance'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "EmptyDatasetError: The directory at /metadata.jsonl doesn't contain any data files", + "html_url": "https://github.com/huggingface/datasets/issues/7005", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7005/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix WebDatasets KeyError for user-defined Features when a field is missing in an example", + "html_url": "https://github.com/huggingface/datasets/pull/7004", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7004/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7004.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7004', 'merged_at': '2024-06-28T09:30:12Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/7004.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7004'}", + "is_pull_request": true + }, + { + "title": "minor fix for bfloat16", + "html_url": "https://github.com/huggingface/datasets/pull/7003", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7003/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7003.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7003', 'merged_at': '2024-06-25T16:10:10Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/7003.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7003'}", + "is_pull_request": true + }, + { + "title": "Fix dump of bfloat16 torch tensor", + "html_url": "https://github.com/huggingface/datasets/pull/7002", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7002/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7002.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7002', 'merged_at': '2024-06-25T15:51:52Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/7002.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7002'}", + "is_pull_request": true + }, + { + "title": "Datasetbuilder Local Download FileNotFoundError", + "html_url": "https://github.com/huggingface/datasets/issues/7001", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7001/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "IterableDataset: Unsupported ScalarType BFloat16", + "html_url": "https://github.com/huggingface/datasets/issues/7000", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7000/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Remove tasks", + "html_url": "https://github.com/huggingface/datasets/pull/6999", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6999/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6999.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6999', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6999.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6999'}", + "is_pull_request": true + }, + { + "title": "Fix tests using hf-internal-testing/librispeech_asr_dummy", + "html_url": "https://github.com/huggingface/datasets/pull/6998", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6998/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6998.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6998', 'merged_at': '2024-06-25T08:13:42Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6998.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6998'}", + "is_pull_request": true + }, + { + "title": "CI is broken for tests using hf-internal-testing/librispeech_asr_dummy", + "html_url": "https://github.com/huggingface/datasets/issues/6997", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6997/comments", + "labels": "[{'color': 'd4c5f9', 'default': False, 'description': 'Maintenance tasks', 'id': 4296013012, 'name': 'maintenance', 'node_id': 'LA_kwDODunzps8AAAABAA_01A', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/maintenance'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Remove deprecated code", + "html_url": "https://github.com/huggingface/datasets/pull/6996", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6996/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6996.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6996', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6996.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6996'}", + "is_pull_request": true + }, + { + "title": "ImportError when importing datasets.load_dataset", + "html_url": "https://github.com/huggingface/datasets/issues/6995", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6995/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix incorrect rank value in data splitting", + "html_url": "https://github.com/huggingface/datasets/pull/6994", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6994/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6994.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6994', 'merged_at': '2024-06-25T16:19:17Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6994.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6994'}", + "is_pull_request": true + }, + { + "title": "less script docs", + "html_url": "https://github.com/huggingface/datasets/pull/6993", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6993/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6993.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6993', 'merged_at': '2024-06-27T09:31:21Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6993.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6993'}", + "is_pull_request": true + }, + { + "title": "Dataset with streaming doesn't work with proxy", + "html_url": "https://github.com/huggingface/datasets/issues/6992", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6992/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Unblock NumPy 2.0", + "html_url": "https://github.com/huggingface/datasets/pull/6991", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6991/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6991.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6991', 'merged_at': '2024-07-12T12:04:53Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6991.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6991'}", + "is_pull_request": true + }, + { + "title": "Problematic rank after calling `split_dataset_by_node` twice", + "html_url": "https://github.com/huggingface/datasets/issues/6990", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6990/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "cache in nfs error", + "html_url": "https://github.com/huggingface/datasets/issues/6989", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6989/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "[`feat`] Move dataset card creation to method for easier overriding", + "html_url": "https://github.com/huggingface/datasets/pull/6988", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6988/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6988.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6988', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6988.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6988'}", + "is_pull_request": true + }, + { + "title": "Remove beam", + "html_url": "https://github.com/huggingface/datasets/pull/6987", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6987/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6987.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6987', 'merged_at': '2024-06-26T19:35:42Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6987.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6987'}", + "is_pull_request": true + }, + { + "title": "Add large_list type support in string_to_arrow", + "html_url": "https://github.com/huggingface/datasets/pull/6986", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6986/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6986.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6986', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6986.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6986'}", + "is_pull_request": true + }, + { + "title": "AttributeError: module 'pyarrow.lib' has no attribute 'ListViewType'", + "html_url": "https://github.com/huggingface/datasets/issues/6985", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6985/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Convert polars DataFrame back to datasets", + "html_url": "https://github.com/huggingface/datasets/issues/6984", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6984/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Remove metrics", + "html_url": "https://github.com/huggingface/datasets/pull/6983", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6983/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6983.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6983', 'merged_at': '2024-06-28T06:51:30Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6983.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6983'}", + "is_pull_request": true + }, + { + "title": "cannot split dataset when using load_dataset", + "html_url": "https://github.com/huggingface/datasets/issues/6982", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6982/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Update docs on trust_remote_code defaults to False", + "html_url": "https://github.com/huggingface/datasets/pull/6981", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6981/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6981.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6981', 'merged_at': '2024-06-19T14:26:37Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6981.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6981'}", + "is_pull_request": true + }, + { + "title": "Support NumPy 2.0", + "html_url": "https://github.com/huggingface/datasets/issues/6980", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6980/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "How can I load partial parquet files only?", + "html_url": "https://github.com/huggingface/datasets/issues/6979", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6979/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix regression for pandas < 2.0.0 in JSON loader", + "html_url": "https://github.com/huggingface/datasets/pull/6978", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6978/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6978.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6978', 'merged_at': '2024-06-19T05:50:18Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6978.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6978'}", + "is_pull_request": true + }, + { + "title": "load json file error with v2.20.0", + "html_url": "https://github.com/huggingface/datasets/issues/6977", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6977/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Ensure compatibility with numpy 2.0.0", + "html_url": "https://github.com/huggingface/datasets/pull/6976", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6976/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6976.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6976', 'merged_at': '2024-06-19T14:04:34Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6976.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6976'}", + "is_pull_request": true + }, + { + "title": "Set temporary numpy upper version < 2.0.0 to fix CI", + "html_url": "https://github.com/huggingface/datasets/pull/6975", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6975/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6975.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6975', 'merged_at': '2024-06-17T12:43:56Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6975.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6975'}", + "is_pull_request": true + }, + { + "title": "IndexError during training with Squad dataset and T5-small model", + "html_url": "https://github.com/huggingface/datasets/issues/6973", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6973/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix webdataset pickling", + "html_url": "https://github.com/huggingface/datasets/pull/6972", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6972/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6972.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6972', 'merged_at': '2024-06-14T15:37:35Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6972.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6972'}", + "is_pull_request": true + }, + { + "title": "packaging: Remove useless dependencies", + "html_url": "https://github.com/huggingface/datasets/pull/6971", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6971/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6971.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6971', 'merged_at': '2024-06-14T13:57:24Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6971.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6971'}", + "is_pull_request": true + }, + { + "title": "Set dev version", + "html_url": "https://github.com/huggingface/datasets/pull/6970", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6970/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6970.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6970', 'merged_at': '2024-06-13T14:59:56Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6970.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6970'}", + "is_pull_request": true + }, + { + "title": "Release: 2.20.0", + "html_url": "https://github.com/huggingface/datasets/pull/6969", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6969/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6969.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6969', 'merged_at': '2024-06-13T14:55:53Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6969.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6969'}", + "is_pull_request": true + }, + { + "title": "Use `HF_HUB_OFFLINE` instead of `HF_DATASETS_OFFLINE`", + "html_url": "https://github.com/huggingface/datasets/pull/6968", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6968/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6968.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6968', 'merged_at': '2024-06-13T17:25:37Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6968.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6968'}", + "is_pull_request": true + }, + { + "title": "Method to load Laion400m", + "html_url": "https://github.com/huggingface/datasets/issues/6967", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6967/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Remove underlines between badges", + "html_url": "https://github.com/huggingface/datasets/pull/6966", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6966/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6966.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6966', 'merged_at': '2024-06-19T14:10:11Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6966.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6966'}", + "is_pull_request": true + }, + { + "title": "Improve skip take shuffling and distributed", + "html_url": "https://github.com/huggingface/datasets/pull/6965", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6965/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6965.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6965', 'merged_at': '2024-06-24T15:16:16Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6965.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6965'}", + "is_pull_request": true + }, + { + "title": "Fix resuming arrow format", + "html_url": "https://github.com/huggingface/datasets/pull/6964", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6964/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6964.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6964', 'merged_at': '2024-06-14T14:58:37Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6964.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6964'}", + "is_pull_request": true + }, + { + "title": "[Streaming] retry on requests errors", + "html_url": "https://github.com/huggingface/datasets/pull/6963", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6963/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6963.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6963', 'merged_at': '2024-06-28T09:46:52Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6963.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6963'}", + "is_pull_request": true + }, + { + "title": "fix(ci): remove unnecessary permissions", + "html_url": "https://github.com/huggingface/datasets/pull/6962", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6962/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6962.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6962', 'merged_at': '2024-06-11T08:25:47Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6962.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6962'}", + "is_pull_request": true + }, + { + "title": "Manual downloads should count as downloads", + "html_url": "https://github.com/huggingface/datasets/issues/6961", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6961/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "feat(ci): add trufflehog secrets detection", + "html_url": "https://github.com/huggingface/datasets/pull/6960", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6960/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6960.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6960', 'merged_at': '2024-06-08T14:52:18Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6960.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6960'}", + "is_pull_request": true + }, + { + "title": "Better error handling in `dataset_module_factory`", + "html_url": "https://github.com/huggingface/datasets/pull/6959", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6959/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6959.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6959', 'merged_at': '2024-06-10T07:27:43Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6959.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6959'}", + "is_pull_request": true + }, + { + "title": "My Private Dataset doesn't exist on the Hub or cannot be accessed", + "html_url": "https://github.com/huggingface/datasets/issues/6958", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6958/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix typos in docs", + "html_url": "https://github.com/huggingface/datasets/pull/6957", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6957/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6957.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6957', 'merged_at': '2024-06-05T12:43:26Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6957.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6957'}", + "is_pull_request": true + }, + { + "title": "update docs on N-dim arrays", + "html_url": "https://github.com/huggingface/datasets/pull/6956", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6956/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6956.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6956', 'merged_at': '2024-06-04T16:40:27Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6956.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6956'}", + "is_pull_request": true + }, + { + "title": "Fix small typo", + "html_url": "https://github.com/huggingface/datasets/pull/6955", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6955/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6955.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6955', 'merged_at': '2024-06-04T15:20:55Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6955.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6955'}", + "is_pull_request": true + }, + { + "title": "Remove default `trust_remote_code=True`", + "html_url": "https://github.com/huggingface/datasets/pull/6954", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6954/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6954.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6954', 'merged_at': '2024-06-07T12:20:29Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6954.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6954'}", + "is_pull_request": true + }, + { + "title": "Remove canonical datasets from docs", + "html_url": "https://github.com/huggingface/datasets/issues/6953", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6953/comments", + "labels": "[{'color': '0075ca', 'default': True, 'description': 'Improvements or additions to documentation', 'id': 1935892861, 'name': 'documentation', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODYx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/documentation'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Move info_utils errors to exceptions module", + "html_url": "https://github.com/huggingface/datasets/pull/6952", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6952/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6952.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6952', 'merged_at': '2024-06-10T14:03:55Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6952.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6952'}", + "is_pull_request": true + }, + { + "title": "load_dataset() should load all subsets, if no specific subset is specified", + "html_url": "https://github.com/huggingface/datasets/issues/6951", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6951/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "`Dataset.with_format` behaves inconsistently with documentation", + "html_url": "https://github.com/huggingface/datasets/issues/6950", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6950/comments", + "labels": "[{'color': '0075ca', 'default': True, 'description': 'Improvements or additions to documentation', 'id': 1935892861, 'name': 'documentation', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODYx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/documentation'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "load_dataset error", + "html_url": "https://github.com/huggingface/datasets/issues/6949", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6949/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "to_tf_dataset: Visible devices cannot be modified after being initialized", + "html_url": "https://github.com/huggingface/datasets/issues/6948", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6948/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "FileNotFoundError\uff1aerror when loading C4 dataset", + "html_url": "https://github.com/huggingface/datasets/issues/6947", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6947/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Re-enable import sorting disabled by flake8:noqa directive when using ruff linter", + "html_url": "https://github.com/huggingface/datasets/pull/6946", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6946/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6946.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6946', 'merged_at': '2024-06-04T09:54:23Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6946.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6946'}", + "is_pull_request": true + }, + { + "title": "Update yanked version of minimum requests requirement", + "html_url": "https://github.com/huggingface/datasets/pull/6945", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6945/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6945.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6945', 'merged_at': '2024-06-03T06:09:43Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6945.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6945'}", + "is_pull_request": true + }, + { + "title": "Set dev version", + "html_url": "https://github.com/huggingface/datasets/pull/6944", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6944/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6944.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6944', 'merged_at': '2024-06-03T05:31:46Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6944.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6944'}", + "is_pull_request": true + }, + { + "title": "Release 2.19.2", + "html_url": "https://github.com/huggingface/datasets/pull/6943", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6943/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6943.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6943', 'merged_at': '2024-06-03T05:17:40Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6943.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6943'}", + "is_pull_request": true + }, + { + "title": "Import sorting is disabled by flake8 noqa directive after switching to ruff linter", + "html_url": "https://github.com/huggingface/datasets/issues/6942", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6942/comments", + "labels": "[{'color': 'd4c5f9', 'default': False, 'description': 'Maintenance tasks', 'id': 4296013012, 'name': 'maintenance', 'node_id': 'LA_kwDODunzps8AAAABAA_01A', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/maintenance'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Supporting FFCV: Fast Forward Computer Vision", + "html_url": "https://github.com/huggingface/datasets/issues/6941", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6941/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Enable Sharding to Equal Sized Shards", + "html_url": "https://github.com/huggingface/datasets/issues/6940", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6940/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "ExpectedMoreSplits error when using data_dir", + "html_url": "https://github.com/huggingface/datasets/issues/6939", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6939/comments", + "labels": "[{'color': 'd73a4a', 'default': True, 'description': \"Something isn't working\", 'id': 1935892857, 'name': 'bug', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODU3', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/bug'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix expected splits when passing data_files or dir", + "html_url": "https://github.com/huggingface/datasets/pull/6938", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6938/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6938.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6938', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6938.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6938'}", + "is_pull_request": true + }, + { + "title": "JSON loader implicitly coerces floats to integers", + "html_url": "https://github.com/huggingface/datasets/issues/6937", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6937/comments", + "labels": "[{'color': 'd73a4a', 'default': True, 'description': \"Something isn't working\", 'id': 1935892857, 'name': 'bug', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODU3', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/bug'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "save_to_disk() freezes when saving on s3 bucket with multiprocessing", + "html_url": "https://github.com/huggingface/datasets/issues/6936", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6936/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Support for pathlib.Path in datasets 2.19.0", + "html_url": "https://github.com/huggingface/datasets/issues/6935", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6935/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Revert ci user", + "html_url": "https://github.com/huggingface/datasets/pull/6934", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6934/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6934.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6934', 'merged_at': '2024-05-30T10:45:37Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6934.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6934'}", + "is_pull_request": true + }, + { + "title": "update ci user", + "html_url": "https://github.com/huggingface/datasets/pull/6933", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6933/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6933.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6933', 'merged_at': '2024-05-30T10:23:12Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6933.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6933'}", + "is_pull_request": true + }, + { + "title": "Update dataset_dict.py", + "html_url": "https://github.com/huggingface/datasets/pull/6932", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6932/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6932.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6932', 'merged_at': '2024-06-04T12:50:13Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6932.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6932'}", + "is_pull_request": true + }, + { + "title": "[WebDataset] Support compressed files", + "html_url": "https://github.com/huggingface/datasets/pull/6931", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6931/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6931.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6931', 'merged_at': '2024-05-29T16:24:21Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6931.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6931'}", + "is_pull_request": true + }, + { + "title": "ValueError: Couldn't infer the same data file format for all splits. Got {'train': ('json', {}), 'validation': (None, {})}", + "html_url": "https://github.com/huggingface/datasets/issues/6930", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6930/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Avoid downloading the whole dataset when only README.me has been touched on hub.", + "html_url": "https://github.com/huggingface/datasets/issues/6929", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6929/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Update process.mdx: Code Listings Fixes", + "html_url": "https://github.com/huggingface/datasets/pull/6928", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6928/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6928.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6928', 'merged_at': '2024-06-04T12:55:00Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6928.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6928'}", + "is_pull_request": true + }, + { + "title": "Update process.mdx: Minor Code Listings Updates and Fixes", + "html_url": "https://github.com/huggingface/datasets/pull/6927", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6927/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6927.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6927', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6927.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6927'}", + "is_pull_request": true + }, + { + "title": "Update process.mdx: Fix code listing in Shard section", + "html_url": "https://github.com/huggingface/datasets/pull/6926", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6926/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6926.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6926', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6926.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6926'}", + "is_pull_request": true + }, + { + "title": "Fix NonMatchingSplitsSizesError/ExpectedMoreSplits when passing data_dir/data_files in no-code Hub datasets", + "html_url": "https://github.com/huggingface/datasets/pull/6925", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6925/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6925.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6925', 'merged_at': '2024-05-31T17:10:37Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6925.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6925'}", + "is_pull_request": true + }, + { + "title": "Caching map result of DatasetDict.", + "html_url": "https://github.com/huggingface/datasets/issues/6924", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6924/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Export Parquet Tablet Audio-Set is null bytes in Arrow ", + "html_url": "https://github.com/huggingface/datasets/issues/6923", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6923/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Remove torchaudio remnants from code", + "html_url": "https://github.com/huggingface/datasets/pull/6922", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6922/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6922.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6922', 'merged_at': '2024-05-27T08:59:21Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6922.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6922'}", + "is_pull_request": true + }, + { + "title": "Support fsspec 2024.5.0", + "html_url": "https://github.com/huggingface/datasets/pull/6921", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6921/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6921.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6921', 'merged_at': '2024-05-27T08:01:08Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6921.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6921'}", + "is_pull_request": true + }, + { + "title": "[WebDataset] Add `.pth` support for torch tensors", + "html_url": "https://github.com/huggingface/datasets/pull/6920", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6920/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6920.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6920', 'merged_at': '2024-05-27T09:04:54Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6920.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6920'}", + "is_pull_request": true + }, + { + "title": "Invalid YAML in README.md: unknown tag !", + "html_url": "https://github.com/huggingface/datasets/issues/6919", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6919/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "NonMatchingSplitsSizesError when using data_dir", + "html_url": "https://github.com/huggingface/datasets/issues/6918", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6918/comments", + "labels": "[{'color': 'd73a4a', 'default': True, 'description': \"Something isn't working\", 'id': 1935892857, 'name': 'bug', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODU3', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/bug'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "WinError 32 The process cannot access the file during load_dataset", + "html_url": "https://github.com/huggingface/datasets/issues/6917", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6917/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "```push_to_hub()``` - Prevent Automatic Generation of Splits ", + "html_url": "https://github.com/huggingface/datasets/issues/6916", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6916/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Validate config name and data_files in packaged modules", + "html_url": "https://github.com/huggingface/datasets/pull/6915", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6915/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6915.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6915', 'merged_at': '2024-06-06T09:24:35Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6915.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6915'}", + "is_pull_request": true + }, + { + "title": "Preserve JSON column order and support list of strings field", + "html_url": "https://github.com/huggingface/datasets/pull/6914", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6914/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6914.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6914', 'merged_at': '2024-05-29T13:12:23Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6914.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6914'}", + "is_pull_request": true + }, + { + "title": "Column order is nondeterministic when loading from JSON", + "html_url": "https://github.com/huggingface/datasets/issues/6913", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6913/comments", + "labels": "[{'color': 'd73a4a', 'default': True, 'description': \"Something isn't working\", 'id': 1935892857, 'name': 'bug', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODU3', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/bug'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Add MedImg for streaming", + "html_url": "https://github.com/huggingface/datasets/issues/6912", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6912/comments", + "labels": "[{'color': 'e99695', 'default': False, 'description': 'Requesting to add a new dataset', 'id': 2067376369, 'name': 'dataset request', 'node_id': 'MDU6TGFiZWwyMDY3Mzc2MzY5', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/dataset%20request'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Remove dead code for non-dict data_files from packaged modules", + "html_url": "https://github.com/huggingface/datasets/pull/6911", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6911/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6911.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6911', 'merged_at': '2024-05-23T07:59:57Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6911.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6911'}", + "is_pull_request": true + }, + { + "title": "Fix wrong type hints in data_files", + "html_url": "https://github.com/huggingface/datasets/pull/6910", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6910/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6910.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6910', 'merged_at': '2024-05-23T05:58:05Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6910.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6910'}", + "is_pull_request": true + }, + { + "title": "Update requests >=2.32.1 to fix vulnerability", + "html_url": "https://github.com/huggingface/datasets/pull/6909", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6909/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6909.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6909', 'merged_at': '2024-05-21T07:38:25Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6909.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6909'}", + "is_pull_request": true + }, + { + "title": "Fail to load \"stas/c4-en-10k\" dataset since 2.16 version", + "html_url": "https://github.com/huggingface/datasets/issues/6908", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6908/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Support the deserialization of json lines files comprised of lists", + "html_url": "https://github.com/huggingface/datasets/issues/6907", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6907/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "irc_disentangle - Issue with splitting data", + "html_url": "https://github.com/huggingface/datasets/issues/6906", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6906/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Extraction protocol for arrow files is not defined", + "html_url": "https://github.com/huggingface/datasets/issues/6905", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6905/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix decoding multi part extension", + "html_url": "https://github.com/huggingface/datasets/pull/6904", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6904/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6904.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6904', 'merged_at': '2024-05-17T14:46:54Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6904.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6904'}", + "is_pull_request": true + }, + { + "title": "Add the option of saving in parquet instead of arrow ", + "html_url": "https://github.com/huggingface/datasets/issues/6903", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6903/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Make CLI convert_to_parquet not raise error if no rights to create script branch", + "html_url": "https://github.com/huggingface/datasets/pull/6902", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6902/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6902.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6902', 'merged_at': '2024-05-16T12:51:04Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6902.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6902'}", + "is_pull_request": true + }, + { + "title": "HTTPError 403 raised by CLI convert_to_parquet when creating script branch on 3rd party repos", + "html_url": "https://github.com/huggingface/datasets/issues/6901", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6901/comments", + "labels": "[{'color': 'd73a4a', 'default': True, 'description': \"Something isn't working\", 'id': 1935892857, 'name': 'bug', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODU3', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/bug'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "[WebDataset] KeyError with user-defined `Features` when a field is missing in an example", + "html_url": "https://github.com/huggingface/datasets/issues/6900", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6900/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "List of dictionary features get standardized", + "html_url": "https://github.com/huggingface/datasets/issues/6899", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6899/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix YAML error in README files appearing on GitHub", + "html_url": "https://github.com/huggingface/datasets/pull/6898", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6898/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6898.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6898', 'merged_at': '2024-05-16T14:28:16Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6898.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6898'}", + "is_pull_request": true + }, + { + "title": "datasets template guide :: issue in documentation YAML", + "html_url": "https://github.com/huggingface/datasets/issues/6897", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6897/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Regression bug: `NonMatchingSplitsSizesError` for (possibly) overwritten dataset", + "html_url": "https://github.com/huggingface/datasets/issues/6896", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6896/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Document that to_json defaults to JSON Lines", + "html_url": "https://github.com/huggingface/datasets/pull/6895", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6895/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6895.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6895', 'merged_at': '2024-05-16T14:31:26Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6895.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6895'}", + "is_pull_request": true + }, + { + "title": "Better document defaults of to_json", + "html_url": "https://github.com/huggingface/datasets/issues/6894", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6894/comments", + "labels": "[{'color': '0075ca', 'default': True, 'description': 'Improvements or additions to documentation', 'id': 1935892861, 'name': 'documentation', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODYx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/documentation'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Close gzipped files properly", + "html_url": "https://github.com/huggingface/datasets/pull/6893", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6893/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6893.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6893', 'merged_at': '2024-05-13T13:01:54Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6893.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6893'}", + "is_pull_request": true + }, + { + "title": "Add support for categorical/dictionary types", + "html_url": "https://github.com/huggingface/datasets/pull/6892", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6892/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6892.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6892', 'merged_at': '2024-06-07T12:20:42Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6892.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6892'}", + "is_pull_request": true + }, + { + "title": "Unable to load JSON saved using `to_json`", + "html_url": "https://github.com/huggingface/datasets/issues/6891", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6891/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "add `with_transform` and/or `set_transform` to IterableDataset", + "html_url": "https://github.com/huggingface/datasets/issues/6890", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6890/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "fix bug #6877", + "html_url": "https://github.com/huggingface/datasets/pull/6889", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6889/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6889.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6889', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6889.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6889'}", + "is_pull_request": true + }, + { + "title": "Support WebDataset containing file basenames with dots", + "html_url": "https://github.com/huggingface/datasets/pull/6888", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6888/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6888.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6888', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6888.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6888'}", + "is_pull_request": true + }, + { + "title": "FAISS load to None", + "html_url": "https://github.com/huggingface/datasets/issues/6887", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6887/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "load_dataset with data_dir and cache_dir set fail with not supported", + "html_url": "https://github.com/huggingface/datasets/issues/6886", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6886/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Support jax 0.4.27 in CI tests", + "html_url": "https://github.com/huggingface/datasets/pull/6885", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6885/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6885.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6885', 'merged_at': '2024-05-08T09:35:16Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6885.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6885'}", + "is_pull_request": true + }, + { + "title": "CI is broken after jax-0.4.27 release: AttributeError: 'jaxlib.xla_extension.DeviceList' object has no attribute 'device'", + "html_url": "https://github.com/huggingface/datasets/issues/6884", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6884/comments", + "labels": "[{'color': 'd73a4a', 'default': True, 'description': \"Something isn't working\", 'id': 1935892857, 'name': 'bug', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODU3', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/bug'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Require Pillow >= 9.4.0 to avoid AttributeError when loading image dataset", + "html_url": "https://github.com/huggingface/datasets/pull/6883", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6883/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6883.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6883', 'merged_at': '2024-05-16T14:34:02Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6883.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6883'}", + "is_pull_request": true + }, + { + "title": "Connection Error When Using By-pass Proxies", + "html_url": "https://github.com/huggingface/datasets/issues/6882", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6882/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "AttributeError: module 'PIL.Image' has no attribute 'ExifTags'", + "html_url": "https://github.com/huggingface/datasets/issues/6881", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6881/comments", + "labels": "[{'color': 'd73a4a', 'default': True, 'description': \"Something isn't working\", 'id': 1935892857, 'name': 'bug', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODU3', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/bug'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Webdataset: KeyError: 'png' on some datasets when streaming", + "html_url": "https://github.com/huggingface/datasets/issues/6880", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6880/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Batched mapping does not raise an error if values for an existing column are empty", + "html_url": "https://github.com/huggingface/datasets/issues/6879", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6879/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Create function to convert to parquet", + "html_url": "https://github.com/huggingface/datasets/pull/6878", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6878/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6878.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6878', 'merged_at': '2024-05-16T14:38:22Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6878.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6878'}", + "is_pull_request": true + }, + { + "title": "OSError: [Errno 24] Too many open files", + "html_url": "https://github.com/huggingface/datasets/issues/6877", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6877/comments", + "labels": "[{'color': 'd73a4a', 'default': True, 'description': \"Something isn't working\", 'id': 1935892857, 'name': 'bug', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODU3', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/bug'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Unpin hfh", + "html_url": "https://github.com/huggingface/datasets/pull/6876", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6876/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6876.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6876', 'merged_at': '2024-05-27T10:14:40Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6876.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6876'}", + "is_pull_request": true + }, + { + "title": "Shorten long logs", + "html_url": "https://github.com/huggingface/datasets/pull/6875", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6875/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6875.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6875', 'merged_at': '2024-05-07T12:25:45Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6875.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6875'}", + "is_pull_request": true + }, + { + "title": "Use pandas ujson in JSON loader to improve performance", + "html_url": "https://github.com/huggingface/datasets/pull/6874", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6874/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6874.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6874', 'merged_at': '2024-05-17T16:22:27Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6874.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6874'}", + "is_pull_request": true + }, + { + "title": "Set dev version", + "html_url": "https://github.com/huggingface/datasets/pull/6873", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6873/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6873.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6873', 'merged_at': '2024-05-06T09:57:12Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6873.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6873'}", + "is_pull_request": true + }, + { + "title": "Release 2.19.1", + "html_url": "https://github.com/huggingface/datasets/pull/6872", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6872/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6872.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6872', 'merged_at': '2024-05-06T09:35:32Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6872.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6872'}", + "is_pull_request": true + }, + { + "title": "Fix download for dict of dicts of URLs", + "html_url": "https://github.com/huggingface/datasets/pull/6871", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6871/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6871.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6871', 'merged_at': '2024-05-06T09:25:52Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6871.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6871'}", + "is_pull_request": true + }, + { + "title": "Update tqdm >= 4.66.3 to fix vulnerability", + "html_url": "https://github.com/huggingface/datasets/pull/6870", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6870/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6870.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6870', 'merged_at': '2024-05-06T06:02:00Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6870.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6870'}", + "is_pull_request": true + }, + { + "title": "Download is broken for dict of dicts: FileNotFoundError", + "html_url": "https://github.com/huggingface/datasets/issues/6869", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6869/comments", + "labels": "[{'color': 'd73a4a', 'default': True, 'description': \"Something isn't working\", 'id': 1935892857, 'name': 'bug', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODU3', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/bug'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "datasets.BuilderConfig does not work.", + "html_url": "https://github.com/huggingface/datasets/issues/6868", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6868/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Improve performance of JSON loader", + "html_url": "https://github.com/huggingface/datasets/issues/6867", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6867/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "DataFilesNotFoundError for datasets in the open-llm-leaderboard", + "html_url": "https://github.com/huggingface/datasets/issues/6866", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6866/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Example on Semantic segmentation contains bug", + "html_url": "https://github.com/huggingface/datasets/issues/6865", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6865/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Dataset 'rewardsignal/reddit_writing_prompts' doesn't exist on the Hub", + "html_url": "https://github.com/huggingface/datasets/issues/6864", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6864/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Revert temporary pin huggingface-hub < 0.23.0", + "html_url": "https://github.com/huggingface/datasets/issues/6863", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6863/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Issue 6598: load_dataset broken for data_files on s3", + "html_url": "https://github.com/huggingface/datasets/pull/6862", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6862/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6862.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6862', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6862.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6862'}", + "is_pull_request": true + }, + { + "title": "Fix CI by temporarily pinning huggingface-hub < 0.23.0", + "html_url": "https://github.com/huggingface/datasets/pull/6861", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6861/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6861.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6861', 'merged_at': '2024-05-02T16:53:42Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6861.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6861'}", + "is_pull_request": true + }, + { + "title": "CI fails after huggingface_hub-0.23.0 release: FutureWarning: \"resume_download\"", + "html_url": "https://github.com/huggingface/datasets/issues/6860", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6860/comments", + "labels": "[{'color': 'd73a4a', 'default': True, 'description': \"Something isn't working\", 'id': 1935892857, 'name': 'bug', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODU3', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/bug'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Support folder-based datasets with large metadata.jsonl", + "html_url": "https://github.com/huggingface/datasets/pull/6859", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6859/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6859.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6859', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6859.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6859'}", + "is_pull_request": true + }, + { + "title": "Segmentation fault", + "html_url": "https://github.com/huggingface/datasets/issues/6858", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6858/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix line-endings in tests on Windows", + "html_url": "https://github.com/huggingface/datasets/pull/6857", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6857/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6857.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6857', 'merged_at': '2024-05-02T11:43:00Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6857.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6857'}", + "is_pull_request": true + }, + { + "title": "CI fails on Windows for test_delete_from_hub and test_xgetsize_private due to new-line character", + "html_url": "https://github.com/huggingface/datasets/issues/6856", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6856/comments", + "labels": "[{'color': 'd73a4a', 'default': True, 'description': \"Something isn't working\", 'id': 1935892857, 'name': 'bug', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODU3', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/bug'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix dataset name for community Hub script-datasets", + "html_url": "https://github.com/huggingface/datasets/pull/6855", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6855/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6855.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6855', 'merged_at': '2024-05-03T15:51:57Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6855.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6855'}", + "is_pull_request": true + }, + { + "title": "Wrong example of usage when config name is missing for community script-datasets", + "html_url": "https://github.com/huggingface/datasets/issues/6854", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6854/comments", + "labels": "[{'color': 'd73a4a', 'default': True, 'description': \"Something isn't working\", 'id': 1935892857, 'name': 'bug', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODU3', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/bug'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Support soft links for load_datasets imagefolder", + "html_url": "https://github.com/huggingface/datasets/issues/6853", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6853/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Write token isn't working while pushing to datasets", + "html_url": "https://github.com/huggingface/datasets/issues/6852", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6852/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "load_dataset('emotion') UnicodeDecodeError", + "html_url": "https://github.com/huggingface/datasets/issues/6851", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6851/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Problem loading voxpopuli dataset ", + "html_url": "https://github.com/huggingface/datasets/issues/6850", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6850/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "fix webdataset filename split", + "html_url": "https://github.com/huggingface/datasets/pull/6849", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6849/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6849.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6849', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6849.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6849'}", + "is_pull_request": true + }, + { + "title": "Cant Downlaod Common Voice 17.0 hy-AM ", + "html_url": "https://github.com/huggingface/datasets/issues/6848", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6848/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "[Streaming] Only load requested splits without resolving files for the other splits", + "html_url": "https://github.com/huggingface/datasets/issues/6847", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6847/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Unimaginable super slow iteration", + "html_url": "https://github.com/huggingface/datasets/issues/6846", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6846/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "load_dataset doesn't support list column", + "html_url": "https://github.com/huggingface/datasets/issues/6845", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6845/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Retry on HF Hub error when streaming", + "html_url": "https://github.com/huggingface/datasets/pull/6844", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6844/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6844.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6844', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6844.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6844'}", + "is_pull_request": true + }, + { + "title": "IterableDataset raises exception instead of retrying", + "html_url": "https://github.com/huggingface/datasets/issues/6843", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6843/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Datasets with files with colon : in filenames cannot be used on Windows", + "html_url": "https://github.com/huggingface/datasets/issues/6842", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6842/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Unable to load wiki_auto_asset_turk from GEM", + "html_url": "https://github.com/huggingface/datasets/issues/6841", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6841/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Delete uploaded files from the UI", + "html_url": "https://github.com/huggingface/datasets/issues/6840", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6840/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Remove token arg from CLI examples", + "html_url": "https://github.com/huggingface/datasets/pull/6839", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6839/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6839.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6839', 'merged_at': '2024-04-26T16:57:40Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6839.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6839'}", + "is_pull_request": true + }, + { + "title": "Remove token arg from CLI examples", + "html_url": "https://github.com/huggingface/datasets/issues/6838", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6838/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Cannot use cached dataset without Internet connection (or when servers are down)", + "html_url": "https://github.com/huggingface/datasets/issues/6837", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6837/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "ExpectedMoreSplits error on load_dataset when upgrading to 2.19.0", + "html_url": "https://github.com/huggingface/datasets/issues/6836", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6836/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Support pyarrow LargeListType", + "html_url": "https://github.com/huggingface/datasets/pull/6835", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6835/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6835.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6835', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6835.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6835'}", + "is_pull_request": true + }, + { + "title": "largelisttype not supported (.from_polars())", + "html_url": "https://github.com/huggingface/datasets/issues/6834", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6834/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Super slow iteration with trivial custom transform", + "html_url": "https://github.com/huggingface/datasets/issues/6833", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6833/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Support downloading specific splits in `load_dataset`", + "html_url": "https://github.com/huggingface/datasets/pull/6832", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6832/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6832.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6832', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6832.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6832'}", + "is_pull_request": true + }, + { + "title": "Add docs about the CLI", + "html_url": "https://github.com/huggingface/datasets/pull/6831", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6831/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6831.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6831', 'merged_at': '2024-04-25T10:44:10Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6831.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6831'}", + "is_pull_request": true + }, + { + "title": "Add a doc page for the convert_to_parquet CLI", + "html_url": "https://github.com/huggingface/datasets/issues/6830", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6830/comments", + "labels": "[{'color': '0075ca', 'default': True, 'description': 'Improvements or additions to documentation', 'id': 1935892861, 'name': 'documentation', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODYx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/documentation'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Load and save from/to disk no longer accept pathlib.Path", + "html_url": "https://github.com/huggingface/datasets/issues/6829", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6829/comments", + "labels": "[{'color': 'd73a4a', 'default': True, 'description': \"Something isn't working\", 'id': 1935892857, 'name': 'bug', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODU3', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/bug'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Support PathLike input in save_to_disk / load_from_disk", + "html_url": "https://github.com/huggingface/datasets/pull/6828", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6828/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6828.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6828', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6828.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6828'}", + "is_pull_request": true + }, + { + "title": "Loading a remote dataset fails in the last release (v2.19.0)", + "html_url": "https://github.com/huggingface/datasets/issues/6827", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6827/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Set dev version", + "html_url": "https://github.com/huggingface/datasets/pull/6826", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6826/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6826.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6826', 'merged_at': '2024-04-19T08:52:13Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6826.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6826'}", + "is_pull_request": true + }, + { + "title": "Release: 2.19.0", + "html_url": "https://github.com/huggingface/datasets/pull/6825", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6825/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6825.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6825', 'merged_at': '2024-04-19T08:44:57Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6825.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6825'}", + "is_pull_request": true + }, + { + "title": "Winogrande does not seem to be compatible with datasets version of 1.18.0", + "html_url": "https://github.com/huggingface/datasets/issues/6824", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6824/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Loading problems of Datasets with a single shard", + "html_url": "https://github.com/huggingface/datasets/issues/6823", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6823/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix parquet export infos", + "html_url": "https://github.com/huggingface/datasets/pull/6822", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6822/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6822.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6822', 'merged_at': '2024-04-18T11:09:13Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6822.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6822'}", + "is_pull_request": true + }, + { + "title": "Allow deleting a subset/config from a no-script dataset", + "html_url": "https://github.com/huggingface/datasets/pull/6820", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6820/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6820.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6820', 'merged_at': '2024-04-30T09:44:24Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6820.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6820'}", + "is_pull_request": true + }, + { + "title": "Give more details in `DataFilesNotFoundError` when getting the config names", + "html_url": "https://github.com/huggingface/datasets/issues/6819", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6819/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Support indexable objects in `Dataset.__getitem__`", + "html_url": "https://github.com/huggingface/datasets/pull/6817", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6817/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6817.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6817', 'merged_at': '2024-04-16T18:17:29Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6817.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6817'}", + "is_pull_request": true + }, + { + "title": "Improve typing of Dataset.search, matching definition", + "html_url": "https://github.com/huggingface/datasets/pull/6816", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6816/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6816.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6816', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6816.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6816'}", + "is_pull_request": true + }, + { + "title": "Remove `os.path.relpath` in `resolve_patterns`", + "html_url": "https://github.com/huggingface/datasets/pull/6815", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6815/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6815.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6815', 'merged_at': '2024-04-16T15:58:22Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6815.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6815'}", + "is_pull_request": true + }, + { + "title": "`map` with `num_proc` > 1 leads to OOM", + "html_url": "https://github.com/huggingface/datasets/issues/6814", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6814/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Add Dataset.take and Dataset.skip", + "html_url": "https://github.com/huggingface/datasets/pull/6813", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6813/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6813.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6813', 'merged_at': '2024-04-16T14:06:07Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6813.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6813'}", + "is_pull_request": true + }, + { + "title": "Run CI", + "html_url": "https://github.com/huggingface/datasets/pull/6812", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6812/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6812.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6812', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6812.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6812'}", + "is_pull_request": true + }, + { + "title": "add allow_primitive_to_str and allow_decimal_to_str instead of allow_number_to_str", + "html_url": "https://github.com/huggingface/datasets/pull/6811", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6811/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6811.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6811', 'merged_at': '2024-04-16T17:03:17Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6811.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6811'}", + "is_pull_request": true + }, + { + "title": "Allow deleting a subset/config from a no-script dataset", + "html_url": "https://github.com/huggingface/datasets/issues/6810", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6810/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Make convert_to_parquet CLI command create script branch", + "html_url": "https://github.com/huggingface/datasets/pull/6809", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6809/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6809.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6809', 'merged_at': '2024-04-17T08:38:18Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6809.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6809'}", + "is_pull_request": true + }, + { + "title": "Make convert_to_parquet CLI command create script branch", + "html_url": "https://github.com/huggingface/datasets/issues/6808", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6808/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix hf-internal-testing/dataset_with_script commit SHA in CI test", + "html_url": "https://github.com/huggingface/datasets/pull/6806", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6806/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6806.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6806', 'merged_at': '2024-04-12T09:02:12Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6806.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6806'}", + "is_pull_request": true + }, + { + "title": "Batched mapping of existing string column casts boolean to string", + "html_url": "https://github.com/huggingface/datasets/issues/6805", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6805/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix --repo-type order in cli upload docs", + "html_url": "https://github.com/huggingface/datasets/pull/6804", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6804/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6804.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6804', 'merged_at': '2024-04-11T16:18:47Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6804.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6804'}", + "is_pull_request": true + }, + { + "title": "#6791 Improve type checking around FAISS", + "html_url": "https://github.com/huggingface/datasets/pull/6803", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6803/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6803.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6803', 'merged_at': '2024-04-11T15:38:04Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6803.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6803'}", + "is_pull_request": true + }, + { + "title": "Fix typo in docs (upload CLI)", + "html_url": "https://github.com/huggingface/datasets/pull/6802", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6802/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6802.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6802', 'merged_at': '2024-04-11T13:19:43Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6802.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6802'}", + "is_pull_request": true + }, + { + "title": "got fileNotFound", + "html_url": "https://github.com/huggingface/datasets/issues/6801", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6801/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "High overhead when loading lots of subsets from the same dataset", + "html_url": "https://github.com/huggingface/datasets/issues/6800", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6800/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "fix `DatasetBuilder._split_generators` incomplete type annotation", + "html_url": "https://github.com/huggingface/datasets/pull/6799", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6799/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6799.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6799', 'merged_at': '2024-04-11T15:34:58Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6799.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6799'}", + "is_pull_request": true + }, + { + "title": "`DatasetBuilder._split_generators` incomplete type annotation", + "html_url": "https://github.com/huggingface/datasets/issues/6798", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6798/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix CI test_load_dataset_distributed_with_script", + "html_url": "https://github.com/huggingface/datasets/pull/6797", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6797/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6797.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6797', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6797.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6797'}", + "is_pull_request": true + }, + { + "title": "CI is broken due to hf-internal-testing/dataset_with_script", + "html_url": "https://github.com/huggingface/datasets/issues/6796", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6796/comments", + "labels": "[{'color': 'd73a4a', 'default': True, 'description': \"Something isn't working\", 'id': 1935892857, 'name': 'bug', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODU3', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/bug'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Add CLI function to convert script-dataset to Parquet", + "html_url": "https://github.com/huggingface/datasets/pull/6795", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6795/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6795.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6795', 'merged_at': '2024-04-12T15:27:04Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6795.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6795'}", + "is_pull_request": true + }, + { + "title": "Multithreaded downloads", + "html_url": "https://github.com/huggingface/datasets/pull/6794", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6794/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6794.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6794', 'merged_at': '2024-04-15T21:18:08Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6794.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6794'}", + "is_pull_request": true + }, + { + "title": "Loading just one particular split is not possible for imagenet-1k", + "html_url": "https://github.com/huggingface/datasets/issues/6793", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6793/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix cache conflict in `_check_legacy_cache2`", + "html_url": "https://github.com/huggingface/datasets/pull/6792", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6792/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6792.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6792', 'merged_at': '2024-04-09T11:27:57Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6792.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6792'}", + "is_pull_request": true + }, + { + "title": "`add_faiss_index` raises ValueError: not enough values to unpack (expected 2, got 1)", + "html_url": "https://github.com/huggingface/datasets/issues/6791", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6791/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "PyArrow 'Memory mapping file failed: Cannot allocate memory' bug", + "html_url": "https://github.com/huggingface/datasets/issues/6790", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6790/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Issue with map", + "html_url": "https://github.com/huggingface/datasets/issues/6789", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6789/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "A Question About the Map Function", + "html_url": "https://github.com/huggingface/datasets/issues/6788", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6788/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "TimeoutError in map", + "html_url": "https://github.com/huggingface/datasets/issues/6787", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6787/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Make Image cast storage faster", + "html_url": "https://github.com/huggingface/datasets/pull/6786", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6786/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6786.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6786', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6786.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6786'}", + "is_pull_request": true + }, + { + "title": "rename datasets-server to dataset-viewer", + "html_url": "https://github.com/huggingface/datasets/pull/6785", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6785/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6785.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6785', 'merged_at': '2024-04-08T12:35:02Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6785.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6785'}", + "is_pull_request": true + }, + { + "title": "Extract data on the fly in packaged builders", + "html_url": "https://github.com/huggingface/datasets/pull/6784", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6784/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6784.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6784', 'merged_at': '2024-04-16T16:31:29Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6784.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6784'}", + "is_pull_request": true + }, + { + "title": "AttributeError: module 'numpy' has no attribute 'object'. in Kaggle Notebook", + "html_url": "https://github.com/huggingface/datasets/issues/6783", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6783/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Image cast_storage very slow for arrays (e.g. numpy, tensors)", + "html_url": "https://github.com/huggingface/datasets/issues/6782", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6782/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Remove get_inferred_type from ArrowWriter write_batch", + "html_url": "https://github.com/huggingface/datasets/pull/6781", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6781/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6781.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6781', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6781.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6781'}", + "is_pull_request": true + }, + { + "title": "Fix CI", + "html_url": "https://github.com/huggingface/datasets/pull/6780", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6780/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6780.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6780', 'merged_at': '2024-04-04T18:23:34Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6780.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6780'}", + "is_pull_request": true + }, + { + "title": "Install dependencies with `uv` in CI", + "html_url": "https://github.com/huggingface/datasets/pull/6779", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6779/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6779.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6779', 'merged_at': '2024-04-08T13:27:43Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6779.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6779'}", + "is_pull_request": true + }, + { + "title": "Dataset.to_csv() missing commas in columns with lists", + "html_url": "https://github.com/huggingface/datasets/issues/6778", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6778/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": ".Jsonl metadata not detected", + "html_url": "https://github.com/huggingface/datasets/issues/6777", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6777/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "IndexError: Invalid key: 0 is out of bounds for size 0", + "html_url": "https://github.com/huggingface/datasets/issues/6775", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6775/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": " Generating split is very slow when Image format is PNG", + "html_url": "https://github.com/huggingface/datasets/issues/6774", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6774/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Dataset on Hub re-downloads every time?", + "html_url": "https://github.com/huggingface/datasets/issues/6773", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6773/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "`remove_columns`/`rename_columns` doc fixes", + "html_url": "https://github.com/huggingface/datasets/pull/6772", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6772/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6772.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6772', 'merged_at': '2024-04-02T16:17:46Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6772.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6772'}", + "is_pull_request": true + }, + { + "title": "Datasets FileNotFoundError when trying to generate examples.", + "html_url": "https://github.com/huggingface/datasets/issues/6771", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6771/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "[Bug Report] `datasets==2.18.0` is not compatible with `fsspec==2023.12.2`", + "html_url": "https://github.com/huggingface/datasets/issues/6770", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6770/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "(Willing to PR) Datasets with custom python objects", + "html_url": "https://github.com/huggingface/datasets/issues/6769", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6769/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "fixing the issue 6755(small typo)", + "html_url": "https://github.com/huggingface/datasets/pull/6767", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6767/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6767.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6767', 'merged_at': '2024-04-02T14:01:18Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6767.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6767'}", + "is_pull_request": true + }, + { + "title": "Compatibility issue between s3fs, fsspec, and datasets", + "html_url": "https://github.com/huggingface/datasets/issues/6765", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6765/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "load_dataset can't work with symbolic links", + "html_url": "https://github.com/huggingface/datasets/issues/6764", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6764/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix issue with case sensitivity when loading dataset from local cache", + "html_url": "https://github.com/huggingface/datasets/pull/6763", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6763/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6763.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6763', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6763.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6763'}", + "is_pull_request": true + }, + { + "title": "Allow polars as valid output type", + "html_url": "https://github.com/huggingface/datasets/pull/6762", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6762/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6762.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6762', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6762.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6762'}", + "is_pull_request": true + }, + { + "title": "Remove deprecated code", + "html_url": "https://github.com/huggingface/datasets/pull/6761", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6761/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6761.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6761', 'merged_at': '2024-03-29T13:18:13Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6761.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6761'}", + "is_pull_request": true + }, + { + "title": "Load codeparrot/apps raising UnicodeDecodeError in datasets-2.18.0", + "html_url": "https://github.com/huggingface/datasets/issues/6760", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6760/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Persistent multi-process Pool", + "html_url": "https://github.com/huggingface/datasets/issues/6759", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6759/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Passing `sample_by` to `load_dataset` when loading text data does not work", + "html_url": "https://github.com/huggingface/datasets/issues/6758", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6758/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Test disabling transformers containers in docs CI", + "html_url": "https://github.com/huggingface/datasets/pull/6757", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6757/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6757.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6757', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6757.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6757'}", + "is_pull_request": true + }, + { + "title": "Support SQLite files?", + "html_url": "https://github.com/huggingface/datasets/issues/6756", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6756/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Small typo on the documentation", + "html_url": "https://github.com/huggingface/datasets/issues/6755", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6755/comments", + "labels": "[{'color': '7057ff', 'default': True, 'description': 'Good for newcomers', 'id': 1935892877, 'name': 'good first issue', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODc3', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/good%20first%20issue'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix cache path to snakecase for `CachedDatasetModuleFactory` and `Cache`", + "html_url": "https://github.com/huggingface/datasets/pull/6754", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6754/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6754.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6754', 'merged_at': '2024-04-15T15:38:51Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6754.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6754'}", + "is_pull_request": true + }, + { + "title": "Type error when importing datasets on Kaggle", + "html_url": "https://github.com/huggingface/datasets/issues/6753", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6753/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Precision being changed from float16 to float32 unexpectedly", + "html_url": "https://github.com/huggingface/datasets/issues/6752", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6752/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Use 'with' operator for some download functions", + "html_url": "https://github.com/huggingface/datasets/pull/6751", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6751/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6751.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6751', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6751.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6751'}", + "is_pull_request": true + }, + { + "title": "`load_dataset` requires a network connection for local download?", + "html_url": "https://github.com/huggingface/datasets/issues/6750", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6750/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix fsspec tqdm callback", + "html_url": "https://github.com/huggingface/datasets/pull/6749", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6749/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6749.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6749', 'merged_at': '2024-03-22T14:45:39Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6749.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6749'}", + "is_pull_request": true + }, + { + "title": "Strange slicing behavior", + "html_url": "https://github.com/huggingface/datasets/issues/6748", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6748/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "chore(deps): bump fsspec", + "html_url": "https://github.com/huggingface/datasets/pull/6747", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6747/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6747.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6747', 'merged_at': '2024-03-22T16:28:40Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6747.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6747'}", + "is_pull_request": true + }, + { + "title": "ExpectedMoreSplits error when loading C4 dataset", + "html_url": "https://github.com/huggingface/datasets/issues/6746", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6746/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Scraping the whole of github including private repos is bad; kindly stop", + "html_url": "https://github.com/huggingface/datasets/issues/6745", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6745/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Option to disable file locking", + "html_url": "https://github.com/huggingface/datasets/issues/6744", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6744/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Allow null values in dict columns", + "html_url": "https://github.com/huggingface/datasets/pull/6743", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6743/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6743.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6743', 'merged_at': '2024-03-19T20:05:19Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6743.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6743'}", + "is_pull_request": true + }, + { + "title": "Fix missing download_config in get_data_patterns", + "html_url": "https://github.com/huggingface/datasets/pull/6742", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6742/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6742.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6742', 'merged_at': '2024-03-19T18:15:13Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6742.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6742'}", + "is_pull_request": true + }, + { + "title": "Fix offline mode with single config", + "html_url": "https://github.com/huggingface/datasets/pull/6741", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6741/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6741.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6741', 'merged_at': '2024-03-25T16:23:59Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6741.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6741'}", + "is_pull_request": true + }, + { + "title": "Support for loading geotiff files as a part of the ImageFolder", + "html_url": "https://github.com/huggingface/datasets/issues/6740", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6740/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Transpose images with EXIF Orientation tag", + "html_url": "https://github.com/huggingface/datasets/pull/6739", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6739/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6739.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6739', 'merged_at': '2024-03-19T15:29:41Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6739.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6739'}", + "is_pull_request": true + }, + { + "title": "Dict feature is non-nullable while nested dict feature is", + "html_url": "https://github.com/huggingface/datasets/issues/6738", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6738/comments", + "labels": "[{'color': 'd73a4a', 'default': True, 'description': \"Something isn't working\", 'id': 1935892857, 'name': 'bug', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODU3', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/bug'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Invalid pattern: '**' can only be an entire path component", + "html_url": "https://github.com/huggingface/datasets/issues/6737", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6737/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Mosaic Streaming (MDS) Support", + "html_url": "https://github.com/huggingface/datasets/issues/6736", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6736/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Add `mode` parameter to `Image` feature", + "html_url": "https://github.com/huggingface/datasets/pull/6735", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6735/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6735.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6735', 'merged_at': '2024-03-18T15:41:33Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6735.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6735'}", + "is_pull_request": true + }, + { + "title": "Tokenization slows towards end of dataset", + "html_url": "https://github.com/huggingface/datasets/issues/6734", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6734/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "EmptyDatasetError when loading dataset downloaded with HuggingFace cli", + "html_url": "https://github.com/huggingface/datasets/issues/6733", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6733/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Unexpected behavior when using load_dataset with streaming=True in a for loop", + "html_url": "https://github.com/huggingface/datasets/issues/6731", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6731/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Deprecate Pandas builder", + "html_url": "https://github.com/huggingface/datasets/pull/6730", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6730/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6730.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6730', 'merged_at': '2024-03-12T17:36:24Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6730.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6730'}", + "is_pull_request": true + }, + { + "title": "Support zipfiles that span multiple disks?", + "html_url": "https://github.com/huggingface/datasets/issues/6729", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6729/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}\n {'color': 'd876e3', 'default': True, 'description': 'Further information is requested', 'id': 1935892912, 'name': 'question', 'node_id': 'MDU6TGFiZWwxOTM1ODkyOTEy', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/question'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Issue Downloading Certain Datasets After Setting Custom `HF_ENDPOINT`", + "html_url": "https://github.com/huggingface/datasets/issues/6728", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6728/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Using a registry instead of calling globals for fetching feature types", + "html_url": "https://github.com/huggingface/datasets/pull/6727", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6727/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6727.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6727', 'merged_at': '2024-03-13T10:46:02Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6727.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6727'}", + "is_pull_request": true + }, + { + "title": "Profiling for HF Filesystem shows there are easy performance gains to be made", + "html_url": "https://github.com/huggingface/datasets/issues/6726", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6726/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Request for a comparison of huggingface datasets compared with other data format especially webdataset", + "html_url": "https://github.com/huggingface/datasets/issues/6725", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6725/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Dataset with loading script does not work in renamed repos", + "html_url": "https://github.com/huggingface/datasets/issues/6724", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6724/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "get_dataset_default_config_name docstring", + "html_url": "https://github.com/huggingface/datasets/pull/6723", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6723/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6723.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6723', 'merged_at': '2024-03-07T17:21:20Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6723.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6723'}", + "is_pull_request": true + }, + { + "title": "Add details in docstring", + "html_url": "https://github.com/huggingface/datasets/pull/6722", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6722/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6722.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6722', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6722.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6722'}", + "is_pull_request": true + }, + { + "title": "Hi,do you know how to load the dataset from local file now?", + "html_url": "https://github.com/huggingface/datasets/issues/6721", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6721/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "TypeError: 'str' object is not callable", + "html_url": "https://github.com/huggingface/datasets/issues/6720", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6720/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Is there any way to solve hanging of IterableDataset using split by node + filtering during inference", + "html_url": "https://github.com/huggingface/datasets/issues/6719", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6719/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix concurrent script loading with force_redownload", + "html_url": "https://github.com/huggingface/datasets/pull/6718", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6718/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6718.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6718', 'merged_at': '2024-03-07T13:58:04Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6718.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6718'}", + "is_pull_request": true + }, + { + "title": "`remove_columns` method used with a streaming enable dataset mode produces a LibsndfileError on multichannel audio", + "html_url": "https://github.com/huggingface/datasets/issues/6717", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6717/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Non-deterministic `Dataset.builder_name` value", + "html_url": "https://github.com/huggingface/datasets/issues/6716", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6716/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix sliced ConcatenationTable pickling with mixed schemas vertically", + "html_url": "https://github.com/huggingface/datasets/pull/6715", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6715/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6715.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6715', 'merged_at': '2024-03-05T11:17:04Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6715.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6715'}", + "is_pull_request": true + }, + { + "title": "Expand no-code dataset info with datasets-server info", + "html_url": "https://github.com/huggingface/datasets/pull/6714", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6714/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6714.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6714', 'merged_at': '2024-03-04T20:22:15Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6714.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6714'}", + "is_pull_request": true + }, + { + "title": "Bump huggingface-hub lower version to 0.21.2", + "html_url": "https://github.com/huggingface/datasets/pull/6713", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6713/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6713.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6713', 'merged_at': '2024-03-04T18:06:05Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6713.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6713'}", + "is_pull_request": true + }, + { + "title": "fix CastError pickling", + "html_url": "https://github.com/huggingface/datasets/pull/6712", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6712/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6712.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6712', 'merged_at': '2024-03-04T20:17:17Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6712.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6712'}", + "is_pull_request": true + }, + { + "title": "3x Faster Text Preprocessing", + "html_url": "https://github.com/huggingface/datasets/pull/6711", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6711/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6711.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6711', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6711.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6711'}", + "is_pull_request": true + }, + { + "title": "Persist IterableDataset epoch in workers", + "html_url": "https://github.com/huggingface/datasets/pull/6710", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6710/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6710.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6710', 'merged_at': '2024-07-01T17:45:30Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6710.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6710'}", + "is_pull_request": true + }, + { + "title": "set dev version", + "html_url": "https://github.com/huggingface/datasets/pull/6709", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6709/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6709.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6709', 'merged_at': '2024-03-01T21:01:23Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6709.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6709'}", + "is_pull_request": true + }, + { + "title": "Release: 2.18.0", + "html_url": "https://github.com/huggingface/datasets/pull/6708", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6708/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6708.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6708', 'merged_at': '2024-03-01T20:56:50Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6708.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6708'}", + "is_pull_request": true + }, + { + "title": "Silence ruff deprecation messages", + "html_url": "https://github.com/huggingface/datasets/pull/6707", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6707/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6707.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6707', 'merged_at': '2024-03-01T17:25:46Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6707.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6707'}", + "is_pull_request": true + }, + { + "title": "Update ruff", + "html_url": "https://github.com/huggingface/datasets/pull/6706", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6706/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6706.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6706', 'merged_at': '2024-03-01T16:52:17Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6706.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6706'}", + "is_pull_request": true + }, + { + "title": "Fix data_files when passing data_dir", + "html_url": "https://github.com/huggingface/datasets/pull/6705", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6705/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6705.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6705', 'merged_at': '2024-03-01T18:52:49Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6705.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6705'}", + "is_pull_request": true + }, + { + "title": "Improve default patterns resolution", + "html_url": "https://github.com/huggingface/datasets/pull/6704", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6704/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6704.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6704', 'merged_at': '2024-03-15T15:22:03Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6704.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6704'}", + "is_pull_request": true + }, + { + "title": "Unable to load dataset that was saved with `save_to_disk`", + "html_url": "https://github.com/huggingface/datasets/issues/6703", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6703/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Push samples to dataset on hub without having the dataset locally", + "html_url": "https://github.com/huggingface/datasets/issues/6702", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6702/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Base parquet batch_size on parquet row group size", + "html_url": "https://github.com/huggingface/datasets/pull/6701", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6701/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6701.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6701', 'merged_at': '2024-02-29T15:08:55Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6701.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6701'}", + "is_pull_request": true + }, + { + "title": "remove_columns is not in-place but the doc shows it is in-place", + "html_url": "https://github.com/huggingface/datasets/issues/6700", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6700/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "`Dataset` unexpected changed dict data and may cause error", + "html_url": "https://github.com/huggingface/datasets/issues/6699", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6699/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Faster `xlistdir`", + "html_url": "https://github.com/huggingface/datasets/pull/6698", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6698/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6698.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6698', 'merged_at': '2024-02-27T23:38:14Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6698.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6698'}", + "is_pull_request": true + }, + { + "title": "Unable to Load Dataset in Kaggle", + "html_url": "https://github.com/huggingface/datasets/issues/6697", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6697/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Make JSON builder support an array of strings", + "html_url": "https://github.com/huggingface/datasets/pull/6696", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6696/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6696.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6696', 'merged_at': '2024-02-28T06:39:12Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6696.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6696'}", + "is_pull_request": true + }, + { + "title": "Support JSON file with an array of strings", + "html_url": "https://github.com/huggingface/datasets/issues/6695", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6695/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "__add__ for Dataset, IterableDataset", + "html_url": "https://github.com/huggingface/datasets/pull/6694", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6694/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6694.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6694', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6694.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6694'}", + "is_pull_request": true + }, + { + "title": "Update the print message for chunked_dataset in process.mdx", + "html_url": "https://github.com/huggingface/datasets/pull/6693", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6693/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6693.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6693', 'merged_at': '2024-02-25T19:51:02Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6693.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6693'}", + "is_pull_request": true + }, + { + "title": "Enhancement: Enable loading TSV files in load_dataset()", + "html_url": "https://github.com/huggingface/datasets/pull/6692", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6692/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6692.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6692', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6692.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6692'}", + "is_pull_request": true + }, + { + "title": "load_dataset() does not support tsv", + "html_url": "https://github.com/huggingface/datasets/issues/6691", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6691/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Add function to convert a script-dataset to Parquet", + "html_url": "https://github.com/huggingface/datasets/issues/6690", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6690/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": ".load_dataset() method defaults to zstandard", + "html_url": "https://github.com/huggingface/datasets/issues/6689", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6689/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Tensor type (e.g. from `return_tensors`) ignored in map", + "html_url": "https://github.com/huggingface/datasets/issues/6688", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6688/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "fsspec: support fsspec>=2023.12.0 glob changes", + "html_url": "https://github.com/huggingface/datasets/pull/6687", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6687/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6687.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6687', 'merged_at': '2024-02-29T15:12:17Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6687.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6687'}", + "is_pull_request": true + }, + { + "title": "Question: Is there any way for uploading a large image dataset?", + "html_url": "https://github.com/huggingface/datasets/issues/6686", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6686/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Updated Quickstart Notebook link", + "html_url": "https://github.com/huggingface/datasets/pull/6685", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6685/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6685.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6685', 'merged_at': '2024-02-25T18:48:08Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6685.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6685'}", + "is_pull_request": true + }, + { + "title": "Improve error message for gated datasets on load", + "html_url": "https://github.com/huggingface/datasets/pull/6684", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6684/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6684.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6684', 'merged_at': '2024-02-20T15:33:56Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6684.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6684'}", + "is_pull_request": true + }, + { + "title": "Fix imagefolder dataset url", + "html_url": "https://github.com/huggingface/datasets/pull/6683", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6683/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6683.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6683', 'merged_at': '2024-02-19T17:18:10Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6683.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6683'}", + "is_pull_request": true + }, + { + "title": "Update GitHub Actions to Node 20", + "html_url": "https://github.com/huggingface/datasets/pull/6682", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6682/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6682.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6682', 'merged_at': '2024-02-28T06:56:34Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6682.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6682'}", + "is_pull_request": true + }, + { + "title": "Update release instructions", + "html_url": "https://github.com/huggingface/datasets/pull/6681", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6681/comments", + "labels": "[{'color': 'd4c5f9', 'default': False, 'description': 'Maintenance tasks', 'id': 4296013012, 'name': 'maintenance', 'node_id': 'LA_kwDODunzps8AAAABAA_01A', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/maintenance'}]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6681.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6681', 'merged_at': '2024-02-28T07:17:22Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6681.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6681'}", + "is_pull_request": true + }, + { + "title": "Set dev version", + "html_url": "https://github.com/huggingface/datasets/pull/6680", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6680/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6680.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6680', 'merged_at': '2024-02-19T10:00:40Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6680.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6680'}", + "is_pull_request": true + }, + { + "title": "Node.js 16 GitHub Actions are deprecated", + "html_url": "https://github.com/huggingface/datasets/issues/6679", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6679/comments", + "labels": "[{'color': 'd4c5f9', 'default': False, 'description': 'Maintenance tasks', 'id': 4296013012, 'name': 'maintenance', 'node_id': 'LA_kwDODunzps8AAAABAA_01A', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/maintenance'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Release: 2.17.1", + "html_url": "https://github.com/huggingface/datasets/pull/6678", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6678/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6678.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6678', 'merged_at': '2024-02-19T09:56:52Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6678.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6678'}", + "is_pull_request": true + }, + { + "title": "Pass through information about location of cache directory.", + "html_url": "https://github.com/huggingface/datasets/pull/6677", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6677/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6677.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6677', 'merged_at': '2024-02-28T18:51:15Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6677.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6677'}", + "is_pull_request": true + }, + { + "title": "Can't Read List of JSON Files Properly", + "html_url": "https://github.com/huggingface/datasets/issues/6676", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6676/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Allow image model (color conversion) to be specified as part of datasets Image() decode", + "html_url": "https://github.com/huggingface/datasets/issues/6675", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6675/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": " Depprcated Overview.ipynb Link to new Quickstart Notebook invalid", + "html_url": "https://github.com/huggingface/datasets/issues/6674", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6674/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "IterableDataset `set_epoch` is ignored when DataLoader `persistent_workers=True`", + "html_url": "https://github.com/huggingface/datasets/issues/6673", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6673/comments", + "labels": "[{'color': 'd73a4a', 'default': True, 'description': \"Something isn't working\", 'id': 1935892857, 'name': 'bug', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODU3', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/bug'}\n {'color': 'fef2c0', 'default': False, 'description': '', 'id': 3287858981, 'name': 'streaming', 'node_id': 'MDU6TGFiZWwzMjg3ODU4OTgx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/streaming'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Remove deprecated verbose parameter from CSV builder", + "html_url": "https://github.com/huggingface/datasets/pull/6672", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6672/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6672.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6672', 'merged_at': '2024-02-19T09:20:22Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6672.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6672'}", + "is_pull_request": true + }, + { + "title": "CSV builder raises deprecation warning on verbose parameter", + "html_url": "https://github.com/huggingface/datasets/issues/6671", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6671/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "ValueError", + "html_url": "https://github.com/huggingface/datasets/issues/6670", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6670/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "attribute error when writing trainer.train()", + "html_url": "https://github.com/huggingface/datasets/issues/6669", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6669/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Chapter 6 - Issue Loading `cnn_dailymail` dataset", + "html_url": "https://github.com/huggingface/datasets/issues/6668", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6668/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Default config for squad is incorrect", + "html_url": "https://github.com/huggingface/datasets/issues/6667", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6667/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Allow SplitDict setitem to replace existing SplitInfo", + "html_url": "https://github.com/huggingface/datasets/pull/6665", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6665/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6665.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6665', 'merged_at': '2024-03-01T15:56:38Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6665.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6665'}", + "is_pull_request": true + }, + { + "title": "Revert the changes in `arrow_writer.py` from #6636", + "html_url": "https://github.com/huggingface/datasets/pull/6664", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6664/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6664.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6664', 'merged_at': '2024-02-16T02:31:11Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6664.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6664'}", + "is_pull_request": true + }, + { + "title": "`write_examples_on_file` and `write_batch` are broken in `ArrowWriter`", + "html_url": "https://github.com/huggingface/datasets/issues/6663", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6663/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "fix: show correct package name to install biopython", + "html_url": "https://github.com/huggingface/datasets/pull/6662", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6662/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6662.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6662', 'merged_at': '2024-03-01T17:43:39Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6662.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6662'}", + "is_pull_request": true + }, + { + "title": "Import error on Google Colab", + "html_url": "https://github.com/huggingface/datasets/issues/6661", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6661/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Automatic Conversion for uint16/uint32 to Compatible PyTorch Dtypes", + "html_url": "https://github.com/huggingface/datasets/pull/6660", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6660/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6660.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6660', 'merged_at': '2024-03-01T18:52:37Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6660.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6660'}", + "is_pull_request": true + }, + { + "title": "Change default compression argument for JsonDatasetWriter", + "html_url": "https://github.com/huggingface/datasets/pull/6659", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6659/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6659.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6659', 'merged_at': '2024-03-01T17:44:55Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6659.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6659'}", + "is_pull_request": true + }, + { + "title": "[Resumable IterableDataset] Add IterableDataset state_dict", + "html_url": "https://github.com/huggingface/datasets/pull/6658", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6658/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6658.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6658', 'merged_at': '2024-06-03T19:15:39Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6658.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6658'}", + "is_pull_request": true + }, + { + "title": "Release not pushed to conda channel", + "html_url": "https://github.com/huggingface/datasets/issues/6657", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6657/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Error when loading a big local json file", + "html_url": "https://github.com/huggingface/datasets/issues/6656", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6656/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Cannot load the dataset go_emotions", + "html_url": "https://github.com/huggingface/datasets/issues/6655", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6655/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Batched dataset map throws exception that cannot cast fixed length array to Sequence", + "html_url": "https://github.com/huggingface/datasets/issues/6654", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6654/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Set dev version", + "html_url": "https://github.com/huggingface/datasets/pull/6653", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6653/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6653.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6653', 'merged_at': '2024-02-09T10:12:12Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6653.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6653'}", + "is_pull_request": true + }, + { + "title": "Release: 2.17.0", + "html_url": "https://github.com/huggingface/datasets/pull/6652", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6652/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6652.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6652', 'merged_at': '2024-02-09T10:05:35Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6652.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6652'}", + "is_pull_request": true + }, + { + "title": "Slice splits support for datasets.load_from_disk", + "html_url": "https://github.com/huggingface/datasets/issues/6651", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6651/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "AttributeError: 'InMemoryTable' object has no attribute '_batches'", + "html_url": "https://github.com/huggingface/datasets/issues/6650", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6650/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Minor multi gpu doc improvement", + "html_url": "https://github.com/huggingface/datasets/pull/6649", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6649/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6649.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6649', 'merged_at': '2024-02-08T11:17:35Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6649.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6649'}", + "is_pull_request": true + }, + { + "title": "Document usage of hfh cli instead of git", + "html_url": "https://github.com/huggingface/datasets/pull/6648", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6648/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6648.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6648', 'merged_at': '2024-02-08T13:51:39Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6648.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6648'}", + "is_pull_request": true + }, + { + "title": "Update loading.mdx to include \"jsonl\" file loading.", + "html_url": "https://github.com/huggingface/datasets/pull/6647", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6647/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6647.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6647', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6647.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6647'}", + "is_pull_request": true + }, + { + "title": "Better multi-gpu example", + "html_url": "https://github.com/huggingface/datasets/pull/6646", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6646/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6646.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6646', 'merged_at': '2024-02-07T14:59:11Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6646.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6646'}", + "is_pull_request": true + }, + { + "title": "Support fsspec 2024.2", + "html_url": "https://github.com/huggingface/datasets/issues/6645", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6645/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Support fsspec 2023.12", + "html_url": "https://github.com/huggingface/datasets/issues/6644", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6644/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Faiss GPU index cannot be serialised when passed to trainer ", + "html_url": "https://github.com/huggingface/datasets/issues/6643", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6643/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Differently dataset object saved than it is loaded.", + "html_url": "https://github.com/huggingface/datasets/issues/6642", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6642/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "unicodedecodeerror: 'utf-8' codec can't decode byte 0xac in position 25: invalid start byte", + "html_url": "https://github.com/huggingface/datasets/issues/6641", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6641/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Sign Language Support", + "html_url": "https://github.com/huggingface/datasets/issues/6640", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6640/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Run download_and_prepare if missing splits", + "html_url": "https://github.com/huggingface/datasets/pull/6639", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6639/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6639.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6639', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6639.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6639'}", + "is_pull_request": true + }, + { + "title": "Cannot download wmt16 dataset", + "html_url": "https://github.com/huggingface/datasets/issues/6638", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6638/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "'with_format' is extremely slow when used together with 'interleave_datasets' or 'shuffle' on IterableDatasets", + "html_url": "https://github.com/huggingface/datasets/issues/6637", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6637/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Faster column validation and reordering", + "html_url": "https://github.com/huggingface/datasets/pull/6636", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6636/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6636.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6636', 'merged_at': '2024-02-06T23:03:38Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6636.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6636'}", + "is_pull_request": true + }, + { + "title": "Fix missing info when loading some datasets from Parquet export", + "html_url": "https://github.com/huggingface/datasets/pull/6635", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6635/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6635.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6635', 'merged_at': '2024-02-07T16:41:04Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6635.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6635'}", + "is_pull_request": true + }, + { + "title": "Support data_dir parameter in push_to_hub", + "html_url": "https://github.com/huggingface/datasets/pull/6634", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6634/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6634.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6634', 'merged_at': '2024-02-05T10:26:40Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6634.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6634'}", + "is_pull_request": true + }, + { + "title": "dataset viewer requires no-script", + "html_url": "https://github.com/huggingface/datasets/pull/6633", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6633/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6633.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6633', 'merged_at': '2024-01-31T13:59:01Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6633.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6633'}", + "is_pull_request": true + }, + { + "title": "Fix reload cache with data dir", + "html_url": "https://github.com/huggingface/datasets/pull/6632", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6632/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6632.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6632', 'merged_at': '2024-02-06T17:21:24Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6632.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6632'}", + "is_pull_request": true + }, + { + "title": "Fix filelock: use current umask for filelock >= 3.10", + "html_url": "https://github.com/huggingface/datasets/pull/6631", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6631/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6631.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6631', 'merged_at': '2024-01-30T15:28:37Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6631.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6631'}", + "is_pull_request": true + }, + { + "title": "Bump max range of dill to 0.3.8", + "html_url": "https://github.com/huggingface/datasets/pull/6630", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6630/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6630.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6630', 'merged_at': '2024-01-30T15:12:25Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6630.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6630'}", + "is_pull_request": true + }, + { + "title": "Support push_to_hub without org/user to default to logged-in user", + "html_url": "https://github.com/huggingface/datasets/pull/6629", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6629/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6629.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6629', 'merged_at': '2024-02-05T12:29:36Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6629.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6629'}", + "is_pull_request": true + }, + { + "title": "Make CLI test support multi-processing", + "html_url": "https://github.com/huggingface/datasets/pull/6628", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6628/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6628.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6628', 'merged_at': '2024-02-05T10:23:13Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6628.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6628'}", + "is_pull_request": true + }, + { + "title": "Disable `tqdm` bars in non-interactive environments", + "html_url": "https://github.com/huggingface/datasets/pull/6627", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6627/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6627.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6627', 'merged_at': '2024-01-29T15:41:32Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6627.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6627'}", + "is_pull_request": true + }, + { + "title": "Raise error on bad split name", + "html_url": "https://github.com/huggingface/datasets/pull/6626", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6626/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6626.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6626', 'merged_at': '2024-01-29T15:12:18Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6626.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6626'}", + "is_pull_request": true + }, + { + "title": "How to download the laion-coco dataset", + "html_url": "https://github.com/huggingface/datasets/issues/6624", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6624/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "streaming datasets doesn't work properly with multi-node", + "html_url": "https://github.com/huggingface/datasets/issues/6623", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6623/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "multi-GPU map does not work", + "html_url": "https://github.com/huggingface/datasets/issues/6622", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6622/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "deleted", + "html_url": "https://github.com/huggingface/datasets/issues/6621", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6621/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "wiki_dpr.py error (ID mismatch between lines {id} and vector {vec_id}", + "html_url": "https://github.com/huggingface/datasets/issues/6620", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6620/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Migrate from `setup.cfg` to `pyproject.toml`", + "html_url": "https://github.com/huggingface/datasets/pull/6619", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6619/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6619.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6619', 'merged_at': '2024-01-26T15:47:32Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6619.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6619'}", + "is_pull_request": true + }, + { + "title": "While importing load_dataset from datasets ", + "html_url": "https://github.com/huggingface/datasets/issues/6618", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6618/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix CI: pyarrow 15, pandas 2.2 and sqlachemy", + "html_url": "https://github.com/huggingface/datasets/pull/6617", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6617/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6617.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6617', 'merged_at': '2024-01-26T14:50:44Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6617.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6617'}", + "is_pull_request": true + }, + { + "title": "Use schema metadata only if it matches features", + "html_url": "https://github.com/huggingface/datasets/pull/6616", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6616/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6616.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6616', 'merged_at': '2024-01-26T16:19:12Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6616.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6616'}", + "is_pull_request": true + }, + { + "title": "...", + "html_url": "https://github.com/huggingface/datasets/issues/6615", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6615/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "`datasets/downloads` cleanup tool", + "html_url": "https://github.com/huggingface/datasets/issues/6614", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6614/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "cnn_dailymail repeats itself", + "html_url": "https://github.com/huggingface/datasets/issues/6612", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6612/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "`load_from_disk` with large dataset from S3 runs into `botocore.exceptions.ClientError`", + "html_url": "https://github.com/huggingface/datasets/issues/6611", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6611/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "cast_column to Sequence(subfeatures_dict) has err", + "html_url": "https://github.com/huggingface/datasets/issues/6610", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6610/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Wrong path for cache directory in offline mode", + "html_url": "https://github.com/huggingface/datasets/issues/6609", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6609/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Add `with_rank` param to `Dataset.filter`", + "html_url": "https://github.com/huggingface/datasets/pull/6608", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6608/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6608.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6608', 'merged_at': '2024-01-29T16:36:53Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6608.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6608'}", + "is_pull_request": true + }, + { + "title": "Update features.py to avoid bfloat16 unsupported error", + "html_url": "https://github.com/huggingface/datasets/pull/6607", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6607/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6607.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6607', 'merged_at': '2024-05-17T09:40:13Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6607.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6607'}", + "is_pull_request": true + }, + { + "title": "Dedicated RNG object for fingerprinting", + "html_url": "https://github.com/huggingface/datasets/pull/6606", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6606/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6606.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6606', 'merged_at': '2024-01-26T15:05:34Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6606.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6606'}", + "is_pull_request": true + }, + { + "title": "ELI5 no longer available, but referenced in example code", + "html_url": "https://github.com/huggingface/datasets/issues/6605", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6605/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Transform fingerprint collisions due to setting fixed random seed", + "html_url": "https://github.com/huggingface/datasets/issues/6604", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6604/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "datasets map `cache_file_name` does not work", + "html_url": "https://github.com/huggingface/datasets/issues/6603", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6603/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Index error when data is large", + "html_url": "https://github.com/huggingface/datasets/issues/6602", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6602/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "add safety checks when using only part of dataset", + "html_url": "https://github.com/huggingface/datasets/pull/6601", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6601/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6601.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6601', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6601.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6601'}", + "is_pull_request": true + }, + { + "title": "Loading CSV exported dataset has unexpected format", + "html_url": "https://github.com/huggingface/datasets/issues/6600", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6600/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Easy way to segment into 30s snippets given an m4a file and a vtt file ", + "html_url": "https://github.com/huggingface/datasets/issues/6599", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6599/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Unexpected keyword argument 'hf' when downloading CSV dataset from S3", + "html_url": "https://github.com/huggingface/datasets/issues/6598", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6598/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Dataset.push_to_hub of a canonical dataset creates an additional dataset under the user namespace", + "html_url": "https://github.com/huggingface/datasets/issues/6597", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6597/comments", + "labels": "[{'color': 'd73a4a', 'default': True, 'description': \"Something isn't working\", 'id': 1935892857, 'name': 'bug', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODU3', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/bug'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Drop redundant None guard.", + "html_url": "https://github.com/huggingface/datasets/pull/6596", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6596/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6596.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6596', 'merged_at': '2024-01-16T17:05:52Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6596.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6596'}", + "is_pull_request": true + }, + { + "title": "Loading big dataset raises pyarrow.lib.ArrowNotImplementedError 2", + "html_url": "https://github.com/huggingface/datasets/issues/6595", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6595/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "IterableDataset sharding logic needs improvement", + "html_url": "https://github.com/huggingface/datasets/issues/6594", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6594/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Logs are delayed when doing .map when `docker logs`", + "html_url": "https://github.com/huggingface/datasets/issues/6592", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6592/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "The datasets models housed in Dropbox can't support a lot of users downloading them", + "html_url": "https://github.com/huggingface/datasets/issues/6591", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6591/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Feature request: Multi-GPU dataset mapping for SDXL training", + "html_url": "https://github.com/huggingface/datasets/issues/6590", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6590/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "After `2.16.0` version, there are `PermissionError` when users use shared cache_dir", + "html_url": "https://github.com/huggingface/datasets/issues/6589", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6589/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "fix os.listdir return name is empty string", + "html_url": "https://github.com/huggingface/datasets/issues/6588", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6588/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Allow concatenation of datasets with mixed structs", + "html_url": "https://github.com/huggingface/datasets/pull/6587", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6587/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6587.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6587', 'merged_at': '2024-02-08T14:38:32Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6587.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6587'}", + "is_pull_request": true + }, + { + "title": "keep more info in DatasetInfo.from_merge #6585", + "html_url": "https://github.com/huggingface/datasets/pull/6586", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6586/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6586.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6586', 'merged_at': '2024-01-26T15:53:28Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6586.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6586'}", + "is_pull_request": true + }, + { + "title": "losing DatasetInfo in Dataset.map when num_proc > 1", + "html_url": "https://github.com/huggingface/datasets/issues/6585", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6585/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "np.fromfile not supported", + "html_url": "https://github.com/huggingface/datasets/issues/6584", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6584/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "remove eli5 test", + "html_url": "https://github.com/huggingface/datasets/pull/6583", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6583/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6583.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6583', 'merged_at': '2024-01-11T16:09:24Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6583.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6583'}", + "is_pull_request": true + }, + { + "title": "Fix for Incorrect ex_iterable used with multi num_worker", + "html_url": "https://github.com/huggingface/datasets/pull/6582", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6582/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6582.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6582', 'merged_at': '2024-03-01T19:02:33Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6582.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6582'}", + "is_pull_request": true + }, + { + "title": "fix os.listdir return name is empty string", + "html_url": "https://github.com/huggingface/datasets/pull/6581", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6581/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6581.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6581', 'merged_at': '2024-01-24T10:08:28Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6581.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6581'}", + "is_pull_request": true + }, + { + "title": "dataset cache only stores one config of the dataset in parquet dir, and uses that for all other configs resulting in showing same data in all configs.", + "html_url": "https://github.com/huggingface/datasets/issues/6580", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6580/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Unable to load `eli5` dataset with streaming", + "html_url": "https://github.com/huggingface/datasets/issues/6579", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6579/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Faster webdataset streaming", + "html_url": "https://github.com/huggingface/datasets/pull/6578", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6578/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6578.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6578', 'merged_at': '2024-01-30T18:39:51Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6578.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6578'}", + "is_pull_request": true + }, + { + "title": "502 Server Errors when streaming large dataset", + "html_url": "https://github.com/huggingface/datasets/issues/6577", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6577/comments", + "labels": "[{'color': 'fef2c0', 'default': False, 'description': '', 'id': 3287858981, 'name': 'streaming', 'node_id': 'MDU6TGFiZWwzMjg3ODU4OTgx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/streaming'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "document page 404 not found after redirection", + "html_url": "https://github.com/huggingface/datasets/issues/6576", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6576/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "[IterableDataset] Fix `drop_last_batch`in map after shuffling or sharding", + "html_url": "https://github.com/huggingface/datasets/pull/6575", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6575/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6575.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6575', 'merged_at': '2024-01-11T16:10:30Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6575.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6575'}", + "is_pull_request": true + }, + { + "title": "Fix tests based on datasets that used to have scripts", + "html_url": "https://github.com/huggingface/datasets/pull/6574", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6574/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6574.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6574', 'merged_at': '2024-01-09T16:05:13Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6574.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6574'}", + "is_pull_request": true + }, + { + "title": "[WebDataset] Audio support and bug fixes", + "html_url": "https://github.com/huggingface/datasets/pull/6573", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6573/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6573.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6573', 'merged_at': '2024-01-11T16:11:04Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6573.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6573'}", + "is_pull_request": true + }, + { + "title": "Adding option for multipart achive download", + "html_url": "https://github.com/huggingface/datasets/pull/6572", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6572/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6572.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6572', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6572.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6572'}", + "is_pull_request": true + }, + { + "title": "Make DatasetDict.column_names return a list instead of dict", + "html_url": "https://github.com/huggingface/datasets/issues/6571", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6571/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "No online docs for 2.16 release", + "html_url": "https://github.com/huggingface/datasets/issues/6570", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6570/comments", + "labels": "[{'color': 'd73a4a', 'default': True, 'description': \"Something isn't working\", 'id': 1935892857, 'name': 'bug', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODU3', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/bug'}\n {'color': '0075ca', 'default': True, 'description': 'Improvements or additions to documentation', 'id': 1935892861, 'name': 'documentation', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODYx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/documentation'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "WebDataset ignores features defined in YAML or passed to load_dataset", + "html_url": "https://github.com/huggingface/datasets/issues/6569", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6569/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "keep_in_memory=True does not seem to work", + "html_url": "https://github.com/huggingface/datasets/issues/6568", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6568/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "AttributeError: 'str' object has no attribute 'to'", + "html_url": "https://github.com/huggingface/datasets/issues/6567", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6567/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "I train controlnet_sdxl in bf16 datatype, got unsupported ERROR in datasets", + "html_url": "https://github.com/huggingface/datasets/issues/6566", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6566/comments", + "labels": "[{'color': 'd73a4a', 'default': True, 'description': \"Something isn't working\", 'id': 1935892857, 'name': 'bug', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODU3', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/bug'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": " `drop_last_batch=True` for IterableDataset map function is ignored with multiprocessing DataLoader ", + "html_url": "https://github.com/huggingface/datasets/issues/6565", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6565/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "`Dataset.filter` missing `with_rank` parameter", + "html_url": "https://github.com/huggingface/datasets/issues/6564", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6564/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "`ImportError`: cannot import name 'insecure_hashlib' from 'huggingface_hub.utils' (.../huggingface_hub/utils/__init__.py)", + "html_url": "https://github.com/huggingface/datasets/issues/6563", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6563/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "datasets.DownloadMode.FORCE_REDOWNLOAD use cache to download dataset features with load_dataset function", + "html_url": "https://github.com/huggingface/datasets/issues/6562", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6562/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Document YAML configuration with \"data_dir\"", + "html_url": "https://github.com/huggingface/datasets/issues/6561", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6561/comments", + "labels": "[{'color': '0075ca', 'default': True, 'description': 'Improvements or additions to documentation', 'id': 1935892861, 'name': 'documentation', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODYx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/documentation'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Support Video ", + "html_url": "https://github.com/huggingface/datasets/issues/6560", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6560/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Latest version 2.16.1, when load dataset error occurs. ValueError: BuilderConfig 'allenai--c4' not found. Available: ['default']", + "html_url": "https://github.com/huggingface/datasets/issues/6559", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6559/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "OSError: image file is truncated (1 bytes not processed) #28323", + "html_url": "https://github.com/huggingface/datasets/issues/6558", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6558/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Support standalone yaml", + "html_url": "https://github.com/huggingface/datasets/pull/6557", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6557/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6557.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6557', 'merged_at': '2024-01-11T17:53:42Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6557.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6557'}", + "is_pull_request": true + }, + { + "title": "Fix imagefolder with one image", + "html_url": "https://github.com/huggingface/datasets/pull/6556", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6556/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6556.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6556', 'merged_at': '2024-01-09T13:06:30Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6556.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6556'}", + "is_pull_request": true + }, + { + "title": "Do not use Parquet exports if revision is passed", + "html_url": "https://github.com/huggingface/datasets/pull/6555", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6555/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6555.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6555', 'merged_at': '2024-02-02T10:35:28Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6555.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6555'}", + "is_pull_request": true + }, + { + "title": "Parquet exports are used even if revision is passed", + "html_url": "https://github.com/huggingface/datasets/issues/6554", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6554/comments", + "labels": "[{'color': 'd73a4a', 'default': True, 'description': \"Something isn't working\", 'id': 1935892857, 'name': 'bug', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODU3', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/bug'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Cannot import name 'load_dataset' from .... module \u2018datasets\u2019", + "html_url": "https://github.com/huggingface/datasets/issues/6553", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6553/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Loading a dataset from Google Colab hangs at \"Resolving data files\".", + "html_url": "https://github.com/huggingface/datasets/issues/6552", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6552/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix parallel downloads for datasets without scripts", + "html_url": "https://github.com/huggingface/datasets/pull/6551", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6551/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6551.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6551', 'merged_at': '2024-01-03T13:19:47Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6551.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6551'}", + "is_pull_request": true + }, + { + "title": "Multi gpu docs", + "html_url": "https://github.com/huggingface/datasets/pull/6550", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6550/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6550.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6550', 'merged_at': '2024-01-31T13:38:59Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6550.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6550'}", + "is_pull_request": true + }, + { + "title": "Loading from hf hub with clearer error message", + "html_url": "https://github.com/huggingface/datasets/issues/6549", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6549/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Skip if a dataset has issues", + "html_url": "https://github.com/huggingface/datasets/issues/6548", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6548/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "set dev version", + "html_url": "https://github.com/huggingface/datasets/pull/6547", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6547/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6547.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6547', 'merged_at': '2023-12-30T16:47:27Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6547.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6547'}", + "is_pull_request": true + }, + { + "title": "Release: 2.16.1", + "html_url": "https://github.com/huggingface/datasets/pull/6546", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6546/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6546.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6546', 'merged_at': '2023-12-30T16:45:52Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6546.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6546'}", + "is_pull_request": true + }, + { + "title": "`image` column not automatically inferred if image dataset only contains 1 image", + "html_url": "https://github.com/huggingface/datasets/issues/6545", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6545/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix custom configs from script", + "html_url": "https://github.com/huggingface/datasets/pull/6544", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6544/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6544.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6544', 'merged_at': '2023-12-30T16:09:49Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6544.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6544'}", + "is_pull_request": true + }, + { + "title": "Fix dl_manager.extract returning FileNotFoundError", + "html_url": "https://github.com/huggingface/datasets/pull/6543", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6543/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6543.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6543', 'merged_at': '2023-12-30T15:53:59Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6543.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6543'}", + "is_pull_request": true + }, + { + "title": "Datasets : wikipedia 20220301.en error ", + "html_url": "https://github.com/huggingface/datasets/issues/6542", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6542/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Dataset not loading successfully.", + "html_url": "https://github.com/huggingface/datasets/issues/6541", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6541/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Extreme inefficiency for `save_to_disk` when merging datasets", + "html_url": "https://github.com/huggingface/datasets/issues/6540", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6540/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "'Repo card metadata block was not found' when loading a pragmeval dataset", + "html_url": "https://github.com/huggingface/datasets/issues/6539", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6539/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "ImportError: cannot import name 'SchemaInferenceError' from 'datasets.arrow_writer' (/opt/conda/lib/python3.10/site-packages/datasets/arrow_writer.py)", + "html_url": "https://github.com/huggingface/datasets/issues/6538", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6538/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Adding support for netCDF (*.nc) files", + "html_url": "https://github.com/huggingface/datasets/issues/6537", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6537/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "datasets.load_dataset raises FileNotFoundError for datasets==2.16.0", + "html_url": "https://github.com/huggingface/datasets/issues/6536", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6536/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "IndexError: Invalid key: 47682 is out of bounds for size 0 while using PEFT", + "html_url": "https://github.com/huggingface/datasets/issues/6535", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6535/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "How to configure multiple folders in the same zip package", + "html_url": "https://github.com/huggingface/datasets/issues/6534", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6534/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "ted_talks_iwslt | Error: Config name is missing", + "html_url": "https://github.com/huggingface/datasets/issues/6533", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6533/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "[Feature request] Indexing datasets by a customly-defined id field to enable random access dataset items via the id", + "html_url": "https://github.com/huggingface/datasets/issues/6532", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6532/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Add polars compatibility", + "html_url": "https://github.com/huggingface/datasets/pull/6531", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6531/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6531.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6531', 'merged_at': '2024-03-08T15:22:58Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6531.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6531'}", + "is_pull_request": true + }, + { + "title": "Impossible to save a mapped dataset to disk", + "html_url": "https://github.com/huggingface/datasets/issues/6530", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6530/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Impossible to only download a test split", + "html_url": "https://github.com/huggingface/datasets/issues/6529", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6529/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "set dev version", + "html_url": "https://github.com/huggingface/datasets/pull/6528", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6528/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6528.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6528', 'merged_at': '2023-12-22T14:25:34Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6528.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6528'}", + "is_pull_request": true + }, + { + "title": "Release: 2.16.0", + "html_url": "https://github.com/huggingface/datasets/pull/6527", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6527/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6527.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6527', 'merged_at': '2023-12-22T14:17:55Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6527.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6527'}", + "is_pull_request": true + }, + { + "title": "Preserve order of configs and splits when using Parquet exports", + "html_url": "https://github.com/huggingface/datasets/pull/6526", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6526/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6526.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6526', 'merged_at': '2023-12-22T11:36:14Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6526.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6526'}", + "is_pull_request": true + }, + { + "title": "BBox type", + "html_url": "https://github.com/huggingface/datasets/pull/6525", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6525/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6525.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6525', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6525.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6525'}", + "is_pull_request": true + }, + { + "title": "Streaming the Pile: Missing Files", + "html_url": "https://github.com/huggingface/datasets/issues/6524", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6524/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "fix tests", + "html_url": "https://github.com/huggingface/datasets/pull/6523", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6523/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6523.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6523', 'merged_at': '2023-12-21T15:50:38Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6523.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6523'}", + "is_pull_request": true + }, + { + "title": "Loading HF Hub Dataset (private org repo) fails to load all features", + "html_url": "https://github.com/huggingface/datasets/issues/6522", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6522/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "The order of the splits is not preserved", + "html_url": "https://github.com/huggingface/datasets/issues/6521", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6521/comments", + "labels": "[{'color': 'd73a4a', 'default': True, 'description': \"Something isn't working\", 'id': 1935892857, 'name': 'bug', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODU3', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/bug'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Support commit_description parameter in push_to_hub", + "html_url": "https://github.com/huggingface/datasets/pull/6520", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6520/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6520.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6520', 'merged_at': '2023-12-21T14:43:35Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6520.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6520'}", + "is_pull_request": true + }, + { + "title": "Support push_to_hub canonical datasets", + "html_url": "https://github.com/huggingface/datasets/pull/6519", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6519/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6519.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6519', 'merged_at': '2023-12-21T14:40:57Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6519.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6519'}", + "is_pull_request": true + }, + { + "title": "fix get_metadata_patterns function args error", + "html_url": "https://github.com/huggingface/datasets/pull/6518", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6518/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6518.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6518', 'merged_at': '2023-12-21T15:07:57Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6518.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6518'}", + "is_pull_request": true + }, + { + "title": "Bug get_metadata_patterns arg error", + "html_url": "https://github.com/huggingface/datasets/issues/6517", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6517/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Support huggingface-hub pre-releases", + "html_url": "https://github.com/huggingface/datasets/pull/6516", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6516/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6516.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6516', 'merged_at': '2023-12-20T08:44:44Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6516.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6516'}", + "is_pull_request": true + }, + { + "title": "Why call http_head() when fsspec_head() succeeds", + "html_url": "https://github.com/huggingface/datasets/issues/6515", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6515/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Cache backward compatibility with 2.15.0", + "html_url": "https://github.com/huggingface/datasets/pull/6514", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6514/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6514.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6514', 'merged_at': '2023-12-21T21:07:55Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6514.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6514'}", + "is_pull_request": true + }, + { + "title": "Support huggingface-hub 0.20.0", + "html_url": "https://github.com/huggingface/datasets/issues/6513", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6513/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Remove deprecated HfFolder", + "html_url": "https://github.com/huggingface/datasets/pull/6512", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6512/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6512.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6512', 'merged_at': '2023-12-19T20:14:30Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6512.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6512'}", + "is_pull_request": true + }, + { + "title": "Implement get dataset default config name", + "html_url": "https://github.com/huggingface/datasets/pull/6511", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6511/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6511.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6511', 'merged_at': '2023-12-21T14:42:40Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6511.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6511'}", + "is_pull_request": true + }, + { + "title": "Replace `list_files_info` with `list_repo_tree` in `push_to_hub`", + "html_url": "https://github.com/huggingface/datasets/pull/6510", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6510/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6510.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6510', 'merged_at': '2023-12-19T17:58:34Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6510.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6510'}", + "is_pull_request": true + }, + { + "title": "Better cast error when generating dataset", + "html_url": "https://github.com/huggingface/datasets/pull/6509", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6509/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6509.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6509', 'merged_at': '2023-12-19T09:31:03Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6509.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6509'}", + "is_pull_request": true + }, + { + "title": "Read GeoParquet files using parquet reader", + "html_url": "https://github.com/huggingface/datasets/pull/6508", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6508/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6508.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6508', 'merged_at': '2024-01-26T16:18:41Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6508.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6508'}", + "is_pull_request": true + }, + { + "title": "where is glue_metric.py> @Frankie123421 what was the resolution to this?", + "html_url": "https://github.com/huggingface/datasets/issues/6507", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6507/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Incorrect test set labels for RTE and CoLA datasets via load_dataset", + "html_url": "https://github.com/huggingface/datasets/issues/6506", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6506/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Got stuck when I trying to load a dataset", + "html_url": "https://github.com/huggingface/datasets/issues/6505", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6505/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Error Pushing to Hub", + "html_url": "https://github.com/huggingface/datasets/issues/6504", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6504/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix streaming xnli", + "html_url": "https://github.com/huggingface/datasets/pull/6503", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6503/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6503.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6503', 'merged_at': '2023-12-15T14:44:46Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6503.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6503'}", + "is_pull_request": true + }, + { + "title": "Pickle support for `torch.Generator` objects", + "html_url": "https://github.com/huggingface/datasets/pull/6502", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6502/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6502.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6502', 'merged_at': '2023-12-15T14:58:22Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6502.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6502'}", + "is_pull_request": true + }, + { + "title": " OverflowError: value too large to convert to int32_t ", + "html_url": "https://github.com/huggingface/datasets/issues/6501", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6501/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Enable setting config as default when push_to_hub", + "html_url": "https://github.com/huggingface/datasets/pull/6500", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6500/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6500.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6500', 'merged_at': '2023-12-18T11:50:03Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6500.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6500'}", + "is_pull_request": true + }, + { + "title": "docs: add reference Git over SSH", + "html_url": "https://github.com/huggingface/datasets/pull/6499", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6499/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6499.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6499', 'merged_at': '2023-12-15T11:42:38Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6499.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6499'}", + "is_pull_request": true + }, + { + "title": "Fallback on dataset script if user wants to load default config", + "html_url": "https://github.com/huggingface/datasets/pull/6498", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6498/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6498.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6498', 'merged_at': '2023-12-15T13:10:48Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6498.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6498'}", + "is_pull_request": true + }, + { + "title": "Support setting a default config name in push_to_hub", + "html_url": "https://github.com/huggingface/datasets/issues/6497", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6497/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Error when writing a dataset to HF Hub: A commit has happened since. Please refresh and try again.", + "html_url": "https://github.com/huggingface/datasets/issues/6496", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6496/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Image Data loaded Twice", + "html_url": "https://github.com/huggingface/datasets/issues/6494", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6494/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Newline characters don't behave as expected when calling dataset.info", + "html_url": "https://github.com/huggingface/datasets/issues/6495", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6495/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Lazy data files resolution and offline cache reload", + "html_url": "https://github.com/huggingface/datasets/pull/6493", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6493/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6493.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6493', 'merged_at': '2023-12-21T15:13:11Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6493.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6493'}", + "is_pull_request": true + }, + { + "title": "Make push_to_hub return CommitInfo", + "html_url": "https://github.com/huggingface/datasets/pull/6492", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6492/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6492.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6492', 'merged_at': '2023-12-13T14:22:41Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6492.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6492'}", + "is_pull_request": true + }, + { + "title": "Fix metrics dead link", + "html_url": "https://github.com/huggingface/datasets/pull/6491", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6491/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6491.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6491', 'merged_at': '2023-12-21T15:08:53Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6491.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6491'}", + "is_pull_request": true + }, + { + "title": "`load_dataset(...,save_infos=True)` not working without loading script", + "html_url": "https://github.com/huggingface/datasets/issues/6490", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6490/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "load_dataset imageflder for aws s3 path ", + "html_url": "https://github.com/huggingface/datasets/issues/6489", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6489/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "429 Client Error", + "html_url": "https://github.com/huggingface/datasets/issues/6488", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6488/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Update builder hash with info", + "html_url": "https://github.com/huggingface/datasets/pull/6487", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6487/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6487.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6487', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6487.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6487'}", + "is_pull_request": true + }, + { + "title": "Fix docs phrasing about supported formats when sharing a dataset", + "html_url": "https://github.com/huggingface/datasets/pull/6486", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6486/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6486.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6486', 'merged_at': '2023-12-13T14:15:21Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6486.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6486'}", + "is_pull_request": true + }, + { + "title": "FileNotFoundError: [Errno 2] No such file or directory: 'nul'", + "html_url": "https://github.com/huggingface/datasets/issues/6485", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6485/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Iterable Dataset: rename column clashes with remove column", + "html_url": "https://github.com/huggingface/datasets/issues/6483", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6483/comments", + "labels": "[{'color': 'fef2c0', 'default': False, 'description': '', 'id': 3287858981, 'name': 'streaming', 'node_id': 'MDU6TGFiZWwzMjg3ODU4OTgx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/streaming'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "[Feature Request] Dataset versioning", + "html_url": "https://github.com/huggingface/datasets/issues/6484", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6484/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix max lock length on unix", + "html_url": "https://github.com/huggingface/datasets/pull/6482", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6482/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6482.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6482', 'merged_at': '2023-12-12T11:47:27Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6482.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6482'}", + "is_pull_request": true + }, + { + "title": "using torchrun, save_to_disk suddenly shows SIGTERM", + "html_url": "https://github.com/huggingface/datasets/issues/6481", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6481/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Add IterableDataset `__repr__`", + "html_url": "https://github.com/huggingface/datasets/pull/6480", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6480/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6480.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6480', 'merged_at': '2023-12-08T13:26:54Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6480.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6480'}", + "is_pull_request": true + }, + { + "title": "More robust preupload retry mechanism", + "html_url": "https://github.com/huggingface/datasets/pull/6479", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6479/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6479.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6479', 'merged_at': '2023-12-06T19:41:06Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6479.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6479'}", + "is_pull_request": true + }, + { + "title": "How to load data from lakefs", + "html_url": "https://github.com/huggingface/datasets/issues/6478", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6478/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix PermissionError on Windows CI", + "html_url": "https://github.com/huggingface/datasets/pull/6477", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6477/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6477.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6477', 'merged_at': '2023-12-06T09:17:52Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6477.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6477'}", + "is_pull_request": true + }, + { + "title": "CI on windows is broken: PermissionError", + "html_url": "https://github.com/huggingface/datasets/issues/6476", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6476/comments", + "labels": "[{'color': 'd73a4a', 'default': True, 'description': \"Something isn't working\", 'id': 1935892857, 'name': 'bug', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODU3', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/bug'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "laion2B-en failed to load on Windows with PrefetchVirtualMemory failed", + "html_url": "https://github.com/huggingface/datasets/issues/6475", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6475/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Deprecate Beam API and download from HF GCS bucket", + "html_url": "https://github.com/huggingface/datasets/pull/6474", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6474/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6474.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6474', 'merged_at': '2024-03-12T14:50:12Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6474.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6474'}", + "is_pull_request": true + }, + { + "title": "Fix CI quality", + "html_url": "https://github.com/huggingface/datasets/pull/6473", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6473/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6473.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6473', 'merged_at': '2023-12-05T18:08:41Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6473.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6473'}", + "is_pull_request": true + }, + { + "title": "CI quality is broken", + "html_url": "https://github.com/huggingface/datasets/issues/6472", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6472/comments", + "labels": "[{'color': 'd73a4a', 'default': True, 'description': \"Something isn't working\", 'id': 1935892857, 'name': 'bug', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODU3', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/bug'}\n {'color': 'd4c5f9', 'default': False, 'description': 'Maintenance tasks', 'id': 4296013012, 'name': 'maintenance', 'node_id': 'LA_kwDODunzps8AAAABAA_01A', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/maintenance'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Remove delete doc CI", + "html_url": "https://github.com/huggingface/datasets/pull/6471", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6471/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6471.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6471', 'merged_at': '2023-12-05T12:38:50Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6471.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6471'}", + "is_pull_request": true + }, + { + "title": "If an image in a dataset is corrupted, we get unescapable error", + "html_url": "https://github.com/huggingface/datasets/issues/6470", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6470/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Don't expand_info in HF glob", + "html_url": "https://github.com/huggingface/datasets/pull/6469", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6469/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6469.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6469', 'merged_at': '2023-12-15T13:12:30Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6469.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6469'}", + "is_pull_request": true + }, + { + "title": "Use auth to get parquet export", + "html_url": "https://github.com/huggingface/datasets/pull/6468", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6468/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6468.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6468', 'merged_at': '2023-12-04T17:15:11Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6468.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6468'}", + "is_pull_request": true + }, + { + "title": "New version release request", + "html_url": "https://github.com/huggingface/datasets/issues/6467", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6467/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Can't align optional features of struct", + "html_url": "https://github.com/huggingface/datasets/issues/6466", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6466/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "`load_dataset` uses out-of-date cache instead of re-downloading a changed dataset", + "html_url": "https://github.com/huggingface/datasets/issues/6465", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6465/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Add concurrent loading of shards to datasets.load_from_disk ", + "html_url": "https://github.com/huggingface/datasets/pull/6464", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6464/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6464.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6464', 'merged_at': '2024-01-26T15:10:26Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6464.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6464'}", + "is_pull_request": true + }, + { + "title": "Disable benchmarks in PRs", + "html_url": "https://github.com/huggingface/datasets/pull/6463", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6463/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6463.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6463', 'merged_at': '2023-12-01T12:03:04Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6463.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6463'}", + "is_pull_request": true + }, + { + "title": "Missing DatasetNotFoundError", + "html_url": "https://github.com/huggingface/datasets/pull/6462", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6462/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6462.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6462', 'merged_at': '2023-11-30T18:30:30Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6462.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6462'}", + "is_pull_request": true + }, + { + "title": "Fix shard retry mechanism in `push_to_hub`", + "html_url": "https://github.com/huggingface/datasets/pull/6461", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6461/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6461.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6461', 'merged_at': '2023-12-01T17:51:33Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6461.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6461'}", + "is_pull_request": true + }, + { + "title": "jsonlines files don't load with `load_dataset`", + "html_url": "https://github.com/huggingface/datasets/issues/6460", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6460/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Retrieve cached datasets that were pushed to hub when offline", + "html_url": "https://github.com/huggingface/datasets/pull/6459", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6459/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6459.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6459', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6459.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6459'}", + "is_pull_request": true + }, + { + "title": "Lazy data files resolution", + "html_url": "https://github.com/huggingface/datasets/pull/6458", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6458/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6458.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6458', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6458.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6458'}", + "is_pull_request": true + }, + { + "title": "`TypeError`: huggingface_hub.hf_file_system.HfFileSystem.find() got multiple values for keyword argument 'maxdepth'", + "html_url": "https://github.com/huggingface/datasets/issues/6457", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6457/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Don't require trust_remote_code in inspect_dataset", + "html_url": "https://github.com/huggingface/datasets/pull/6456", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6456/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6456.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6456', 'merged_at': '2023-11-30T10:34:12Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6456.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6456'}", + "is_pull_request": true + }, + { + "title": "Refactor `dill` logic", + "html_url": "https://github.com/huggingface/datasets/pull/6454", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6454/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6454.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6454', 'merged_at': '2023-11-28T16:29:31Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6454.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6454'}", + "is_pull_request": true + }, + { + "title": "Update hub-docs reference", + "html_url": "https://github.com/huggingface/datasets/pull/6453", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6453/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6453.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6453', 'merged_at': '2023-11-27T10:17:34Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6453.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6453'}", + "is_pull_request": true + }, + { + "title": "Praveen_repo_pull_req", + "html_url": "https://github.com/huggingface/datasets/pull/6452", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6452/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6452.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6452', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6452.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6452'}", + "is_pull_request": true + }, + { + "title": "Unable to read \"marsyas/gtzan\" data", + "html_url": "https://github.com/huggingface/datasets/issues/6451", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6451/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Support multiple image/audio columns in ImageFolder/AudioFolder", + "html_url": "https://github.com/huggingface/datasets/issues/6450", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6450/comments", + "labels": "[{'color': 'cfd3d7', 'default': True, 'description': 'This issue or pull request already exists', 'id': 1935892865, 'name': 'duplicate', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODY1', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/duplicate'}\n {'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix metadata file resolution when inferred pattern is `**`", + "html_url": "https://github.com/huggingface/datasets/pull/6449", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6449/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6449.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6449', 'merged_at': '2023-11-24T17:13:02Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6449.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6449'}", + "is_pull_request": true + }, + { + "title": "Use parquet export if possible", + "html_url": "https://github.com/huggingface/datasets/pull/6448", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6448/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6448.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6448', 'merged_at': '2023-12-01T17:50:59Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6448.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6448'}", + "is_pull_request": true + }, + { + "title": "Support one dataset loader per config when using YAML", + "html_url": "https://github.com/huggingface/datasets/issues/6447", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6447/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Speech Commands v2 dataset doesn't match AST-v2 config", + "html_url": "https://github.com/huggingface/datasets/issues/6446", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6446/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Use `filelock` package for file locking", + "html_url": "https://github.com/huggingface/datasets/pull/6445", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6445/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6445.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6445', 'merged_at': '2023-11-23T18:41:22Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6445.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6445'}", + "is_pull_request": true + }, + { + "title": "Remove `Table.__getstate__` and `Table.__setstate__`", + "html_url": "https://github.com/huggingface/datasets/pull/6444", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6444/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6444.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6444', 'merged_at': '2023-11-23T15:13:28Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6444.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6444'}", + "is_pull_request": true + }, + { + "title": "Trouble loading files defined in YAML explicitly", + "html_url": "https://github.com/huggingface/datasets/issues/6443", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6443/comments", + "labels": "[{'color': 'd73a4a', 'default': True, 'description': \"Something isn't working\", 'id': 1935892857, 'name': 'bug', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODU3', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/bug'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Trouble loading image folder with additional features - metadata file ignored", + "html_url": "https://github.com/huggingface/datasets/issues/6442", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6442/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Trouble Loading a Gated Dataset For User with Granted Permission", + "html_url": "https://github.com/huggingface/datasets/issues/6441", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6441/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "`.map` not hashing under python 3.9", + "html_url": "https://github.com/huggingface/datasets/issues/6440", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6440/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Download + preparation speed of datasets.load_dataset is 20x slower than huggingface hub snapshot and manual loding", + "html_url": "https://github.com/huggingface/datasets/issues/6439", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6439/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Support GeoParquet", + "html_url": "https://github.com/huggingface/datasets/issues/6438", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6438/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Problem in training iterable dataset", + "html_url": "https://github.com/huggingface/datasets/issues/6437", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6437/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "TypeError: () takes 0 positional arguments but 1 was given", + "html_url": "https://github.com/huggingface/datasets/issues/6436", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6436/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Cannot re-initialize CUDA in forked subprocess. To use CUDA with multiprocessing, you must use the 'spawn' start method", + "html_url": "https://github.com/huggingface/datasets/issues/6435", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6435/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Use `ruff` for formatting", + "html_url": "https://github.com/huggingface/datasets/pull/6434", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6434/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6434.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6434', 'merged_at': '2023-11-21T14:13:13Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6434.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6434'}", + "is_pull_request": true + }, + { + "title": "Better `tqdm` wrapper", + "html_url": "https://github.com/huggingface/datasets/pull/6433", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6433/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6433.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6433', 'merged_at': '2023-11-22T16:42:08Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6433.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6433'}", + "is_pull_request": true + }, + { + "title": "load_dataset does not load all of the data in my input file", + "html_url": "https://github.com/huggingface/datasets/issues/6432", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6432/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Create DatasetNotFoundError and DataFilesNotFoundError", + "html_url": "https://github.com/huggingface/datasets/pull/6431", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6431/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6431.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6431', 'merged_at': '2023-11-22T15:12:33Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6431.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6431'}", + "is_pull_request": true + }, + { + "title": "Add trust_remote_code argument", + "html_url": "https://github.com/huggingface/datasets/pull/6429", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6429/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6429.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6429', 'merged_at': '2023-11-28T16:03:43Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6429.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6429'}", + "is_pull_request": true + }, + { + "title": "Set dev version", + "html_url": "https://github.com/huggingface/datasets/pull/6428", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6428/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6428.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6428', 'merged_at': '2023-11-16T08:13:28Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6428.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6428'}", + "is_pull_request": true + }, + { + "title": "Release: 2.15.0", + "html_url": "https://github.com/huggingface/datasets/pull/6427", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6427/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6427.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6427', 'merged_at': '2023-11-16T07:43:05Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6427.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6427'}", + "is_pull_request": true + }, + { + "title": "More robust temporary directory deletion", + "html_url": "https://github.com/huggingface/datasets/pull/6426", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6426/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6426.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6426', 'merged_at': '2023-12-01T15:31:19Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6426.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6426'}", + "is_pull_request": true + }, + { + "title": "Fix deprecation warning when building conda package", + "html_url": "https://github.com/huggingface/datasets/pull/6425", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6425/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6425.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6425', 'merged_at': '2023-12-13T14:16:00Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6425.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6425'}", + "is_pull_request": true + }, + { + "title": "[docs] troubleshooting guide", + "html_url": "https://github.com/huggingface/datasets/pull/6424", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6424/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6424.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6424', 'merged_at': '2023-11-30T17:23:46Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6424.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6424'}", + "is_pull_request": true + }, + { + "title": "Fix conda release by adding pyarrow-hotfix dependency", + "html_url": "https://github.com/huggingface/datasets/pull/6423", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6423/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6423.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6423', 'merged_at': '2023-11-15T17:09:24Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6423.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6423'}", + "is_pull_request": true + }, + { + "title": "Allow to choose the `writer_batch_size` when using `save_to_disk`", + "html_url": "https://github.com/huggingface/datasets/issues/6422", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6422/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Add pyarrow-hotfix to release docs", + "html_url": "https://github.com/huggingface/datasets/pull/6421", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6421/comments", + "labels": "[{'color': 'd4c5f9', 'default': False, 'description': 'Maintenance tasks', 'id': 4296013012, 'name': 'maintenance', 'node_id': 'LA_kwDODunzps8AAAABAA_01A', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/maintenance'}]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6421.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6421', 'merged_at': '2023-11-15T13:38:22Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6421.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6421'}", + "is_pull_request": true + }, + { + "title": "Set dev version", + "html_url": "https://github.com/huggingface/datasets/pull/6420", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6420/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6420.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6420', 'merged_at': '2023-11-15T08:22:33Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6420.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6420'}", + "is_pull_request": true + }, + { + "title": "Release: 2.14.7", + "html_url": "https://github.com/huggingface/datasets/pull/6419", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6419/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6419.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6419', 'merged_at': '2023-11-15T08:12:59Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6419.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6419'}", + "is_pull_request": true + }, + { + "title": "Remove token value from warnings", + "html_url": "https://github.com/huggingface/datasets/pull/6418", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6418/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6418.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6418', 'merged_at': '2023-11-14T22:19:45Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6418.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6418'}", + "is_pull_request": true + }, + { + "title": " Bug: LayoutLMv3 finetuning on FUNSD Notebook; Arrow Error", + "html_url": "https://github.com/huggingface/datasets/issues/6417", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6417/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Rename audio_classificiation.py to audio_classification.py", + "html_url": "https://github.com/huggingface/datasets/pull/6416", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6416/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6416.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6416', 'merged_at': '2023-11-15T11:53:20Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6416.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6416'}", + "is_pull_request": true + }, + { + "title": "Fix multi gpu map example", + "html_url": "https://github.com/huggingface/datasets/pull/6415", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6415/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6415.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6415', 'merged_at': '2023-11-22T15:42:19Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6415.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6415'}", + "is_pull_request": true + }, + { + "title": "Set `usedforsecurity=False` in hashlib methods (FIPS compliance)", + "html_url": "https://github.com/huggingface/datasets/pull/6414", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6414/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6414.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6414', 'merged_at': '2023-11-17T14:17:00Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6414.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6414'}", + "is_pull_request": true + }, + { + "title": "User token is printed out!", + "html_url": "https://github.com/huggingface/datasets/issues/6412", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6412/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix dependency conflict within CI build documentation", + "html_url": "https://github.com/huggingface/datasets/pull/6411", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6411/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6411.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6411', 'merged_at': '2023-11-14T10:05:34Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6411.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6411'}", + "is_pull_request": true + }, + { + "title": "Datasets does not load HuggingFace Repository properly", + "html_url": "https://github.com/huggingface/datasets/issues/6410", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6410/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "using DownloadManager to download from local filesystem and disable_progress_bar, there will be an exception ", + "html_url": "https://github.com/huggingface/datasets/issues/6409", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6409/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "`IterableDataset` lost but not keep columns when map function adding columns with names in `remove_columns`", + "html_url": "https://github.com/huggingface/datasets/issues/6408", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6408/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Loading the dataset from private S3 bucket gives \"TypeError: cannot pickle '_contextvars.Context' object\"", + "html_url": "https://github.com/huggingface/datasets/issues/6407", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6407/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "CI Build PR Documentation is broken: ImportError: cannot import name 'TypeAliasType' from 'typing_extensions'", + "html_url": "https://github.com/huggingface/datasets/issues/6406", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6406/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "ConfigNamesError on a simple CSV file", + "html_url": "https://github.com/huggingface/datasets/issues/6405", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6405/comments", + "labels": "[{'color': 'd73a4a', 'default': True, 'description': \"Something isn't working\", 'id': 1935892857, 'name': 'bug', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODU3', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/bug'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Support pyarrow 14.0.1 and fix vulnerability CVE-2023-47248", + "html_url": "https://github.com/huggingface/datasets/pull/6404", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6404/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6404.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6404', 'merged_at': '2023-11-14T10:23:29Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6404.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6404'}", + "is_pull_request": true + }, + { + "title": "Cannot import datasets on google colab (python 3.10.12)", + "html_url": "https://github.com/huggingface/datasets/issues/6403", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6403/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Update torch_formatter.py", + "html_url": "https://github.com/huggingface/datasets/pull/6402", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6402/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6402.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6402', 'merged_at': '2024-03-15T11:25:36Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6402.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6402'}", + "is_pull_request": true + }, + { + "title": "dataset = load_dataset(\"Hyperspace-Technologies/scp-wiki-text\") not working", + "html_url": "https://github.com/huggingface/datasets/issues/6401", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6401/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Safely load datasets by disabling execution of dataset loading script", + "html_url": "https://github.com/huggingface/datasets/issues/6400", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6400/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "TypeError: Cannot convert pyarrow.lib.ChunkedArray to pyarrow.lib.Array", + "html_url": "https://github.com/huggingface/datasets/issues/6399", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6399/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Remove redundant condition in builders", + "html_url": "https://github.com/huggingface/datasets/pull/6398", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6398/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6398.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6398', 'merged_at': '2023-11-14T10:43:00Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6398.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6398'}", + "is_pull_request": true + }, + { + "title": "Raise a different exception for inexisting dataset vs files without known extension", + "html_url": "https://github.com/huggingface/datasets/issues/6397", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6397/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Issue with pyarrow 14.0.1", + "html_url": "https://github.com/huggingface/datasets/issues/6396", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6396/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Add ability to set lock type", + "html_url": "https://github.com/huggingface/datasets/issues/6395", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6395/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "TorchFormatter images (H, W, C) instead of (C, H, W) format", + "html_url": "https://github.com/huggingface/datasets/issues/6394", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6394/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Filter occasionally hangs", + "html_url": "https://github.com/huggingface/datasets/issues/6393", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6393/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "`push_to_hub` is not robust to hub closing connection", + "html_url": "https://github.com/huggingface/datasets/issues/6392", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6392/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Webdataset dataset builder", + "html_url": "https://github.com/huggingface/datasets/pull/6391", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6391/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6391.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6391', 'merged_at': '2023-11-28T16:33:10Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6391.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6391'}", + "is_pull_request": true + }, + { + "title": "handle future deprecation argument", + "html_url": "https://github.com/huggingface/datasets/pull/6390", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6390/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6390.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6390', 'merged_at': '2023-11-14T15:15:59Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6390.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6390'}", + "is_pull_request": true + }, + { + "title": "Index 339 out of range for dataset of size 339 <-- save_to_file()", + "html_url": "https://github.com/huggingface/datasets/issues/6389", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6389/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "How to create 3d medical imgae dataset?", + "html_url": "https://github.com/huggingface/datasets/issues/6388", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6388/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "How to load existing downloaded dataset ?", + "html_url": "https://github.com/huggingface/datasets/issues/6387", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6387/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Formatting overhead", + "html_url": "https://github.com/huggingface/datasets/issues/6386", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6386/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Get an error when i try to concatenate the squad dataset with my own dataset", + "html_url": "https://github.com/huggingface/datasets/issues/6385", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6385/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Load the local dataset folder from other place", + "html_url": "https://github.com/huggingface/datasets/issues/6384", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6384/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "imagenet-1k downloads over and over", + "html_url": "https://github.com/huggingface/datasets/issues/6383", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6383/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Add CheXpert dataset for vision", + "html_url": "https://github.com/huggingface/datasets/issues/6382", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6382/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}\n {'color': 'e99695', 'default': False, 'description': 'Requesting to add a new dataset', 'id': 2067376369, 'name': 'dataset request', 'node_id': 'MDU6TGFiZWwyMDY3Mzc2MzY5', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/dataset%20request'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Add my dataset", + "html_url": "https://github.com/huggingface/datasets/pull/6381", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6381/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6381.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6381', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6381.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6381'}", + "is_pull_request": true + }, + { + "title": "Fix for continuation behaviour on broken dataset archives due to starving download connections via HTTP-GET", + "html_url": "https://github.com/huggingface/datasets/pull/6380", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6380/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6380.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6380', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6380.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6380'}", + "is_pull_request": true + }, + { + "title": "Avoid redundant warning when encoding NumPy array as `Image`", + "html_url": "https://github.com/huggingface/datasets/pull/6379", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6379/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6379.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6379', 'merged_at': '2023-11-02T17:08:07Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6379.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6379'}", + "is_pull_request": true + }, + { + "title": "Support pyarrow 14.0.0", + "html_url": "https://github.com/huggingface/datasets/pull/6378", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6378/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6378.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6378', 'merged_at': '2023-11-02T15:15:44Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6378.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6378'}", + "is_pull_request": true + }, + { + "title": "Support pyarrow 14.0.0", + "html_url": "https://github.com/huggingface/datasets/issues/6377", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6377/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Caching problem when deleting a dataset ", + "html_url": "https://github.com/huggingface/datasets/issues/6376", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6376/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Temporarily pin pyarrow < 14.0.0", + "html_url": "https://github.com/huggingface/datasets/pull/6375", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6375/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6375.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6375', 'merged_at': '2023-11-02T10:11:19Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6375.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6375'}", + "is_pull_request": true + }, + { + "title": "CI is broken: TypeError: Couldn't cast array", + "html_url": "https://github.com/huggingface/datasets/issues/6374", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6374/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix typo in `Dataset.map` docstring", + "html_url": "https://github.com/huggingface/datasets/pull/6373", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6373/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6373.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6373', 'merged_at': '2023-11-02T10:11:38Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6373.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6373'}", + "is_pull_request": true + }, + { + "title": "do not try to download from HF GCS for generator", + "html_url": "https://github.com/huggingface/datasets/pull/6372", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6372/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6372.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6372', 'merged_at': '2023-11-02T15:52:09Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6372.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6372'}", + "is_pull_request": true + }, + { + "title": "`Dataset.from_generator` should not try to download from HF GCS", + "html_url": "https://github.com/huggingface/datasets/issues/6371", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6371/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "TensorDataset format does not work with Trainer from transformers", + "html_url": "https://github.com/huggingface/datasets/issues/6370", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6370/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Multi process map did not load cache file correctly", + "html_url": "https://github.com/huggingface/datasets/issues/6369", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6369/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix python formatting for complex types in `format_table`", + "html_url": "https://github.com/huggingface/datasets/pull/6368", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6368/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6368.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6368', 'merged_at': '2023-11-02T14:21:16Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6368.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6368'}", + "is_pull_request": true + }, + { + "title": "Fix time measuring snippet in docs", + "html_url": "https://github.com/huggingface/datasets/pull/6367", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6367/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6367.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6367', 'merged_at': '2023-10-31T18:24:02Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6367.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6367'}", + "is_pull_request": true + }, + { + "title": "with_format() function returns bytes instead of PIL images even when image column is not part of \"columns\"", + "html_url": "https://github.com/huggingface/datasets/issues/6366", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6366/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Parquet size grows exponential for categorical data", + "html_url": "https://github.com/huggingface/datasets/issues/6365", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6365/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "ArrowNotImplementedError: Unsupported cast from string to list using function cast_list", + "html_url": "https://github.com/huggingface/datasets/issues/6364", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6364/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "dataset.transform() hangs indefinitely while finetuning the stable diffusion XL", + "html_url": "https://github.com/huggingface/datasets/issues/6363", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6363/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Simplify filesystem logic", + "html_url": "https://github.com/huggingface/datasets/pull/6362", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6362/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6362.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6362', 'merged_at': '2023-11-15T14:02:02Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6362.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6362'}", + "is_pull_request": true + }, + { + "title": " Add support for `Sequence(Audio/Image)` feature in `push_to_hub`", + "html_url": "https://github.com/huggingface/datasets/issues/6360", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6360/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Stuck in \"Resolving data files...\"", + "html_url": "https://github.com/huggingface/datasets/issues/6359", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6359/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Mounting datasets cache fails due to absolute paths.", + "html_url": "https://github.com/huggingface/datasets/issues/6358", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6358/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Allow passing a multiprocessing context to functions that support `num_proc`", + "html_url": "https://github.com/huggingface/datasets/issues/6357", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6357/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Add `fsspec` version to the `datasets-cli env` command output", + "html_url": "https://github.com/huggingface/datasets/pull/6356", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6356/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6356.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6356', 'merged_at': '2023-10-26T18:32:21Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6356.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6356'}", + "is_pull_request": true + }, + { + "title": "More hub centric docs", + "html_url": "https://github.com/huggingface/datasets/pull/6355", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6355/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6355.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6355', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6355.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6355'}", + "is_pull_request": true + }, + { + "title": "`IterableDataset.from_spark` does not support multiple workers in pytorch `Dataloader`", + "html_url": "https://github.com/huggingface/datasets/issues/6354", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6354/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "load_dataset save_to_disk load_from_disk error", + "html_url": "https://github.com/huggingface/datasets/issues/6353", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6353/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Error loading wikitext data raise NotImplementedError(f\"Loading a dataset cached in a {type(self._fs).__name__} is not supported.\")", + "html_url": "https://github.com/huggingface/datasets/issues/6352", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6352/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix use_dataset.mdx", + "html_url": "https://github.com/huggingface/datasets/pull/6351", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6351/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6351.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6351', 'merged_at': '2023-10-26T17:10:27Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6351.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6351'}", + "is_pull_request": true + }, + { + "title": "Different objects are returned from calls that should be returning the same kind of object.", + "html_url": "https://github.com/huggingface/datasets/issues/6350", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6350/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Can't load ds = load_dataset(\"imdb\")", + "html_url": "https://github.com/huggingface/datasets/issues/6349", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6349/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Parquet stream-conversion fails to embed images/audio files from gated repos", + "html_url": "https://github.com/huggingface/datasets/issues/6348", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6348/comments", + "labels": "[{'color': 'd73a4a', 'default': True, 'description': \"Something isn't working\", 'id': 1935892857, 'name': 'bug', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODU3', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/bug'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Incorrect example code in 'Create a dataset' docs", + "html_url": "https://github.com/huggingface/datasets/issues/6347", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6347/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix UnboundLocalError if preprocessing returns an empty list", + "html_url": "https://github.com/huggingface/datasets/pull/6346", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6346/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6346.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6346', 'merged_at': '2023-10-25T16:36:38Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6346.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6346'}", + "is_pull_request": true + }, + { + "title": "support squad structure datasets using a YAML parameter", + "html_url": "https://github.com/huggingface/datasets/issues/6345", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6345/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "set dev version", + "html_url": "https://github.com/huggingface/datasets/pull/6344", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6344/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6344.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6344', 'merged_at': '2023-10-23T15:13:38Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6344.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6344'}", + "is_pull_request": true + }, + { + "title": "Remove unused argument in `_get_data_files_patterns`", + "html_url": "https://github.com/huggingface/datasets/pull/6343", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6343/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6343.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6343', 'merged_at': '2023-11-16T09:03:39Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6343.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6343'}", + "is_pull_request": true + }, + { + "title": "Release: 2.14.6", + "html_url": "https://github.com/huggingface/datasets/pull/6342", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6342/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6342.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6342', 'merged_at': '2023-10-23T15:07:25Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6342.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6342'}", + "is_pull_request": true + }, + { + "title": "Release 2.14.5", + "html_url": "https://github.com/huggingface/datasets/pull/6340", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6340/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6340.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6340', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6340.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6340'}", + "is_pull_request": true + }, + { + "title": "minor release step improvement", + "html_url": "https://github.com/huggingface/datasets/pull/6339", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6339/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6339.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6339', 'merged_at': '2023-11-07T10:32:41Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6339.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6339'}", + "is_pull_request": true + }, + { + "title": "pin fsspec before it switches to glob.glob", + "html_url": "https://github.com/huggingface/datasets/pull/6338", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6338/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6338.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6338', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6338.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6338'}", + "is_pull_request": true + }, + { + "title": "Pin supported upper version of fsspec", + "html_url": "https://github.com/huggingface/datasets/pull/6337", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6337/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6337.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6337', 'merged_at': '2023-10-23T12:04:36Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6337.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6337'}", + "is_pull_request": true + }, + { + "title": "unpin-fsspec", + "html_url": "https://github.com/huggingface/datasets/pull/6336", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6336/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6336.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6336', 'merged_at': '2023-10-23T10:17:48Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6336.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6336'}", + "is_pull_request": true + }, + { + "title": "Support fsspec 2023.10.0", + "html_url": "https://github.com/huggingface/datasets/pull/6335", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6335/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6335.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6335', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6335.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6335'}", + "is_pull_request": true + }, + { + "title": "datasets.filesystems: fix is_remote_filesystems", + "html_url": "https://github.com/huggingface/datasets/pull/6334", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6334/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6334.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6334', 'merged_at': '2023-10-23T10:14:10Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6334.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6334'}", + "is_pull_request": true + }, + { + "title": "Support fsspec 2023.10.0", + "html_url": "https://github.com/huggingface/datasets/issues/6333", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6333/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Replace deprecated license_file in setup.cfg", + "html_url": "https://github.com/huggingface/datasets/pull/6332", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6332/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6332.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6332', 'merged_at': '2023-11-07T08:09:06Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6332.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6332'}", + "is_pull_request": true + }, + { + "title": "Temporarily pin fsspec < 2023.10.0", + "html_url": "https://github.com/huggingface/datasets/pull/6331", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6331/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6331.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6331', 'merged_at': '2023-10-23T09:17:55Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6331.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6331'}", + "is_pull_request": true + }, + { + "title": "Latest fsspec==2023.10.0 issue with streaming datasets", + "html_url": "https://github.com/huggingface/datasets/issues/6330", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6330/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "\u0634\u0628\u06a9\u0647 \u0647\u0627\u06cc \u0645\u062a\u0646 \u0628\u0647 \u06af\u0641\u062a\u0627\u0631 \u0627\u0628\u062a\u062f\u0627 \u0645\u062a\u0646 \u062f\u0627\u062f\u0647 \u0634\u062f\u0647 \u0631\u0627 \u0628\u0647 \u0628\u0627\u0632\u0646\u0645\u0627\u06cc\u06cc \u0645\u06cc\u0627\u0646\u06cc", + "html_url": "https://github.com/huggingface/datasets/issues/6329", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6329/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "\u0634\u0628\u06a9\u0647 \u0647\u0627\u06cc \u0645\u062a\u0646 \u0628\u0647 \u06af\u0641\u062a\u0627\u0631 \u0627\u0628\u062a\u062f\u0627 \u0645\u062a\u0646 \u062f\u0627\u062f\u0647 \u0634\u062f\u0647 \u0631\u0627 \u0628\u0647 \u0628\u0627\u0632\u0646\u0645\u0627\u06cc\u06cc \u0645\u06cc\u0627\u0646\u06cc", + "html_url": "https://github.com/huggingface/datasets/issues/6328", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6328/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "FileNotFoundError when trying to load the downloaded dataset with `load_dataset(..., streaming=True)`", + "html_url": "https://github.com/huggingface/datasets/issues/6327", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6327/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Create battery_analysis.py", + "html_url": "https://github.com/huggingface/datasets/pull/6326", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6326/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6326.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6326', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6326.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6326'}", + "is_pull_request": true + }, + { + "title": "Create battery_analysis.py", + "html_url": "https://github.com/huggingface/datasets/pull/6325", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6325/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6325.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6325', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6325.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6325'}", + "is_pull_request": true + }, + { + "title": "Conversion to Arrow fails due to wrong type heuristic", + "html_url": "https://github.com/huggingface/datasets/issues/6324", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6324/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Loading dataset from large GCS bucket very slow since 2.14", + "html_url": "https://github.com/huggingface/datasets/issues/6323", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6323/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix regex `get_data_files` formatting for base paths", + "html_url": "https://github.com/huggingface/datasets/pull/6322", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6322/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6322.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6322', 'merged_at': '2023-10-23T14:31:21Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6322.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6322'}", + "is_pull_request": true + }, + { + "title": "Fix typos", + "html_url": "https://github.com/huggingface/datasets/pull/6321", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6321/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6321.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6321', 'merged_at': '2023-10-19T17:07:35Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6321.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6321'}", + "is_pull_request": true + }, + { + "title": "Dataset slice splits can't load training and validation at the same time", + "html_url": "https://github.com/huggingface/datasets/issues/6320", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6320/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Datasets.map is severely broken", + "html_url": "https://github.com/huggingface/datasets/issues/6319", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6319/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Deterministic set hash", + "html_url": "https://github.com/huggingface/datasets/pull/6318", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6318/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6318.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6318', 'merged_at': '2023-10-19T16:16:31Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6318.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6318'}", + "is_pull_request": true + }, + { + "title": "sentiment140 dataset unavailable", + "html_url": "https://github.com/huggingface/datasets/issues/6317", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6317/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix loading Hub datasets with CSV metadata file", + "html_url": "https://github.com/huggingface/datasets/pull/6316", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6316/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6316.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6316', 'merged_at': '2023-10-20T06:14:09Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6316.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6316'}", + "is_pull_request": true + }, + { + "title": "Hub datasets with CSV metadata raise ArrowInvalid: JSON parse error: Invalid value. in row 0", + "html_url": "https://github.com/huggingface/datasets/issues/6315", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6315/comments", + "labels": "[{'color': 'd73a4a', 'default': True, 'description': \"Something isn't working\", 'id': 1935892857, 'name': 'bug', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODU3', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/bug'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Support creating new branch in push_to_hub", + "html_url": "https://github.com/huggingface/datasets/pull/6314", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6314/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6314.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6314', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6314.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6314'}", + "is_pull_request": true + }, + { + "title": "Fix commit message formatting in multi-commit uploads", + "html_url": "https://github.com/huggingface/datasets/pull/6313", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6313/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6313.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6313', 'merged_at': '2023-10-20T13:57:38Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6313.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6313'}", + "is_pull_request": true + }, + { + "title": "docs: resolving namespace conflict, refactored variable ", + "html_url": "https://github.com/huggingface/datasets/pull/6312", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6312/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6312.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6312', 'merged_at': '2023-10-19T16:23:07Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6312.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6312'}", + "is_pull_request": true + }, + { + "title": "cast_column to Sequence with length=4 occur exception raise in datasets/table.py:2146", + "html_url": "https://github.com/huggingface/datasets/issues/6311", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6311/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Add return_file_name in load_dataset", + "html_url": "https://github.com/huggingface/datasets/pull/6310", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6310/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6310.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6310', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6310.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6310'}", + "is_pull_request": true + }, + { + "title": "Fix get_data_patterns for directories with the word data twice", + "html_url": "https://github.com/huggingface/datasets/pull/6309", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6309/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6309.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6309', 'merged_at': '2023-10-18T13:50:35Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6309.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6309'}", + "is_pull_request": true + }, + { + "title": "module 'resource' has no attribute 'error'", + "html_url": "https://github.com/huggingface/datasets/issues/6308", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6308/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix typo in code example in docs", + "html_url": "https://github.com/huggingface/datasets/pull/6307", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6307/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6307.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6307', 'merged_at': '2023-10-17T06:36:18Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6307.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6307'}", + "is_pull_request": true + }, + { + "title": "pyinstaller : OSError: could not get source code", + "html_url": "https://github.com/huggingface/datasets/issues/6306", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6306/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Cannot load dataset with `2.14.5`: `FileNotFound` error", + "html_url": "https://github.com/huggingface/datasets/issues/6305", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6305/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Update README.md", + "html_url": "https://github.com/huggingface/datasets/pull/6304", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6304/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6304.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6304', 'merged_at': '2023-10-17T15:04:52Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6304.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6304'}", + "is_pull_request": true + }, + { + "title": "Parquet uploads off-by-one naming scheme", + "html_url": "https://github.com/huggingface/datasets/issues/6303", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6303/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "ArrowWriter/ParquetWriter `write` method does not increase `_num_bytes` and hence datasets not sharding at `max_shard_size`", + "html_url": "https://github.com/huggingface/datasets/issues/6302", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6302/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Unpin `tensorflow` maximum version", + "html_url": "https://github.com/huggingface/datasets/pull/6301", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6301/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6301.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6301', 'merged_at': '2023-10-12T15:49:54Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6301.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6301'}", + "is_pull_request": true + }, + { + "title": "Unpin `jax` maximum version", + "html_url": "https://github.com/huggingface/datasets/pull/6300", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6300/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6300.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6300', 'merged_at': '2023-10-12T16:28:57Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6300.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6300'}", + "is_pull_request": true + }, + { + "title": "Support for newer versions of JAX", + "html_url": "https://github.com/huggingface/datasets/issues/6299", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6299/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Doc readme improvements", + "html_url": "https://github.com/huggingface/datasets/pull/6298", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6298/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6298.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6298', 'merged_at': '2023-10-12T12:38:19Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6298.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6298'}", + "is_pull_request": true + }, + { + "title": "Fix ArrayXD cast", + "html_url": "https://github.com/huggingface/datasets/pull/6297", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6297/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6297.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6297', 'merged_at': '2023-10-13T13:45:30Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6297.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6297'}", + "is_pull_request": true + }, + { + "title": "Move `exceptions.py` to `utils/exceptions.py`", + "html_url": "https://github.com/huggingface/datasets/pull/6296", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6296/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6296.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6296', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6296.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6296'}", + "is_pull_request": true + }, + { + "title": "Fix parquet columns argument in streaming mode", + "html_url": "https://github.com/huggingface/datasets/pull/6295", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6295/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6295.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6295', 'merged_at': '2023-10-11T16:21:36Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6295.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6295'}", + "is_pull_request": true + }, + { + "title": "IndexError: Invalid key is out of bounds for size 0 despite having a populated dataset", + "html_url": "https://github.com/huggingface/datasets/issues/6294", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6294/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Choose columns to stream parquet data in streaming mode", + "html_url": "https://github.com/huggingface/datasets/issues/6293", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6293/comments", + "labels": "[{'color': 'd73a4a', 'default': True, 'description': \"Something isn't working\", 'id': 1935892857, 'name': 'bug', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODU3', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/bug'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "how to load the image of dtype float32 or float64", + "html_url": "https://github.com/huggingface/datasets/issues/6292", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6292/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Casting type from Array2D int to Array2D float crashes", + "html_url": "https://github.com/huggingface/datasets/issues/6291", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6291/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Incremental dataset (e.g. `.push_to_hub(..., append=True)`)", + "html_url": "https://github.com/huggingface/datasets/issues/6290", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6290/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "testing doc-builder", + "html_url": "https://github.com/huggingface/datasets/pull/6289", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6289/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6289.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6289', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6289.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6289'}", + "is_pull_request": true + }, + { + "title": "Dataset.from_pandas with a DataFrame of PIL.Images", + "html_url": "https://github.com/huggingface/datasets/issues/6288", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6288/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "map() not recognizing \"text\"", + "html_url": "https://github.com/huggingface/datasets/issues/6287", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6287/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Create DefunctDatasetError", + "html_url": "https://github.com/huggingface/datasets/pull/6286", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6286/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6286.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6286', 'merged_at': '2023-10-10T07:03:04Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6286.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6286'}", + "is_pull_request": true + }, + { + "title": "TypeError: expected str, bytes or os.PathLike object, not dict", + "html_url": "https://github.com/huggingface/datasets/issues/6285", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6285/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Add Belebele multiple-choice machine reading comprehension (MRC) dataset", + "html_url": "https://github.com/huggingface/datasets/issues/6284", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6284/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix array cast/embed with null values", + "html_url": "https://github.com/huggingface/datasets/pull/6283", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6283/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6283.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6283', 'merged_at': '2024-02-06T19:24:18Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6283.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6283'}", + "is_pull_request": true + }, + { + "title": "Drop data_files duplicates", + "html_url": "https://github.com/huggingface/datasets/pull/6282", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6282/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6282.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6282', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6282.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6282'}", + "is_pull_request": true + }, + { + "title": "Improve documentation of dataset.from_generator", + "html_url": "https://github.com/huggingface/datasets/pull/6281", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6281/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6281.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6281', 'merged_at': '2023-10-05T18:57:41Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6281.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6281'}", + "is_pull_request": true + }, + { + "title": "Couldn't cast array of type fixed_size_list to Sequence(Value(float64))", + "html_url": "https://github.com/huggingface/datasets/issues/6280", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6280/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Batched IterableDataset", + "html_url": "https://github.com/huggingface/datasets/issues/6279", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6279/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "No data files duplicates", + "html_url": "https://github.com/huggingface/datasets/pull/6278", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6278/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6278.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6278', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6278.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6278'}", + "is_pull_request": true + }, + { + "title": "FileNotFoundError: Couldn't find a module script at /content/paws-x/paws-x.py. Module 'paws-x' doesn't exist on the Hugging Face Hub either.", + "html_url": "https://github.com/huggingface/datasets/issues/6277", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6277/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "I'm trying to fine tune the openai/whisper model from huggingface using jupyter notebook and i keep getting this error", + "html_url": "https://github.com/huggingface/datasets/issues/6276", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6276/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Would like to Contribute a dataset", + "html_url": "https://github.com/huggingface/datasets/issues/6275", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6275/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "FileNotFoundError for dataset with multiple builder config", + "html_url": "https://github.com/huggingface/datasets/issues/6274", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6274/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Broken Link to PubMed Abstracts dataset .", + "html_url": "https://github.com/huggingface/datasets/issues/6273", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6273/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Duplicate `data_files` when named `/.parquet`", + "html_url": "https://github.com/huggingface/datasets/issues/6272", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6272/comments", + "labels": "[{'color': 'd73a4a', 'default': True, 'description': \"Something isn't working\", 'id': 1935892857, 'name': 'bug', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODU3', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/bug'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Overwriting Split overwrites data but not metadata, corrupting dataset", + "html_url": "https://github.com/huggingface/datasets/issues/6271", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6271/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Dataset.from_generator raises with sharded gen_args", + "html_url": "https://github.com/huggingface/datasets/issues/6270", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6270/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Reduce the number of commits in `push_to_hub`", + "html_url": "https://github.com/huggingface/datasets/pull/6269", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6269/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6269.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6269', 'merged_at': '2023-10-16T13:30:46Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6269.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6269'}", + "is_pull_request": true + }, + { + "title": "Add repo_id to DatasetInfo", + "html_url": "https://github.com/huggingface/datasets/pull/6268", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6268/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6268.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6268', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6268.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6268'}", + "is_pull_request": true + }, + { + "title": "Multi label class encoding", + "html_url": "https://github.com/huggingface/datasets/issues/6267", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6267/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Use LibYAML with PyYAML if available", + "html_url": "https://github.com/huggingface/datasets/pull/6266", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6266/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6266.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6266', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6266.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6266'}", + "is_pull_request": true + }, + { + "title": "Remove `apache_beam` import in `BeamBasedBuilder._save_info`", + "html_url": "https://github.com/huggingface/datasets/pull/6265", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6265/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6265.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6265', 'merged_at': '2023-09-28T18:23:35Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6265.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6265'}", + "is_pull_request": true + }, + { + "title": "Temporarily pin tensorflow < 2.14.0", + "html_url": "https://github.com/huggingface/datasets/pull/6264", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6264/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6264.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6264', 'merged_at': '2023-09-27T08:36:39Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6264.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6264'}", + "is_pull_request": true + }, + { + "title": "CI is broken: ImportError: cannot import name 'context' from 'tensorflow.python'", + "html_url": "https://github.com/huggingface/datasets/issues/6263", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6263/comments", + "labels": "[{'color': 'd73a4a', 'default': True, 'description': \"Something isn't working\", 'id': 1935892857, 'name': 'bug', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODU3', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/bug'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix CI 404 errors", + "html_url": "https://github.com/huggingface/datasets/pull/6262", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6262/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6262.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6262', 'merged_at': '2023-09-28T15:30:40Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6262.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6262'}", + "is_pull_request": true + }, + { + "title": "Can't load a dataset", + "html_url": "https://github.com/huggingface/datasets/issues/6261", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6261/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "REUSE_DATASET_IF_EXISTS don't work ", + "html_url": "https://github.com/huggingface/datasets/issues/6260", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6260/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Duplicated Rows When Loading Parquet Files from Root Directory with Subdirectories", + "html_url": "https://github.com/huggingface/datasets/issues/6259", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6259/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "[DOCS] Fix typo: Elasticsearch", + "html_url": "https://github.com/huggingface/datasets/pull/6258", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6258/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6258.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6258', 'merged_at': '2023-09-26T13:36:40Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6258.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6258'}", + "is_pull_request": true + }, + { + "title": "HfHubHTTPError - exceeded our hourly quotas for action: commit", + "html_url": "https://github.com/huggingface/datasets/issues/6257", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6257/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "load_dataset() function's cache_dir does not seems to work", + "html_url": "https://github.com/huggingface/datasets/issues/6256", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6256/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Parallelize builder configs creation", + "html_url": "https://github.com/huggingface/datasets/pull/6255", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6255/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6255.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6255', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6255.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6255'}", + "is_pull_request": true + }, + { + "title": "Dataset.from_generator() cost much more time in vscode debugging mode then running mode", + "html_url": "https://github.com/huggingface/datasets/issues/6254", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6254/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Check builder cls default config name in inspect", + "html_url": "https://github.com/huggingface/datasets/pull/6253", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6253/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6253.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6253', 'merged_at': '2023-09-21T14:08:00Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6253.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6253'}", + "is_pull_request": true + }, + { + "title": "exif_transpose not done to Image (PIL problem)", + "html_url": "https://github.com/huggingface/datasets/issues/6252", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6252/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Support streaming datasets with pyarrow.parquet.read_table", + "html_url": "https://github.com/huggingface/datasets/pull/6251", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6251/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6251.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6251', 'merged_at': '2023-09-27T06:26:24Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6251.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6251'}", + "is_pull_request": true + }, + { + "title": "Update create_dataset.mdx", + "html_url": "https://github.com/huggingface/datasets/pull/6247", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6247/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6247.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6247', 'merged_at': '2023-09-19T18:40:10Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6247.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6247'}", + "is_pull_request": true + }, + { + "title": "Add new column to dataset", + "html_url": "https://github.com/huggingface/datasets/issues/6246", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6246/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Add support for `fsspec>=2023.9.0`", + "html_url": "https://github.com/huggingface/datasets/pull/6244", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6244/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6244.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6244', 'merged_at': '2023-09-26T15:32:51Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6244.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6244'}", + "is_pull_request": true + }, + { + "title": "Fix cast from fixed size list to variable size list", + "html_url": "https://github.com/huggingface/datasets/pull/6243", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6243/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6243.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6243', 'merged_at': '2023-09-19T17:53:17Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6243.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6243'}", + "is_pull_request": true + }, + { + "title": "Data alteration when loading dataset with unspecified inner sequence length", + "html_url": "https://github.com/huggingface/datasets/issues/6242", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6242/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Remove unused global variables in `audio.py`", + "html_url": "https://github.com/huggingface/datasets/pull/6241", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6241/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6241.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6241', 'merged_at': '2023-09-15T15:46:07Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6241.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6241'}", + "is_pull_request": true + }, + { + "title": "Dataloader stuck on multiple GPUs", + "html_url": "https://github.com/huggingface/datasets/issues/6240", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6240/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Load local audio data doesn't work", + "html_url": "https://github.com/huggingface/datasets/issues/6239", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6239/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "`dataset.filter` ALWAYS removes the first item from the dataset when using batched=True", + "html_url": "https://github.com/huggingface/datasets/issues/6238", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6238/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Tokenization with multiple workers is too slow", + "html_url": "https://github.com/huggingface/datasets/issues/6237", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6237/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Support buffer shuffle for to_tf_dataset", + "html_url": "https://github.com/huggingface/datasets/issues/6236", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6236/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Support multiprocessing for download/extract nestedly", + "html_url": "https://github.com/huggingface/datasets/issues/6235", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6235/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Update README.md", + "html_url": "https://github.com/huggingface/datasets/pull/6233", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6233/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6233.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6233', 'merged_at': '2023-09-13T18:10:04Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6233.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6233'}", + "is_pull_request": true + }, + { + "title": "Improve error message for missing function parameters", + "html_url": "https://github.com/huggingface/datasets/pull/6232", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6232/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6232.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6232', 'merged_at': '2023-09-15T17:59:02Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6232.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6232'}", + "is_pull_request": true + }, + { + "title": "Overwrite legacy default config name in `dataset_infos.json` in packaged datasets", + "html_url": "https://github.com/huggingface/datasets/pull/6231", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6231/comments", + "labels": "[]", + "state": "open", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6231.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6231', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6231.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6231'}", + "is_pull_request": true + }, + { + "title": "Don't skip hidden files in `dl_manager.iter_files` when they are given as input", + "html_url": "https://github.com/huggingface/datasets/pull/6230", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6230/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6230.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6230', 'merged_at': '2023-09-13T18:12:09Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6230.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6230'}", + "is_pull_request": true + }, + { + "title": "Apply inference on all images in the dataset", + "html_url": "https://github.com/huggingface/datasets/issues/6229", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6229/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Remove RGB -> BGR image conversion in Object Detection tutorial", + "html_url": "https://github.com/huggingface/datasets/pull/6228", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6228/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6228.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6228', 'merged_at': '2023-09-08T17:52:16Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6228.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6228'}", + "is_pull_request": true + }, + { + "title": "Add push_to_hub with multiple configs docs", + "html_url": "https://github.com/huggingface/datasets/pull/6226", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6226/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6226.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6226', 'merged_at': '2023-09-08T12:20:51Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6226.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6226'}", + "is_pull_request": true + }, + { + "title": "Conversion from RGB to BGR in Object Detection tutorial", + "html_url": "https://github.com/huggingface/datasets/issues/6225", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6225/comments", + "labels": "[]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Ignore `dataset_info.json` in data files resolution", + "html_url": "https://github.com/huggingface/datasets/pull/6224", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6224/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6224.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6224', 'merged_at': '2023-09-07T15:37:20Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6224.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6224'}", + "is_pull_request": true + }, + { + "title": "Update README.md", + "html_url": "https://github.com/huggingface/datasets/pull/6223", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6223/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6223.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6223', 'merged_at': '2023-09-13T22:23:42Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6223.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6223'}", + "is_pull_request": true + }, + { + "title": "fix typo in Audio dataset documentation", + "html_url": "https://github.com/huggingface/datasets/pull/6222", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6222/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6222.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6222', 'merged_at': '2023-09-07T15:39:09Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6222.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6222'}", + "is_pull_request": true + }, + { + "title": "Support saving datasets with custom formatting", + "html_url": "https://github.com/huggingface/datasets/issues/6221", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6221/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Set dev version", + "html_url": "https://github.com/huggingface/datasets/pull/6220", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6220/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6220.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6220', 'merged_at': '2023-09-06T15:41:13Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6220.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6220'}", + "is_pull_request": true + }, + { + "title": "Release: 2.14.5", + "html_url": "https://github.com/huggingface/datasets/pull/6219", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6219/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6219.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6219', 'merged_at': '2023-09-06T15:18:51Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6219.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6219'}", + "is_pull_request": true + }, + { + "title": "Rename old push_to_hub configs to \"default\" in dataset_infos", + "html_url": "https://github.com/huggingface/datasets/pull/6218", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6218/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6218.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6218', 'merged_at': '2023-09-06T11:23:56Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6218.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6218'}", + "is_pull_request": true + }, + { + "title": "`Dataset.to_dict()` ignore `decode=True` with Image feature", + "html_url": "https://github.com/huggingface/datasets/issues/6217", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6217/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Release: 2.13.2", + "html_url": "https://github.com/huggingface/datasets/pull/6216", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6216/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6216.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6216', 'merged_at': '2023-09-06T08:22:43Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6216.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6216'}", + "is_pull_request": true + }, + { + "title": "Fix checking patterns to infer packaged builder ", + "html_url": "https://github.com/huggingface/datasets/pull/6215", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6215/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6215.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6215', 'merged_at': '2023-09-06T10:25:00Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6215.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6215'}", + "is_pull_request": true + }, + { + "title": "Unpin fsspec < 2023.9.0", + "html_url": "https://github.com/huggingface/datasets/issues/6214", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6214/comments", + "labels": "[{'color': 'a2eeef', 'default': True, 'description': 'New feature or request', 'id': 1935892871, 'name': 'enhancement', 'node_id': 'MDU6TGFiZWwxOTM1ODkyODcx', 'url': 'https://api.github.com/repos/huggingface/datasets/labels/enhancement'}]", + "state": "closed", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Better list array values handling in cast/embed storage", + "html_url": "https://github.com/huggingface/datasets/pull/6213", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6213/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6213.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6213', 'merged_at': None, 'patch_url': 'https://github.com/huggingface/datasets/pull/6213.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6213'}", + "is_pull_request": true + }, + { + "title": "Tilde (~) is not supported for data_files", + "html_url": "https://github.com/huggingface/datasets/issues/6212", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6212/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "Fix empty splitinfo json", + "html_url": "https://github.com/huggingface/datasets/pull/6211", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/6211/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/6211.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/6211', 'merged_at': '2023-09-04T14:47:17Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/6211.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/6211'}", + "is_pull_request": true + } +] \ No newline at end of file diff --git a/examples/data/request_issue.py b/examples/data/request_issue.py new file mode 100644 index 00000000..06e4e6d4 --- /dev/null +++ b/examples/data/request_issue.py @@ -0,0 +1,49 @@ +import json +import requests + +# 从 JSON 文件读取数据 +with open('test_data.json', 'r') as f: + data = json.load(f) + +# 用于保存所有提取的数据 +all_extracted_data = [] + +# 遍历每个条目 +for item in data: + title = item['title'] + comments_url = item['comments_url'] + + # 从评论 URL 获取评论数据 + response = requests.get(comments_url) + + if response.status_code == 200: + comments = response.json() + + # 提取评论数据 + extracted_data = { + "title": title, + } + + for i, comment in enumerate(comments): + entry = { + "user_login": comment["user"]["login"], + "created_at": comment["created_at"], + "updated_at": comment["updated_at"], + "body": comment["body"] + } + + if i == 0: + extracted_data.update(entry) # 第一条评论直接加入 + else: + extracted_data[f"answer_{i}"] = entry # 后续评论作为回答 + + # 添加到总提取数据中 + all_extracted_data.append(extracted_data) + else: + print(f"请求失败,状态码: {response.status_code},对于标题: {title}") + +# 保存提取的数据到新的 JSON 文件 +with open('extracted_data.json', 'w') as f: + json.dump(all_extracted_data, f, indent=4) + +print("所有数据已提取并保存到 extracted_data.json") diff --git a/examples/data/test_data.json b/examples/data/test_data.json new file mode 100644 index 00000000..a7c0161b --- /dev/null +++ b/examples/data/test_data.json @@ -0,0 +1,38 @@ +[ + { + "title": "How to set_epoch with interleave_datasets?", + "html_url": "https://github.com/huggingface/datasets/issues/7051", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7051/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "add checkpoint and resume title in docs", + "html_url": "https://github.com/huggingface/datasets/pull/7050", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7050/comments", + "labels": "[]", + "state": "closed", + "pull_request": "{'diff_url': 'https://github.com/huggingface/datasets/pull/7050.diff', 'html_url': 'https://github.com/huggingface/datasets/pull/7050', 'merged_at': '2024-07-15T15:59:56Z', 'patch_url': 'https://github.com/huggingface/datasets/pull/7050.patch', 'url': 'https://api.github.com/repos/huggingface/datasets/pulls/7050'}", + "is_pull_request": true + }, + { + "title": "Save nparray as list", + "html_url": "https://github.com/huggingface/datasets/issues/7049", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7049/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + }, + { + "title": "ImportError: numpy.core.multiarray when using `filter`", + "html_url": "https://github.com/huggingface/datasets/issues/7048", + "comments_url": "https://api.github.com/repos/huggingface/datasets/issues/7048/comments", + "labels": "[]", + "state": "open", + "pull_request": "NaN", + "is_pull_request": false + } +] \ No newline at end of file diff --git a/examples/government/singletask_learning_bench/imgs/img.png b/examples/government/singletask_learning_bench/imgs/img.png new file mode 100644 index 0000000000000000000000000000000000000000..e2d000f24f7becef40d7f9e71e44c99a4fc1b030 GIT binary patch literal 344769 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�X}`g` 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

vhEi1S*!|w4QKk{(+L8PUV)F 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

!YMP& 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%0D06(K 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%0A%Tw+E~!7@0NOb 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 "print_table": print selected dataitems; + method: "print_table" + + # selected dataitem configuration + # The user can add his/her interested dataitems in terms of "paradigms", "modules", "hyperparameters" and "metrics", + # so that the selected columns will be shown. + selected_dataitem: + # currently the options of value are as follows: + # 1> "all": select all paradigms in the leaderboard; + # 2> paradigms in the leaderboard, e.g., "singletasklearning" + paradigms: [ "all" ] + # currently the options of value are as follows: + # 1> "all": select all modules in the leaderboard; + # 2> modules in the leaderboard, e.g., "basemodel" + modules: [ "all" ] + # currently the options of value are as follows: + # 1> "all": select all hyperparameters in the leaderboard; + # 2> hyperparameters in the leaderboard, e.g., "momentum" + hyperparameters: [ "all" ] + # currently the options of value are as follows: + # 1> "all": select all metrics in the leaderboard; + # 2> metrics in the leaderboard, e.g., "f1_score" + metrics: [ "acc" ] + + # model of save selected and all dataitems in workspace; string type; + # currently the options of value are as follows: + # 1> "selected_and_all": save selected and all dataitems; + # 2> "selected_only": save selected dataitems; + save_mode: "selected_and_all" + + + + + + diff --git a/examples/llm_simple_qa/testalgorithms/data.jsonl b/examples/llm_simple_qa/testalgorithms/data.jsonl new file mode 100644 index 00000000..abc96adb --- /dev/null +++ b/examples/llm_simple_qa/testalgorithms/data.jsonl @@ -0,0 +1,23 @@ +{"question": "如果小明有5个苹果,他给了小华3个,那么小明还剩下多少个苹果?\nA. 2个\nB. 3个\nC. 4个\nD. 5个", "answer": "A"} +{"question": "下列哪个数是最小的质数?\nA. 0\nB. 1\nC. 2\nD. 4", "answer": "C"} +{"question": "一个长方形的长是10厘米,宽是5厘米,它的周长是多少厘米?\nA. 20厘米\nB. 30厘米\nC. 40厘米\nD. 50厘米", "answer": "B"} +{"question": "下列哪个分数是最接近1的?\nA. 1/2\nB. 3/4\nC. 4/5\nD. 5/6", "answer": "D"} +{"question": "如果一个数加上10等于30,那么这个数是多少?\nA. 20\nB. 21\nC. 22\nD. 23", "answer": "A"} +{"question": "下列哪个算式的结果最大?\nA. 3 + 4\nB. 5 - 2\nC. 6 * 2\nD. 7 ÷ 2", "answer": "C"} +{"question": "一个班级有24个学生,如果每个学生都带了2本书,那么总共有多少本书?\nA. 48本\nB. 36本\nC. 24本\nD. 12本", "answer": "A"} +{"question": "下列哪个是正确的乘法口诀?\nA. 三三得七\nB. 四四十六\nC. 五五二十五\nD. 六六三十六", "answer": "B"} +{"question": "如果一个数是另一个数的3倍,并且这个数是15,那么另一个数是多少?\nA. 5\nB. 10\nC. 15\nD. 45", "answer": "A"} +{"question": "下列哪个图形的周长最长?\nA. 正方形\nB. 长方形\nC. 圆形\nD. 三角形", "answer": "C"} + +{"question": "如下是一个Python函数\"def wait(self, wait_time: int) -> list:all_ready = False\n while not all_ready:\n self._instances = self.get_instances()\n if not self._instances:\n self._logger.warning(\n f\\\"No instance found, waiting {wait_time}s ...\\\",\n )\n sleep(wait_time)\n continue\n all_ready = True\n for instance in self._instances:\n if not instance[\\\"health\\\"]:\n self._logger.warning(\n f\\\"Instance {instance['name']} is not ready, waiting {wait_time}s ...\\\",\n )\n sleep(wait_time)\n all_ready = False\n break\n return self._instances\",请问它的作用是什么?\nA. 确保服务或组件的所有实例都可用,然后再继续执行\nB. 函数的作用是在等待指定时间后,立即返回一个包含所有实例的列表,不检查实例的状态\nC. 函数的目的是为每个不健康的实例记录一次警告日志,不进行任何等待或重试\nD. 函数会检查每个实例的健康状态,如果所有实例在首次检查时都健康,就继续等待直到 wait_time 结束,然后返回实例列表", "answer": "A"} +{"question": "如下是一个Python函数\"def _to_instances(self, controller_instance) -> List[dict]:\n instance = {}\n instance[\\\"name\\\"] = controller_instance.name\n instance[\\\"hostname\\\"] = controller_instance.name\n instance[\\\"health\\\"] = controller_instance.status == \\\"running\\\" and controller_instance.attrs[\\\"State\\\"][\\\"Health\\\"][\\\"Status\\\"] == \\\"healthy\\\"\n instance[\\\"env\\\"] = {}\n for env in controller_instance.attrs[\\\"Config\\\"][\\\"Env\\\"]:\n variable = env.split(\\\"=\\\")[0]\n value = env.replace(f\\\"{variable}=\\\", \\\"\\\", 1)\n instance[\\\"env\\\"][variable] = value\n return [instance]\",请问它的作用是什么?\nA. 函数用于修改控制器实例的属性,如名称和主机名\nB. 函数返回一个包含所有控制器实例属性的复杂嵌套结构\nC. 处理单个Docker容器实例并将其信息转换为字典\nD. 函数用于删除控制器实例的环境变量配置", "answer": "C"} +{"question": "如下是一个Python函数\"instance[\\\"health\\\"] = controller_instance.status == \\\"running\\\" and controller_instance.attrs[\\\"State\\\"][\\\"Health\\\"][\\\"Status\\\"] == \\\"healthy\\\"\",请问它的作用是什么?\nA. 代码段会删除controller_instance中的status属性\nB. 多个属性组合起来判断实例的健康状态\nC. 如果controller_instance的状态为running,此代码将instance[\\\"health\\\"]设置为False\nD. 代码段检查controller_instance.attrs[\\\"State\\\"][\\\"Health\\\"][\\\"Status\\\"]的值是否为unhealthy,然后相应地更新instance[\\\"health\\\"]", "answer": "B"} +{"question": "如下是一个Python函数\"result = self.__custom_confs_rx.search(variable)\",请问它的作用是什么?\nA. 这段代码的作用是将字符串 variable 与 self.__custom_confs_rx 进行替换操作\nB. 这段代码会删除 variable 中所有与 self.__custom_confs_rx 匹配的内容\nC. 这段代码用于计算 variable 和 self.__custom_confs_rx 的长度差\nD. 使用正则表达式匹配变量名,判断是否符合特定的配置项格式", "answer": "D"} +{"question": "如下是一个Python函数\"if not self.update_needed(self._instances, self._services, configs=self._configs):\",请问它的作用是什么?\nA. 此函数用于更新类实例中的所有服务和配置\nB. 当 `update_needed` 方法返回 `True` 时,该代码片段将终止程序运行\nC. 调用update_needed方法检查当前配置是否需要更新\nD. 此代码片段用于直接修改 `_instances`、`_services` 和 `_configs` 的值", "answer": "C"} +{"question": "如下是一个Python函数\"def set_value_from_polygon(self, pol_x, pol_y, val, inside=True):\n \\\"\\\"\\\"set_value_from_polygon\n Setting value inside or outside polygon\n :param pol_x: x position list for a polygon\n :param pol_y: y position list for a polygon\n :param val: grid value\n :param inside: setting data inside or outside\n \\\"\\\"\\\"\n # making ring polygon\n if (pol_x[0] != pol_x[-1]) or (pol_y[0] != pol_y[-1]):\n np.append(pol_x, pol_x[0])\n np.append(pol_y, pol_y[0])\n # setting value for all grid\n for x_ind in range(self.width):\n for y_ind in range(self.height):\n x_pos, y_pos = self.calc_grid_central_xy_position_from_xy_index(\n x_ind, y_ind)\n flag = this.check_inside_polygon(x_pos, y_pos, pol_x, pol_y)\n if flag is inside:\n this.set_value_from_xy_index(x_ind, y_ind, val)\",请问它的作用是什么?\nA. 根据多边形的形状设置网格地图中的值\nB. 该函数用于计算多边形的面积\nC. 该函数用于绘制多边形图形\nD. 该函数用于从多边形的顶点坐标生成一个新的多边形对象", "answer": "A"} +{"question": "如下是一个Python函数\"if not check_car_collision(x_list, y_list, yaw_list, ox, oy, kd_tree): return None\",请问它的作用是什么?\nA. 检查生成的路径是否与障碍物冲突。\nB. 这个函数用来检查给定的列表中是否所有元素都相等\nC. 这个函数返回所有在x_list和y_list中的元素的和\nD. 这个函数用于创建一个新的kd树来存储车辆位置数据", "answer": "A"} +{"question": "如下是一个Python函数\"heapq.heappush(pq, (calc_cost(start_node, h_dp, config), calc_index(start_node, config)))\",请问它的作用是什么?\nA. 该函数从堆`pq`中删除一个元素\nB. 将节点添加到优先级队列(使用堆数据结构实现)\nC. 该函数返回堆`pq`中的最大元素\nD. 该函数用于创建一个新的空堆", "answer": "B"} +{"question": "如下是一个Python函数\"def calc_index(node, x_width, x_min, y_min): return (node.y - y_min) * x_width + (node.x - x_min)\",请问它的作用是什么?\nA. 将节点坐标转换为一维索引\nB. 函数用于计算节点在二维网格中的行索引\nC. 函数返回的是从给定节点到最小节点的直线距离\nD. 函数用于计算节点的颜色值在一个色彩数组中的索引", "answer": "A"} +{"question": "如下是一个Python函数\"if use_dynamic_weighting: w = (1 + epsilon - epsilon*depth/upper_bound_depth)\",请问它的作用是什么?\nA. 该函数用于重置 `w` 的值为固定常数\nB. 代码段检查 `depth` 是否大于 `upper_bound_depth`\nC. 调整启发式成本的计算,引入动态权重,优化搜索效率\nD. 该函数将 `w` 的值与 `depth` 成正比增加", "answer": "C"} + + diff --git a/examples/llm_simple_qa/testalgorithms/gen/basemodel.py b/examples/llm_simple_qa/testalgorithms/gen/basemodel.py new file mode 100644 index 00000000..fdeedc98 --- /dev/null +++ b/examples/llm_simple_qa/testalgorithms/gen/basemodel.py @@ -0,0 +1,98 @@ +# Copyright 2022 The KubeEdge Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import absolute_import, division, print_function + +import os +import tempfile +import time +import zipfile +import logging + +import numpy as np +from sedna.common.config import Context +from sedna.common.class_factory import ClassType, ClassFactory + + +from transformers import AutoModelForCausalLM, AutoTokenizer +device = "cuda" # the device to load the model onto + + +logging.disable(logging.WARNING) + +__all__ = ["BaseModel"] + +os.environ['BACKEND_TYPE'] = 'TORCH' + + +@ClassFactory.register(ClassType.GENERAL, alias="gen") +class BaseModel: + + def __init__(self, **kwargs): + self.model = AutoModelForCausalLM.from_pretrained( + "/home/icyfeather/models/Qwen2-0.5B-Instruct", + torch_dtype="auto", + device_map="auto" + ) + self.tokenizer = AutoTokenizer.from_pretrained("/home/icyfeather/models/Qwen2-0.5B-Instruct") + + def train(self, train_data, valid_data=None, **kwargs): + print("BaseModel doesn't need to train") + + + def save(self, model_path): + print("BaseModel doesn't need to save") + + def predict(self, data, input_shape=None, **kwargs): + print("BaseModel predict") + answer_list = [] + for line in data: + response = self._infer(line) + answer_list.append(response) + return answer_list + + def load(self, model_url=None): + print("BaseModel load") + + def evaluate(self, data, model_path, **kwargs): + print("BaseModel evaluate") + + def _infer(self, prompt, system=None): + if system: + messages = [ + {"role": "system", "content": system}, + {"role": "user", "content": prompt} + ] + else: + messages = [ + {"role": "user", "content": prompt} + ] + text = self.tokenizer.apply_chat_template( + messages, + tokenize=False, + add_generation_prompt=True + ) + model_inputs = self.tokenizer([text], return_tensors="pt").to(device) + + generated_ids = self.model.generate( + model_inputs.input_ids, + max_new_tokens=512 + ) + generated_ids = [ + output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids) + ] + + response = self.tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0] + + return response diff --git a/examples/llm_simple_qa/testalgorithms/gen/gen_algorithm.yaml b/examples/llm_simple_qa/testalgorithms/gen/gen_algorithm.yaml new file mode 100644 index 00000000..6536ceb9 --- /dev/null +++ b/examples/llm_simple_qa/testalgorithms/gen/gen_algorithm.yaml @@ -0,0 +1,18 @@ +algorithm: + # paradigm name; string type; + # currently the options of value are as follows: + # 1> "singletasklearning" + # 2> "incrementallearning" + paradigm_type: "singletasklearning" + + # algorithm module configuration in the paradigm; list type; + modules: + # kind of algorithm module; string type; + # currently the options of value are as follows: + # 1> "basemodel" + - type: "basemodel" + # name of python module; string type; + # example: basemodel.py has BaseModel module that the alias is "FPN" for this benchmarking; + name: "gen" + # the url address of python module; string type; + url: "./examples/llm/singletask_learning_bench/simple_qa/testalgorithms/gen/basemodel.py" \ No newline at end of file diff --git a/examples/llm_simple_qa/testalgorithms/gen/op_eval.py b/examples/llm_simple_qa/testalgorithms/gen/op_eval.py new file mode 100644 index 00000000..dc6d9c04 --- /dev/null +++ b/examples/llm_simple_qa/testalgorithms/gen/op_eval.py @@ -0,0 +1,21 @@ +from mmengine.config import read_base +from opencompass.models import HuggingFacewithChatTemplate +# import sys +# sys.path.append('/home/icyfeather/project/ianvs') + +with read_base(): + from core.op_extra.datasets.cmmlu.cmmlu_gen import cmmlu_datasets + +datasets = [*cmmlu_datasets] + +models = [ + dict( + type=HuggingFacewithChatTemplate, + abbr='qwen1.5-1.8b-chat-hf', + path='/home/icyfeather/models/Qwen1.5-1.8B-Chat', + max_out_len=1024, + batch_size=2, + run_cfg=dict(num_gpus=1), + stop_words=['<|im_end|>', '<|im_start|>'], + ) +] diff --git a/examples/llm_simple_qa/testenv/acc.py b/examples/llm_simple_qa/testenv/acc.py new file mode 100644 index 00000000..3285a93a --- /dev/null +++ b/examples/llm_simple_qa/testenv/acc.py @@ -0,0 +1,45 @@ +# Copyright 2022 The KubeEdge Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from sedna.common.class_factory import ClassType, ClassFactory + +__all__ = ["acc"] + +def get_last_letter(input_string): + # 检查输入是否为空或只包含非字母字符 + if not input_string or not any(char.isalpha() for char in input_string): + return None + + # 倒序遍历字符串,找到最后一个字母 + for char in reversed(input_string): + if 'A' <= char <= 'D': + return char + + # 如果没有找到字母,返回None + return None + + +@ClassFactory.register(ClassType.GENERAL, alias="acc") +def acc(y_true, y_pred): + y_pred = [get_last_letter(pred) for pred in y_pred] + print(y_true) + print(y_pred) + + # 使用列表推导来比较两个列表中的元素是否相同 + same_elements = [y_pred[i] == y_true[i] for i in range(len(y_pred))] + + # 计算相同元素的数量 + acc = sum(same_elements) / len(same_elements) + + return acc diff --git a/examples/llm_simple_qa/testenv/testenv.yaml b/examples/llm_simple_qa/testenv/testenv.yaml new file mode 100644 index 00000000..0bc7239f --- /dev/null +++ b/examples/llm_simple_qa/testenv/testenv.yaml @@ -0,0 +1,14 @@ +testenv: + # dataset configuration + dataset: + # the url address of train dataset index; string type; + train_data: "/home/icyfeather/Projects/ianvs/dataset/llm_simple_qa/train_data/data.jsonl" + # the url address of test dataset index; string type; + test_data: "/home/icyfeather/Projects/ianvs/dataset/llm_simple_qa/test_data/data.jsonl" + + # metrics configuration for test case's evaluation; list type; + metrics: + # metric name; string type; + - name: "acc" + # the url address of python file + url: "./examples/llm/singletask_learning_bench/simple_qa/testenv/acc.py" diff --git a/examples/smart_coding/smart_coding_learning_bench/comment/benchmarkingjob.yaml b/examples/smart_coding/smart_coding_learning_bench/comment/benchmarkingjob.yaml new file mode 100644 index 00000000..afd99a68 --- /dev/null +++ b/examples/smart_coding/smart_coding_learning_bench/comment/benchmarkingjob.yaml @@ -0,0 +1,72 @@ +benchmarkingjob: + # job name of bechmarking; string type; + name: "benchmarkingjob" + # the url address of job workspace that will reserve the output of tests; string type; + workspace: "/root/xieb/ianvs/workspace" + + # the url address of test environment configuration file; string type; + # the file format supports yaml/yml; + testenv: "./examples/smart_coding/smart_coding_learning_bench/comment/testenv/testenv.yaml" + + # the configuration of test object + test_object: + # test type; string type; + # currently the option of value is "algorithms",the others will be added in succession. + type: "algorithms" + # test algorithm configuration files; list type; + algorithms: + # algorithm name; string type; + - name: "politic_bench_singletask_learning" + # the url address of test algorithm configuration file; string type; + # the file format supports yaml/yml; + url: "./examples/smart_coding/smart_coding_learning_bench/comment/testalgorithms/gen/gen_algorithm.yaml" + + # the configuration of ranking leaderboard + rank: + # rank leaderboard with metric of test case's evaluation and order ; list type; + # the sorting priority is based on the sequence of metrics in the list from front to back; + sort_by: [ { "llm_judgement": "descend" } ] + + # visualization configuration + visualization: + # mode of visualization in the leaderboard; string type; + # There are quite a few possible dataitems in the leaderboard. Not all of them can be shown simultaneously on the screen. + # In the leaderboard, we provide the "selected_only" mode for the user to configure what is shown or is not shown. + mode: "selected_only" + # method of visualization for selected dataitems; string type; + # currently the options of value are as follows: + # 1> "print_table": print selected dataitems; + method: "print_table" + + # selected dataitem configuration + # The user can add his/her interested dataitems in terms of "paradigms", "modules", "hyperparameters" and "metrics", + # so that the selected columns will be shown. + selected_dataitem: + # currently the options of value are as follows: + # 1> "all": select all paradigms in the leaderboard; + # 2> paradigms in the leaderboard, e.g., "singletasklearning" + paradigms: [ "all" ] + # currently the options of value are as follows: + # 1> "all": select all modules in the leaderboard; + # 2> modules in the leaderboard, e.g., "basemodel" + modules: [ "all" ] + # currently the options of value are as follows: + # 1> "all": select all hyperparameters in the leaderboard; + # 2> hyperparameters in the leaderboard, e.g., "momentum" + hyperparameters: [ "all" ] + # currently the options of value are as follows: + # 1> "all": select all metrics in the leaderboard; + # 2> metrics in the leaderboard, e.g., "f1_score" + metrics: [ "llm_judgement" ] + + # model of save selected and all dataitems in workspace; string type; + # currently the options of value are as follows: + # 1> "selected_and_all": save selected and all dataitems; + # 2> "selected_only": save selected dataitems; + save_mode: "selected_and_all" + + + + + + diff --git a/examples/smart_coding/smart_coding_learning_bench/comment/testalgorithms/gen/basemodel.py b/examples/smart_coding/smart_coding_learning_bench/comment/testalgorithms/gen/basemodel.py new file mode 100644 index 00000000..28f9b82a --- /dev/null +++ b/examples/smart_coding/smart_coding_learning_bench/comment/testalgorithms/gen/basemodel.py @@ -0,0 +1,130 @@ +# Copyright 2022 The KubeEdge Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import absolute_import, division, LOGGER.info_function + +import os +import tempfile +import time +import zipfile +import logging + +import numpy as np +import random +from tqdm import tqdm +from sedna.common.config import Context +from sedna.common.class_factory import ClassType, ClassFactory +from core.common.log import LOGGER +from openai import OpenAI + +from transformers import AutoModelForCausalLM, AutoTokenizer + +device = "cuda" # the device to load the model onto + +logging.disable(logging.WARNING) + +__all__ = ["BaseModel"] + +os.environ['BACKEND_TYPE'] = 'TORCH' + + +@ClassFactory.register(ClassType.GENERAL, alias="gen") +class BaseModel: + + def __init__(self, **kwargs): + self.model = AutoModelForCausalLM.from_pretrained( + "/root/autodl-tmp/Qwen2.5-Coder-1.5B-Instruct", + torch_dtype="auto", + device_map="auto" + ) + self.tokenizer = AutoTokenizer.from_pretrained("/root/autodl-tmp/Qwen2.5-Coder-1.5B-Instruct") + + def train(self, train_data, valid_data=None, **kwargs): + LOGGER.info("BaseModel train") + + def save(self, model_path): + LOGGER.info("BaseModel save") + + def predict(self, data, input_shape=None, **kwargs): + LOGGER.info("BaseModel predict") + + if 'infer_system_prompt' in data.prompts: + infer_system_prompt = data.prompts['infer_system_prompt'] + + answer_list = [] + for line in tqdm(data.x, desc="Processing", unit="question"): + history = [] + query = line.split('||')[0] + if infer_system_prompt: + history.append({"role": "system", "content": infer_system_prompt}) + history.append({"role": "user", "content": query}) + response = self._infer(history) + answer_list.append(response) + + judgement_list = [] + + # evaluate by llm + for index in tqdm(range(len(answer_list)), desc="Evaluating", ascii=False, ncols=75): + prompt = data.prompts['eval_user_template'].replace('{question}', data.x[index].split('||')[0]).replace( + '{reference}', data.x[index].split('||')[1]).replace('{answer}', answer_list[index]) + judgement = self._openai_generate(prompt) + judgement_list.append(judgement) + + return judgement_list + + def load(self, model_url=None): + LOGGER.info("BaseModel load") + + def evaluate(self, data, model_path, **kwargs): + LOGGER.info("BaseModel evaluate") + + def _infer(self, messages): + text = self.tokenizer.apply_chat_template( + messages, + tokenize=False, + add_generation_prompt=True + ) + model_inputs = self.tokenizer([text], return_tensors="pt").to(device) + + generated_ids = self.model.generate( + model_inputs.input_ids, + max_new_tokens=512, + temperature=0.1, + top_p=0.9 + ) + generated_ids = [ + output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids) + ] + + response = self.tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0] + return response + + def _openai_generate(self, user_question, system=None): + key = os.getenv("DEEPSEEK_API_KEY") + client = OpenAI(api_key=key, base_url="https://api.deepseek.com") + + messages = [] + if system: + messages.append({"role": "system", "content": system}) + messages.append({"role": "user", "content": user_question}) + + response = client.chat.completions.create( + model="deepseek-chat", + messages=messages, + stream=False + ) + + res = response.choices[0].message.content + + return res \ No newline at end of file diff --git a/examples/smart_coding/smart_coding_learning_bench/comment/testalgorithms/gen/gen_algorithm.yaml b/examples/smart_coding/smart_coding_learning_bench/comment/testalgorithms/gen/gen_algorithm.yaml new file mode 100644 index 00000000..6536ceb9 --- /dev/null +++ b/examples/smart_coding/smart_coding_learning_bench/comment/testalgorithms/gen/gen_algorithm.yaml @@ -0,0 +1,18 @@ +algorithm: + # paradigm name; string type; + # currently the options of value are as follows: + # 1> "singletasklearning" + # 2> "incrementallearning" + paradigm_type: "singletasklearning" + + # algorithm module configuration in the paradigm; list type; + modules: + # kind of algorithm module; string type; + # currently the options of value are as follows: + # 1> "basemodel" + - type: "basemodel" + # name of python module; string type; + # example: basemodel.py has BaseModel module that the alias is "FPN" for this benchmarking; + name: "gen" + # the url address of python module; string type; + url: "./examples/llm/singletask_learning_bench/simple_qa/testalgorithms/gen/basemodel.py" \ No newline at end of file diff --git a/examples/smart_coding/smart_coding_learning_bench/comment/testalgorithms/gen/op_eval.py b/examples/smart_coding/smart_coding_learning_bench/comment/testalgorithms/gen/op_eval.py new file mode 100644 index 00000000..d916f64a --- /dev/null +++ b/examples/smart_coding/smart_coding_learning_bench/comment/testalgorithms/gen/op_eval.py @@ -0,0 +1,21 @@ +from mmengine.config import read_base +from opencompass.models import HuggingFacewithChatTemplate +# import sys +# sys.path.append('/home/icyfeather/project/ianvs') + +with read_base(): + from core.op_extra.datasets.cmmlu.cmmlu_gen import cmmlu_datasets + +datasets = [*cmmlu_datasets] + +models = [ + dict( + type=HuggingFacewithChatTemplate, + abbr='qwen2.5-1.5b-chat-hf', + path='/root/autodl-tmp/Qwen2.5-Coder-1.5B-Instruct', + max_out_len=1024, + batch_size=2, + run_cfg=dict(num_gpus=1), + stop_words=['<|im_end|>', '<|im_start|>'], + ) +] diff --git a/examples/smart_coding/smart_coding_learning_bench/comment/testenv/llm_judgement.py b/examples/smart_coding/smart_coding_learning_bench/comment/testenv/llm_judgement.py new file mode 100644 index 00000000..58af002d --- /dev/null +++ b/examples/smart_coding/smart_coding_learning_bench/comment/testenv/llm_judgement.py @@ -0,0 +1,47 @@ +# Copyright 2022 The KubeEdge Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import re +from sedna.common.class_factory import ClassType, ClassFactory +from core.common.log import LOGGER + +__all__ = ["llm_judgement"] + +def extract_comprehensive_score(input_str): + # 使用正则表达式匹配综合得分及其分数 + match = re.search(r"'综合得分': (\d+)", input_str) + if match: + # 提取分数并返回 + return int(match.group(1)) + else: + # 如果没有找到匹配项,返回None或其他适当的值 + return None + + +@ClassFactory.register(ClassType.GENERAL, alias="llm_judgement") +def llm_judgement(y_true, y_pred): + y_pred = [extract_comprehensive_score(pred) for pred in y_pred] + + # 过滤掉None值(如果有) + valid_scores = [score for score in y_pred if score is not None] + + LOGGER.info(f"Extracted {len(valid_scores)} datas from {len(y_pred)} datas") + + # 计算平均值 + if valid_scores: + average_score = sum(valid_scores) / len(valid_scores) + return average_score + else: + # 如果没有有效的分数,返回None或其他适当的值 + return -1 diff --git a/examples/smart_coding/smart_coding_learning_bench/comment/testenv/testenv.yaml b/examples/smart_coding/smart_coding_learning_bench/comment/testenv/testenv.yaml new file mode 100644 index 00000000..8b15dae4 --- /dev/null +++ b/examples/smart_coding/smart_coding_learning_bench/comment/testenv/testenv.yaml @@ -0,0 +1,14 @@ +testenv: + # dataset configuration + dataset: + # the url address of train dataset index; string type; + train_data: "/root/xieb/ianvs/dataset/smart_conding/comment/train_data/data.jsonl" + # the url address of test dataset index; string type; + test_data_info: "/root/xieb/ianvs/dataset/smart_conding/comment/test_data/data_info.json" + + # metrics configuration for test case's evaluation; list type; + metrics: + # metric name; string type; + - name: "llm_judgement" + # the url address of python file + url: "./examples/smart_coding/smart_coding_learning_bench/comment/testenv/llm_judgement.py" diff --git a/examples/smart_coding/smart_coding_learning_bench/issue/benchmarkingjob.yaml b/examples/smart_coding/smart_coding_learning_bench/issue/benchmarkingjob.yaml new file mode 100644 index 00000000..7cb60578 --- /dev/null +++ b/examples/smart_coding/smart_coding_learning_bench/issue/benchmarkingjob.yaml @@ -0,0 +1,72 @@ +benchmarkingjob: + # job name of bechmarking; string type; + name: "benchmarkingjob" + # the url address of job workspace that will reserve the output of tests; string type; + workspace: "/root/xieb/ianvs/workspace" + + # the url address of test environment configuration file; string type; + # the file format supports yaml/yml; + testenv: "./examples/smart_coding/smart_coding_learning_bench/issue/testenv/testenv.yaml" + + # the configuration of test object + test_object: + # test type; string type; + # currently the option of value is "algorithms",the others will be added in succession. + type: "algorithms" + # test algorithm configuration files; list type; + algorithms: + # algorithm name; string type; + - name: "politic_bench_singletask_learning" + # the url address of test algorithm configuration file; string type; + # the file format supports yaml/yml; + url: "./examples/smart_coding/smart_coding_learning_bench/issue/testalgorithms/gen/gen_algorithm.yaml" + + # the configuration of ranking leaderboard + rank: + # rank leaderboard with metric of test case's evaluation and order ; list type; + # the sorting priority is based on the sequence of metrics in the list from front to back; + sort_by: [ { "llm_judgement": "descend" } ] + + # visualization configuration + visualization: + # mode of visualization in the leaderboard; string type; + # There are quite a few possible dataitems in the leaderboard. Not all of them can be shown simultaneously on the screen. + # In the leaderboard, we provide the "selected_only" mode for the user to configure what is shown or is not shown. + mode: "selected_only" + # method of visualization for selected dataitems; string type; + # currently the options of value are as follows: + # 1> "print_table": print selected dataitems; + method: "print_table" + + # selected dataitem configuration + # The user can add his/her interested dataitems in terms of "paradigms", "modules", "hyperparameters" and "metrics", + # so that the selected columns will be shown. + selected_dataitem: + # currently the options of value are as follows: + # 1> "all": select all paradigms in the leaderboard; + # 2> paradigms in the leaderboard, e.g., "singletasklearning" + paradigms: [ "all" ] + # currently the options of value are as follows: + # 1> "all": select all modules in the leaderboard; + # 2> modules in the leaderboard, e.g., "basemodel" + modules: [ "all" ] + # currently the options of value are as follows: + # 1> "all": select all hyperparameters in the leaderboard; + # 2> hyperparameters in the leaderboard, e.g., "momentum" + hyperparameters: [ "all" ] + # currently the options of value are as follows: + # 1> "all": select all metrics in the leaderboard; + # 2> metrics in the leaderboard, e.g., "f1_score" + metrics: [ "llm_judgement" ] + + # model of save selected and all dataitems in workspace; string type; + # currently the options of value are as follows: + # 1> "selected_and_all": save selected and all dataitems; + # 2> "selected_only": save selected dataitems; + save_mode: "selected_and_all" + + + + + + diff --git a/examples/smart_coding/smart_coding_learning_bench/issue/testalgorithms/gen/basemodel.py b/examples/smart_coding/smart_coding_learning_bench/issue/testalgorithms/gen/basemodel.py new file mode 100644 index 00000000..28f9b82a --- /dev/null +++ b/examples/smart_coding/smart_coding_learning_bench/issue/testalgorithms/gen/basemodel.py @@ -0,0 +1,130 @@ +# Copyright 2022 The KubeEdge Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import absolute_import, division, LOGGER.info_function + +import os +import tempfile +import time +import zipfile +import logging + +import numpy as np +import random +from tqdm import tqdm +from sedna.common.config import Context +from sedna.common.class_factory import ClassType, ClassFactory +from core.common.log import LOGGER +from openai import OpenAI + +from transformers import AutoModelForCausalLM, AutoTokenizer + +device = "cuda" # the device to load the model onto + +logging.disable(logging.WARNING) + +__all__ = ["BaseModel"] + +os.environ['BACKEND_TYPE'] = 'TORCH' + + +@ClassFactory.register(ClassType.GENERAL, alias="gen") +class BaseModel: + + def __init__(self, **kwargs): + self.model = AutoModelForCausalLM.from_pretrained( + "/root/autodl-tmp/Qwen2.5-Coder-1.5B-Instruct", + torch_dtype="auto", + device_map="auto" + ) + self.tokenizer = AutoTokenizer.from_pretrained("/root/autodl-tmp/Qwen2.5-Coder-1.5B-Instruct") + + def train(self, train_data, valid_data=None, **kwargs): + LOGGER.info("BaseModel train") + + def save(self, model_path): + LOGGER.info("BaseModel save") + + def predict(self, data, input_shape=None, **kwargs): + LOGGER.info("BaseModel predict") + + if 'infer_system_prompt' in data.prompts: + infer_system_prompt = data.prompts['infer_system_prompt'] + + answer_list = [] + for line in tqdm(data.x, desc="Processing", unit="question"): + history = [] + query = line.split('||')[0] + if infer_system_prompt: + history.append({"role": "system", "content": infer_system_prompt}) + history.append({"role": "user", "content": query}) + response = self._infer(history) + answer_list.append(response) + + judgement_list = [] + + # evaluate by llm + for index in tqdm(range(len(answer_list)), desc="Evaluating", ascii=False, ncols=75): + prompt = data.prompts['eval_user_template'].replace('{question}', data.x[index].split('||')[0]).replace( + '{reference}', data.x[index].split('||')[1]).replace('{answer}', answer_list[index]) + judgement = self._openai_generate(prompt) + judgement_list.append(judgement) + + return judgement_list + + def load(self, model_url=None): + LOGGER.info("BaseModel load") + + def evaluate(self, data, model_path, **kwargs): + LOGGER.info("BaseModel evaluate") + + def _infer(self, messages): + text = self.tokenizer.apply_chat_template( + messages, + tokenize=False, + add_generation_prompt=True + ) + model_inputs = self.tokenizer([text], return_tensors="pt").to(device) + + generated_ids = self.model.generate( + model_inputs.input_ids, + max_new_tokens=512, + temperature=0.1, + top_p=0.9 + ) + generated_ids = [ + output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids) + ] + + response = self.tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0] + return response + + def _openai_generate(self, user_question, system=None): + key = os.getenv("DEEPSEEK_API_KEY") + client = OpenAI(api_key=key, base_url="https://api.deepseek.com") + + messages = [] + if system: + messages.append({"role": "system", "content": system}) + messages.append({"role": "user", "content": user_question}) + + response = client.chat.completions.create( + model="deepseek-chat", + messages=messages, + stream=False + ) + + res = response.choices[0].message.content + + return res \ No newline at end of file diff --git a/examples/smart_coding/smart_coding_learning_bench/issue/testalgorithms/gen/gen_algorithm.yaml b/examples/smart_coding/smart_coding_learning_bench/issue/testalgorithms/gen/gen_algorithm.yaml new file mode 100644 index 00000000..11b64a9f --- /dev/null +++ b/examples/smart_coding/smart_coding_learning_bench/issue/testalgorithms/gen/gen_algorithm.yaml @@ -0,0 +1,18 @@ +algorithm: + # paradigm name; string type; + # currently the options of value are as follows: + # 1> "singletasklearning" + # 2> "incrementallearning" + paradigm_type: "singletasklearning" + + # algorithm module configuration in the paradigm; list type; + modules: + # kind of algorithm module; string type; + # currently the options of value are as follows: + # 1> "basemodel" + - type: "basemodel" + # name of python module; string type; + # example: basemodel.py has BaseModel module that the alias is "FPN" for this benchmarking; + name: "gen" + # the url address of python module; string type; + url: "./examples/smart_coding/smart_coding_learning_bench/issue/testalgorithms/gen/basemodel.py" \ No newline at end of file diff --git a/examples/smart_coding/smart_coding_learning_bench/issue/testalgorithms/gen/op_eval.py b/examples/smart_coding/smart_coding_learning_bench/issue/testalgorithms/gen/op_eval.py new file mode 100644 index 00000000..d916f64a --- /dev/null +++ b/examples/smart_coding/smart_coding_learning_bench/issue/testalgorithms/gen/op_eval.py @@ -0,0 +1,21 @@ +from mmengine.config import read_base +from opencompass.models import HuggingFacewithChatTemplate +# import sys +# sys.path.append('/home/icyfeather/project/ianvs') + +with read_base(): + from core.op_extra.datasets.cmmlu.cmmlu_gen import cmmlu_datasets + +datasets = [*cmmlu_datasets] + +models = [ + dict( + type=HuggingFacewithChatTemplate, + abbr='qwen2.5-1.5b-chat-hf', + path='/root/autodl-tmp/Qwen2.5-Coder-1.5B-Instruct', + max_out_len=1024, + batch_size=2, + run_cfg=dict(num_gpus=1), + stop_words=['<|im_end|>', '<|im_start|>'], + ) +] diff --git a/examples/smart_coding/smart_coding_learning_bench/issue/testenv/llm_judgement.py b/examples/smart_coding/smart_coding_learning_bench/issue/testenv/llm_judgement.py new file mode 100644 index 00000000..58af002d --- /dev/null +++ b/examples/smart_coding/smart_coding_learning_bench/issue/testenv/llm_judgement.py @@ -0,0 +1,47 @@ +# Copyright 2022 The KubeEdge Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import re +from sedna.common.class_factory import ClassType, ClassFactory +from core.common.log import LOGGER + +__all__ = ["llm_judgement"] + +def extract_comprehensive_score(input_str): + # 使用正则表达式匹配综合得分及其分数 + match = re.search(r"'综合得分': (\d+)", input_str) + if match: + # 提取分数并返回 + return int(match.group(1)) + else: + # 如果没有找到匹配项,返回None或其他适当的值 + return None + + +@ClassFactory.register(ClassType.GENERAL, alias="llm_judgement") +def llm_judgement(y_true, y_pred): + y_pred = [extract_comprehensive_score(pred) for pred in y_pred] + + # 过滤掉None值(如果有) + valid_scores = [score for score in y_pred if score is not None] + + LOGGER.info(f"Extracted {len(valid_scores)} datas from {len(y_pred)} datas") + + # 计算平均值 + if valid_scores: + average_score = sum(valid_scores) / len(valid_scores) + return average_score + else: + # 如果没有有效的分数,返回None或其他适当的值 + return -1 diff --git a/examples/smart_coding/smart_coding_learning_bench/issue/testenv/testenv.yaml b/examples/smart_coding/smart_coding_learning_bench/issue/testenv/testenv.yaml new file mode 100644 index 00000000..b2b2e64d --- /dev/null +++ b/examples/smart_coding/smart_coding_learning_bench/issue/testenv/testenv.yaml @@ -0,0 +1,14 @@ +testenv: + # dataset configuration + dataset: + # the url address of train dataset index; string type; + train_data: "/root/xieb/ianvs/dataset/smart_conding/issue/train_data/data.jsonl" + # the url address of test dataset index; string type; + test_data_info: "/root/xieb/ianvs/dataset/smart_conding/issue/test_data/data_info.json" + + # metrics configuration for test case's evaluation; list type; + metrics: + # metric name; string type; + - name: "llm_judgement" + # the url address of python file + url: "./examples/smart_coding/smart_coding_learning_bench/issue/testenv/llm_judgement.py"