Giter VIP home page Giter VIP logo

signetlabdei / sem Goto Github PK

View Code? Open in Web Editor NEW
34.0 9.0 30.0 5.14 MB

A framework to manage ns-3 simulation campaigns: let SEM perform multiple parallelized executions of your ns-3 scenario, permanently save the results and output them in plotting-friendly data structures. All from the comfort of the command line or in a few, clean lines of Python code.

Home Page: https://simulationexecutionmanager.rtfd.io

License: GNU General Public License v2.0

Python 99.92% Makefile 0.03% Shell 0.05%
ns-3

sem's Introduction

A Simulation Execution Manager for ns-3

Binder

This is a Python library to perform multiple ns-3 script executions, manage the results and collect them in processing-friendly data structures.

How does this work?

For complete step-by-step usage and installation instructions, check out our documentation.

How to cite us

If you used SEM for your ns-3 analysis, please cite the following paper, both to provide a reference and help others find out about this tool:

Davide Magrin, Dizhi Zhou, and Michele Zorzi. 2019. A Simulation Execution Manager for ns-3: Encouraging reproducibility and simplifying statistical analysis of ns-3 simulations. In Proceedings of the 22nd International ACM Conference on Modeling, Analysis and Simulation of Wireless and Mobile Systems (MSWIM '19). ACM, New York, NY, USA, 121-125. DOI: https://doi.org/10.1145/3345768.3355942

Contributing

This section contains information on how to contribute to the project. If you are only interested in using SEM, check out the documentation.

If you want to contribute to sem development, first of all you'll need an installation that allows you to modify the code, immediately see the results and run tests.

Building the module from scratch

This module is developed using poetry: in order to correctly manage virtual environments and install dependencies, make sure it is installed. Typically, the following is enough:

curl -sSL https://install.python-poetry.org | python3 -

Note that, if poetry's installer does not add poetry's path to your shell's startup file properly, you may need to add source $HOME/.poetry/env to your startup file. You can tell that you need to add it if your shell cannot find the poetry command the next time you open a terminal window.

Then, clone the repo (or your fork, by changing the url in the following command), also getting the ns-3 installations that are used for running examples and tests:

git clone https://github.com/signetlabdei/sem
cd sem
git submodule update --init --recursive

From the project root, you can then install the package and the requirements with the following:

poetry install

This will also get you a set of tools such as sphinx, pygments and pytest that handle documentation and tests.

Finally, you can spawn a sub-shell using the new virtual environment by calling:

poetry shell

Now, you can start a python REPL to use the library interactively, issue the bash sem program, run tests and compile the documentation of your local copy of sem.

Running tests

This project uses the pytest framework for running tests. Tests can be run, from the project root, using:

python -m pytest --doctest-glob='*.rst' docs/
python -m pytest -x -n 3 --doctest-modules --cov-report term --cov=sem/ ./tests

These two commands will run, respectively, all code contained in the docs/ folder and all tests, also measuring coverage and outputting it to the terminal.

Since we are mainly testing integration with ns-3, tests require frequent copying and pasting of folders, ns-3 compilations and simulation running. Furthermore, documentation tests run all the examples in the documentation to make sure the output is as expected. Because of this, full tests are far from instantaneous. Single test files can be targeted, to achieve faster execution times, by substituting ./tests in the second command with the path to the test file that needs to be run.

Building the documentation

Documentation can be built locally using the makefile's docs target:

make docs

Running examples

The scripts in examples/ can be directly run:

python examples/wifi_example.py

Installing SEM in pip's editable mode

pip currently requires a setup.py file to install projects in editable mode.

As explained here, poetry actually already generates a setup.py. After building the project, you can extract the file from the archive using the following command:

tar -xvf dist/*.tar.gz --wildcards --no-anchored '*/setup.py' --strip=1

After this step, it becomes possible to install SEM in editable mode.

Authors

Davide Magrin

sem's People

Contributors

dvdmgr avatar gdelazzari avatar iirzyk avatar marshallasch avatar mattia-lecci avatar mychele avatar pagmatt avatar

Stargazers

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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

sem's Issues

SEM : FileNotFoundError: [Errno 2] No such file or directory: '/home/aks/IB/new/bake/source/ns-3.36/build/optimized/build-status.p

Hello,
I used SEM a year ago, and it works perfectly! However, with Python 3.10, it does not work as expected.
I want to run a simulation about lorawan, so I start by : sem run --results-dir=./results --ns-3-path=. --script=complete-network-example
However, I get the following error :
/usr/lib/python3/dist-packages/scipy/init.py:146: UserWarning: A NumPy version >=1.17.3 and <1.25.0 is required for this version of SciPy (detected version 1.26.1
warnings.warn(f"A NumPy version >={np_minversion} and <{np_maxversion}"
Building ns-3: 100%|██████████████████████████████████████████████████████████████████████| [06:04<00:00]
Traceback (most recent call last):
File "/home/aks/IB/new/bake/source/ns-3.36/SEM_IB/Lora_SEM_start3.py", line 16, in
campaign = sem.CampaignManager.new(ns_path, script, campaign_dir, overwrite=True)
File "/home/aks/.local/lib/python3.10/site-packages/sem/manager.py", line 157, in new
runner = CampaignManager.create_runner(ns_path, script,
File "/home/aks/.local/lib/python3.10/site-packages/sem/manager.py", line 260, in create_runner
return locals().get(runner_type,
File "/home/aks/.local/lib/python3.10/site-packages/sem/runner.py", line 78, in init
spec.loader.exec_module(build_status)
File "", line 879, in exec_module
File "", line 1016, in get_code
File "", line 1073, in get_data
FileNotFoundError: [Errno 2] No such file or directory: '/home/aks/IB/new/bake/source/ns-3.36/build/optimized/build-status.py'

Any help ?
Thanks

User-generated scenarios won't run

User-generated scenarios from the scratch directory won't run because of a naming mismatch:

cp examples/ns-3/examples/wireless/wifi-multi-tos.cc examples/ns-3/scratch/my-multi-tos.cc
sem run --ns-3-path=/home/szott/sem/examples/ns-3 --results-dir=/home/szott/sem/results_my-multi-tos
...
FileNotFoundError: [Errno 2] No such file or directory: '/home/szott/sem/examples/ns-3/build/optimized/scratch/ns3-dev-my-multi-tos-op

Comment from Davide:

It looks like the contents of build/build_status.py are incorrect, and show the wrong path. I am undecided on how to tackle this: we can either modify the wscript to have the build_status.py point to the correct executable or modify the code that looks for the script executable to also take into account the scratch directory.

module 'sem.utils' has no attribute

Hi,
I downloaded SEM develop branches in 2 computers.
The first one is my personal one and is working perfectly while the second one (UNIPD DEI lab) gives me the following error module 'sem.utils' has no attribute ... for each of the attribute I assign to sem.utils (Eg module 'sem.utils' has no attribute 'yelds_multiple_results' or output_lables(['a','b']) )

Do you know how to solve it?

Multi CPUs parallel execution

Hi,
where can I find an example of how to run my NS3 simulations in parallel with SEM using all my CPUs?
I'm actually using campaign.run_missing_simulations(params, runs=runs)

No module named 'poetry.masonry'

I believe that this line:

build-backend = "poetry.masonry.api"

should be
build-backend = "poetry.core.masonry.api"
It is causing issues when I have sem = {git = "https://github.com/signetlabdei/sem", rev = "develop"} in my pyproject.toml file

This is also preventing the develop branch from being loaded using pip install from a requirements file

Exception: ns-3 repository is not clean

Hi,
I just started to study this library.
I cloned the develop branch and I'm trying to run the WiFi plots example. When I run the following code
ns_path = '../../ns3' script = 'wifi-multi-tos' campaign_dir = "results" campaign = sem.CampaignManager.new(ns_path, script, campaign_dir, overwrite=True)
I obtain the following exception: Exception: ns-3 repository is not clean.
What does it mean?

Compilation ended with an error

Hi,
I'm trying to run the WIFI plots.ipynb file and I cannot understand why I get this error. Can someone help me please ?
Here below there is the screenshot of the error

Screenshot_2021-06-03 WiFi Plots - Jupyter Notebook

Absolute path to scratch subdirectories not correctly built

Hi Davide,

We had difficulties using SEM with scripts lying in a subdirectory of scratch.

Tracing back to runner.py, during init L98, I noticed that the reconstruction of the absolute path ignored potential subdirectories within scratch (i.e. for a script in scratch\subdir\script, self.script_executable is rebuilt as \[ns_path]\build\optimized\scratch\script for optimized mode).
Btw, we tried providing subdir\script but it failed to find it during the preceding search.

It would be great if this gets fixed (we found a quick-and-dirty workaround of hard-coding the subdir in the source code...).

BR,

Rediet

Logging with SEM

Hi,
I was using SEM to run some ns-3 scripts and noticed that I wasn’t able to use the logging commands inside the ns-3 script. I looked into how ns-3 normally uses logging and found that it uses 'getenv' to extract the NS_LOG environment variable. I was wondering if something similar is available in SEM or does SEM have a different approach for enabling logging?

Thanks.

Exception: ns-3 repository is not clean

Hello,

While Running a file,
I am facing below error
Exception: ns-3 repository is not clean

Steps followed to recreate the error,
-Copied current version lorawan OF module in ns-3/src/ Directory
-Then run any of the example, In the above i took complete-network-example.cc to test

Extract default values from script

Allowing the use of an ns-3 script's default values would make simulation scenario configuration easier.

Comment from Davide:

If you can come up with a way to extract the default value from the script (maybe it's specified in the command line help, I haven't checked) then maybe we could allow incomplete parameter specifications when running simulations and rely on the script defaults, provided we know what they will be. In case you are interested in tackling this, I'd suggest looking at sem/runner.py::get_available_parameters, and modifying that function to maybe return a list of tuples, like [[param1, defaultValue1], [param2, defaultValue2], ...] instead of the current [param1, param2, ...]. Of course, the rest of the library would also need to be updated to handle this new data structure.

The command line option --PrintHelp could be useful.

invalid argument value when using a lambda / function

Based on your comment #46 (comment), and your recent WNS3 2021 presentation, I tried using a lambda to set 2 of my parameters to the same value using the following param_list

param_combination = {
    'total-nodes': [40, 80, 120, 160, 200],
    'storage-space': lambda p: p['total-nodes'],
    'buffer-space': lambda p: p['total-nodes'],
...
}

campaign.run_missing_simulations(param_combination, runs=1)

when running that batch of simulations I got an error about the lambda failing to pickle

Running simulations:   0%|                                                                                              | 0/1 [00:00<?, ?simulation/s]
Traceback (most recent call last):
  File "/home/user/Documents/ns3_stuff/experiment/./simulation.py", line 55, in <module>
    campaign.run_missing_simulations(param_combination, runs=1)
  File "/home/user/.local/lib/python3.9/site-packages/sem/manager.py", line 372, in run_missing_simulations
    self.run_simulations(
  File "/home/user/.local/lib/python3.9/site-packages/sem/manager.py", line 292, in run_simulations
    for result in result_generator:
  File "/home/user/.local/lib/python3.9/site-packages/tqdm/std.py", line 1185, in __iter__
    for obj in iterable:
  File "/home/user/.local/lib/python3.9/site-packages/sem/parallelrunner.py", line 22, in run_simulations
    for result in pool.imap_unordered(self.launch_simulation,
  File "/usr/lib64/python3.9/multiprocessing/pool.py", line 870, in next
    raise value
  File "/usr/lib64/python3.9/multiprocessing/pool.py", line 537, in _handle_tasks
    put(task)
  File "/usr/lib64/python3.9/multiprocessing/connection.py", line 211, in send
    self._send_bytes(_ForkingPickler.dumps(obj))
  File "/usr/lib64/python3.9/multiprocessing/reduction.py", line 51, in dumps
    cls(buf, protocol).dump(obj)
_pickle.PicklingError: Can't pickle <function <lambda> at 0x7f22bfe71940>: attribute lookup <lambda> on __main__ failed

So I tried writing it the other way you suggested without the lambda:

def getNumNodes(param):
    return param['total-nodes']

param_combination = {
    'total-nodes': [40, 80, 120, 160, 200],
    'storage-space': getNumNodes,
    'buffer-space': getNumNodes,
...
}

campaign.run_missing_simulations(param_combination, runs=1)

and got the error

Stderr: Invalid argument value: storage-space=<function getNumNodes at 0x7f4f4d8eb940>
...

Use this command to reproduce:
python waf --run "rhpman-example  --total-nodes=40 --storage-space=<function getNumNodes at 0x7f4f4d8eb940> --buffer-space=<function getNumNodes at 0x7f4f4d8eb940> --RngRun=0"

It appears as though this is caused by the function not actually being called to generate the correct value for the field.
Is there a way arround this error or will I have to specify the values without using the function?
I currently using the latest pip package, version 0.2.3.

Delete specific simualtion from result folder

Hi,
I would like to delete specific simulations from my results. What is the best way to do it? In the documentation, I saw that there is the method delete_result(result) . If it's correct can I see an example code on how to apply it?

Run simulation with couple of parameters

Hi,
I would like to run a simulation without running all the possible simulations but some parameters are used as couple. Here's an example:

params = { 'nWifi': [1, 2, 3], 'distance': [1 ,5 ,10], 'simTime': [15], } runs=2

If I run this I obtain 3 * 3 * 1 * 2=18 simulations because the campaign is performing all the possible simulations. I would like to run 3 * 1 * 2=6 simulations where

  • the first one is using nWifi=1 and distance=1
  • the second one nWifi=2 and distance=5
  • the third one nWifi=3 and distance=10
  • 4,5,6 is repeating the same three but with a different value for runs

Is it possible?

Output Folder Name

Hi,

While using the SEM simulation, the output results are stored with Folder names such as "fe0b754e-87e7-4570-ba88-2a546f7a8c4e".

Is there a way to set some parameters in the script so that the output folder gets stored as run1, run2, run3, etc, instead of the random numbers like above?

Thanks

Support other simulation frameworks

Hello,

I am currently developing a network simulator using the Simpy Python library.
Since there are not many experiment managers for Python, I think it would be nice to make SEM a more general framework for running experimental campaigns with a custom script, non necessarily ns3-based.

Can this feature be supported or does this collide with the purpose of the project?
It seems to me that it should not take much work, the only issue is that currently the SimulationRunner class has some ns3-specific code, which could be refactored out.

Thank you in advance

Error: "No such file or directory: 'path-to-ns3/build/build-status.py'"

Hello,

Trying to use the module with new freshly-built versions of ns-3 produces this error: "No such file or directory: 'path-to-ns3/build/build-status.py'". The new ./ns3 script writes the same info in .lock-ns3_linux_build in the main ns-3 dir (for reference). I think the error is produced by the code in runner.py, but there may be other instances.

Unable to run simulations as root.

To run the simulations campaign as root with the new toolchain a flag (--enable-sudo) should be included in the command and at the moment there is no way to do it in sem.

I propose to add this flag in the CampaignManager or to check this at runtime before launching the ./ns3 configure command.

What do you think @pagmatt and others interested?

GlobalValues as command line arguments

Hi,
in some of my scripts I use GlobalValues for command line arguments.
However, given that they are printed with --PrintGlobals and not with --PrintHelp, they do not appear as parameters for the library.

Test Failure

Hello,

I am trying to install SEM and facing below errors while running tests.

image

image

Please guide me in correcting these errors.
Thanks in Advance

Using DRMAA clusters for parallel execution of simulations

I would like to use the DRMAA: from the documentation I saw I have to use the method create_runner(script,runner_type=’Auto’,optimized=True,skip_configuration=False,max_parallel_processes=None) and set runner_type=GridRunner.
I don't understand where do I have to create this runner? and once I create it, how can I run all the simulations?

To make it easy, if I have the following basic code, what do I have to change to use the DRMAA?

campaign  = sem.CampaignManager.new(ns_path, script, campaign_dir, overwrite=False, check_repo=False)
paramstot = contains the parameters for my simulation                                         
campaign.run_missing_simulations(paramstot, runs=4)
resultDF  = campaign.get_result_as_dataframe(methodname, labels)

Debug commands are broken

When using

sem command

the proposed debug version of the command is blank after --command-template="

Error with get_results_as_numpy_array

If I try to use get_results_as_numpy_array instead of get_results_as_xarray in wifi-plotting-xarray.py example, I get the following error:

Traceback (most recent call last):
File "my-wifi-plotting-xarray.py", line 123, in
main()
File "my-wifi-plotting-xarray.py", line 81, in main
get_average_throughput)
File "/mnt/data/sem/git-repos/develop/sem/manager.py", line 335, in get_results_as_numpy_array
result_parsing_function)))
TypeError: get_space() missing 1 required positional argument: 'runs'

By the way, there is no example using this method. So, I don't really know how to use it. But it seems 'run' parameter is missing in the method declaration and in the call to self.get_space()

Allow re-use of RngRun parameter

We should devise an ergonomic way to allow users to specify an RngRun parameter together with their simulation parameter combinations. This can come in handy if one wants to compare two simulations using the same RngRun (to get the same placement of buildings and devices, for instance) and compare two different parameter combinations.

Exporting Output Files from campaign

Hello,

During my simulation I am generating many text and csv files.
How can I access them or export to other location.

I tried to export the files with sem export. A directory is created but all the files are not present.
Just one csv file from my simulation (When I open it, it is empty) is present in the database
Below is the image : showing stderr stdout and Location.csv

image

please help me figure out what mistake I am making.

Thanks

error while running simple example

import sem
ns_path = '/home/ns3/Desktop/ns-allinone-3.30.1/ns-3.30.1/'
script = 'wifi-multi-tos'
campaign_dir = 'temp'
campaign = sem.CampaignManager.new(ns_path, script, campaign_dir, overwrite=True)
print(campaign)
Building ns-3: 57%|█████▋ | 1382/2441 [00:04<13:10, 1.34file/s]
Exception Traceback (most recent call last)
in
3 script = 'wifi-multi-tos'
4 campaign_dir = 'temp'
----> 5 campaign = sem.CampaignManager.new(ns_path, script, campaign_dir, overwrite=True)
6 print(campaign)

~/.local/lib/python3.6/site-packages/sem/manager.py in new(cls, ns_path, script, campaign_dir, runner_type, overwrite, optimized, check_repo)
116 runner = CampaignManager.create_runner(ns_path, script,
117 runner_type=runner_type,
--> 118 optimized=optimized)
119
120 # Get list of parameters to save in the DB

~/.local/lib/python3.6/site-packages/sem/manager.py in create_runner(ns_path, script, runner_type, optimized)
209 return locals().get(runner_type,
210 globals().get(runner_type))(
--> 211 ns_path, script, optimized=optimized)
212
213 ######################

~/.local/lib/python3.6/site-packages/sem/runner.py in init(self, path, script, optimized)
54
55 # Configure and build ns-3
---> 56 self.configure_and_build(path, optimized=optimized)
57
58 # ns-3's build status output is used to get the executable path for the

~/.local/lib/python3.6/site-packages/sem/runner.py in configure_and_build(self, show_progress, optimized, skip_configuration)
146 pbar = tqdm(line_iterator, initial=initial, total=total,
147 unit='file', desc='Building ns-3', smoothing=0)
--> 148 for current, total in pbar:
149 pbar.n = current
150 except (StopIteration):

~/.local/lib/python3.6/site-packages/tqdm/std.py in iter(self)
1174
1175 try:
-> 1176 for obj in iterable:
1177 yield obj
1178 # Update and possibly print the progressbar.

~/.local/lib/python3.6/site-packages/sem/runner.py in get_build_output(self, process)
170 ".\nSTDERR\n%s\nSTDOUT\n%s" %
171 (process.stderr.read(),
--> 172 process.stdout.read()))
173 return
174 if output:

Exception: Compilation ended with an error.
STDERR
b"../../src/csma/model/csma-net-device.cc: In member function 'void ns3::CsmaNetDevice::Receive(ns3::Ptrns3::Packet, ns3::Ptrns3::CsmaNetDevice)':\n../../src/csma/model/csma-net-device.cc:801:8: error: 'm_openFlowRxCallback' was not declared in this scope\n if (!m_openFlowRxCallback.IsNull ())\n ^~~~~~~~~~~~~~~~~~~~\n../../src/csma/model/csma-net-device.cc:801:8: note: suggested alternative: 'm_promiscRxCallback'\n if (!m_openFlowRxCallback.IsNull ())\n ^~~~~~~~~~~~~~~~~~~~\n m_promiscRxCallback\n../../src/csma/model/csma-net-device.cc:825:8: error: 'm_openFlowRxCallback' was not declared in this scope\n if (!m_openFlowRxCallback.IsNull ())\n ^~~~~~~~~~~~~~~~~~~~\n../../src/csma/model/csma-net-device.cc:825:8: note: suggested alternative: 'm_promiscRxCallback'\n if (!m_openFlowRxCallback.IsNull ())\n ^~~~~~~~~~~~~~~~~~~~\n m_promiscRxCallback\n../../src/csma/model/csma-net-device.cc: At global scope:\n../../src/csma/model/csma-net-device.cc:1071:80: error: no 'void ns3::CsmaNetDevice::SetOpenFlowReceiveCallback(ns3::NetDevice::PromiscReceiveCallback)' member function declared in class 'ns3::CsmaNetDevice'\n CsmaNetDevice::SetOpenFlowReceiveCallback (NetDevice::PromiscReceiveCallback cb)\n ^\n../../src/csma/model/csma-net-device.cc:1078:80: error: no 'void ns3::CsmaNetDevice::SetOpenFlowReceiveCallback(ns3::NetDevice::PromiscReceiveCallback)' member function declared in class 'ns3::CsmaNetDevice'\n CsmaNetDevice::SetOpenFlowReceiveCallback (NetDevice::PromiscReceiveCallback cb)\n ^\n\nBuild failed\n -> task in 'ns3-csma' failed with exit status 1 (run with -v to display more information)\n"
STDOUT
b''

Add maximum number of parallel simulations variable

Allow users to specify the maximum size of the Process pool when using the ParallelRunner. This will avoid using up too many resources on a shared computer. Also allow control of this variable through options in the CLI.

SimulationRunner::configure_and_build() has redundant `optimized` parameter

The optimized parameter in SimulationRunner::configure_and_build() is redundant since it is already a class parameter.

sem/sem/runner.py

Lines 135 to 136 in a6c5b29

def configure_and_build(self, show_progress=True, optimized=True,
skip_configuration=False):

The suggested action is to remove this parameter from the signature and to change the following usage in self.optimized:

if optimized:

ModuleNotFoundError: No module named 'sem' DEI Account

Hi,
I'm using my DEI account from home and I'm connecting using SSH. I installed SEM with

pip3 install --user -U https://github.com/signetlabdei/sem/archive/develop.zip
and then I cloned the "develop" branch.
When I run my SCRUM file I get this error

  File "sem_file.py", line 2, in <module>
    import sem
ModuleNotFoundError: No module named 'sem'
Traceback (most recent call last):
  File "thesis_scrum1.py", line 2, in <module>
    import sem
ModuleNotFoundError: No module named 'sem'

I already tried to do 'pip3 uninstall sem' and reinstalling it but the error persists.
Does someone have some experience with it?

Error with xarray

Running example wifi-plotting-example gives an error when calling get_results_as_xarray:

Traceback (most recent call last):
File "my-wifi-plotting-xarray.py", line 120, in
main()
File "my-wifi-plotting-xarray.py", line 78, in main
'AvgThroughput', runs)
File "/mnt/data/sem/git-repos/develop/sem/manager.py", line 370, in get_results_as_xarray
dims=list(clean_parameter_space.keys()))
File "/usr/local/lib/python3.5/dist-packages/xarray/core/dataarray.py", line 227, in init
coords, dims = _infer_coords_and_dims(data.shape, coords, dims)
File "/usr/local/lib/python3.5/dist-packages/xarray/core/dataarray.py", line 82, in _infer_coords_and_dims
'coordinate %r' % (d, sizes[d], s, k))
ValueError: conflicting sizes for dimension 'nWifi': length 3 on the data but length 2 on coordinate 'nWifi'

When I run the example different times, I get different errors. Each time the error is related with a different parameter, but always related to the call to get_results_as_xarray:

  • ValueError: conflicting sizes for dimension 'distance': length 3 on the data but length 2 on coordinate 'distance'
  • ValueError: conflicting sizes for dimension 'useShortGuardInterval': length 3 on the data but length 2 on coordinate 'useShortGuardInterval'
  • ValueError: conflicting sizes for dimension 'useRts': length 3 on the data but length 2 on coordinate 'useRts'

Environment:
Ubuntu 16.04
python 3.5.2
xarray 0.10.7

Recommend Projects

  • React photo React

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

  • Vue.js photo Vue.js

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

  • Typescript photo Typescript

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

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

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

  • web

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

  • server

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

  • Machine learning

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

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

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

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.