[CLAD] Auto-index​ing

Dear all,
In one of the CLAD sample exams the question is as follows:
Auto-indexing at loop boundary is a feature that allows: (more than one answer may apply)
 a. Arrays to be automatically traversed from one iteration to the next
 b. Array functions to automatically index array elements
 c. Functions that use arrays to automatically index them
 d. Arrays to be automatically accumulated at loop boundaries
I thought B and D are correct, however according to the sample exam the correct answers are A and D. The justification given is "Auto-indexing is a feature for loops interacting with arrays. Array functions themselves do not have iterative auto-indexing features.". I thought A relates to shift registers?
Thank you in advance

Jeff·Þ·Bohrer wrote:
While a bit missleading in wording A is correct Auto indexing input tunnels traverses the row index of an array such that row i is on the wire inside the loop.  Shift registers and feedback nodes cannot auto index.  Those nodes pass data between loop iterations 
I have to disagree with you Jeff.  The sentence says traverse arrays from one iteration to the next.  The arrays are not being passed on to the next iteration.  The rows are being indexed, not moved on to the next iteration.
There are only two ways to tell somebody thanks: Kudos and Marked Solutions

Similar Messages

  • Auto-indexing is slow for arrays with 1 dimensions

    Hi,
    I was looking at the performance of operations on all individual elements in 3D arrays, especially the difference between auto-indexing (left image) and manual-indexing (right image, calling "Index array" and "Replace array subset" in the innermost loop). I'm a bit puzzled by the results and post it here for discussion and hopefully somebody's benefit in the future.
    Left: auto-indexing; right: manual-indexing
    In the tests I added a different random number to all individual elements in a 3D array. I found that auto-indexing is 1.2 to 1.5 times slower than manual-indexing. I also found that the performance of auto-indexing is much more dependent on the size the dimensions: an array with 1000x200x40 elements is 20% slower than an array with 1000x40x200 elements. For manual-indexing there is hardly any difference. The detailed results can be found at the end of this post.
    I was under the impression that auto-indexing was the preferred method for this kind of operation: it achieves exactly the same result and it is much clearer in the block diagram. I also expected that auto-indexing would have been optimized in LabView, but the the tests show this is clearly not the case.
    What is auto-indexing doing?
    With two tests I looked at how auto-index works.
    First, I looked if auto-indexing reorganizes the data in an inefficient way. To do this I made a method "fake-auto-indexing" which calls "Array subset" and "Reshape array" (or "Index array" for a 1D-array) when it enters _every_ loop and calls "Replace array subset" when exiting _every_ loop (as opposed to manual-indexing, where I do this only in the inner loop). I replicated this in a test (calling it fake-auto-indexing) and found that the performance is very similar to auto-indexing, especially looking at the trend for the different array lengths.
    Fake-auto-indexing
    Second, I looked if Locality of reference (how the 3D array is stored in memory and how efficiently you can iterate over that) may be an issue. Auto-indexing loops over pages-rows-columns (i.e. pages in the outer for-loop, rows in the middle for-loop, columns in the inner for-loop). This can't be changed for auto-indexing, but I did change it for manual and fake-indexing. The performance of manual-indexing is now similar to auto-indexing, except for two cases that I can't explain. Fake-auto-indexing performs way worse in all cases.
    It seems that the performance problem with auto-indexing is due to inefficient data organization.
    Other tests
    I did the same tests for 1D and 2D arrays. For 1D arrays the three methods perform identical. For 2D arrays auto-indexing is 15% slower than manual-indexing, while fake-auto-indexing is 8% slower than manual-indexing. I find it interesting that auto-indexing is the slowest of the three methods.
    Finally, I tested the performance of operating on entire columns (instead of every single element) of a 3D array. In all cases it is a lot faster than iterating over individual elements. Auto-indexing is more than 1.8 to 3.4 times slower than manual-indexing, while fake-auto-indexing is about 1.5 to 2.7 times slower. Because of the number of iterations that has to be done, the effect of the size of the column is important: an array with 1000x200x40 elements is in all cases much slower than an array with 1000x40x200 elements.
    Discussion & conclusions
    In all the cases I tested, auto-indexing is significantly slower than manual-indexing. Because auto-indexing is the standard way of indexing arrays in LabView I expected the method to be highly optimized. Judging by the tests I did, that is not the case. I find this puzzling.
    Does anybody know any best practices when it comes to working with >1D arrays? It seems there is a lack of documentation about the performance, surprising given the significant differences I found.
    It is of course possible that I made mistakes. I tried to keep the code as straightforward as possible to minimize that risk. Still, I hope somebody can double-check the work I did.
    Results
    I ran the tests on a computer with a i5-4570 @ 3.20 GHz processor (4 cores, but only 1 is used), 8 GB RAM running Windows 7 64-bit and LabView 2013 32-bit. The tests were averaged 10 times. The results are in milliseconds.
    3D-arrays, iterate pages-rows-columns
    pages x rows x cols : auto    manual  fake
       40 x  200 x 1000 : 268.9   202.0   268.8
       40 x 1000 x  200 : 276.9   204.1   263.8
      200 x   40 x 1000 : 264.6   202.8   260.6
      200 x 1000 x   40 : 306.9   205.0   300.0
     1000 x   40 x  200 : 253.7   203.1   259.3
     1000 x  200 x   40 : 307.2   206.2   288.5
      100 x  100 x  100 :  36.2    25.7    33.9
    3D-arrays, iterate columns-rows-pages
    pages x rows x cols : manual  fake
       40 x  200 x 1000 : 277.6   457       
       40 x 1000 x  200 : 291.6   461.5
      200 x   40 x 1000 : 277.4   431.9
      200 x 1000 x   40 : 452.5   572.1
     1000 x   40 x  200 : 298.1   460.4     
     1000 x  200 x   40 : 460.5   583.8
      100 x  100 x  100 :  31.7    51.9
    2D-arrays, iterate rows-columns
    rows  x cols  : auto     manual   fake
      200 x 20000 :  123.5    106.1    113.2    
    20000 x   200 :  119.5    106.1    115.0    
    10000 x 10000 : 3080.25  2659.65  2835.1
    1D-arrays, iterate over columns
    cols   : auto  manual  fake
    500000 : 11.5  11.8    11.6
    3D-arrays, iterate pages-rows, operate on columns
    pages x rows x cols : auto    manual  fake
       40 x  200 x 1000 :  83.9   23.3     62.9
       40 x 1000 x  200 :  89.6   31.9     69.0     
      200 x   40 x 1000 :  74.3   27.6     62.2
      200 x 1000 x   40 : 135.6   76.2    107.1
     1000 x   40 x  200 :  75.3   31.2     68.6
     1000 x  200 x   40 : 133.6   71.7    108.7     
      100 x  100 x  100 :  13.0    5.4      9.9
    VI's
    I attached the VI's I used for testing. "ND_add_random_number.vi" (where N is 1, 2 or 3) is where all the action happens, taking a selector with a method and an array with the N dimensions as input. It returns the result and time in milliseconds. Using "ND_add_random_number_automated_test.vi" I run this for a few different situations (auto/manual/fake-indexing, interchanging the dimensions). The VI's starting with "3D_locality_" are used for the locality tests. The VI's starting with "3D_norows_" are used for the iterations over pages and columns only.
    Attachments:
    3D_arrays_2.zip ‏222 KB

    Robert,
    the copy-thing is not specific for auto-indexing. It is common for all tunnels. A tunnel is first of all a unique data space.
    This sounds hard, but there is an optimization in the compiler trying to reduce the number of copies the VI will create. This optimization is called "in-placeness".
    The in-placeness algorithm checks, if the wire passing data to the is connected to anything else ("branch"). If there is no other connection then the tunnel, chance is high that the tunnel won't create an additional copy.
    Speaking of loops, tunnels always copies. The in-placeness algorithm cannot opt that out.
    You can do a small test to elaborate on this: Simply wire "0" (or anything less than the array sizy of the input array) to the 'N' terminal.......
    Norbert
    PS: Auto-indexing is perfect for a "by element" operation of analysis without modification of the element in the array. If you want to modify values, use shift registers and Replace Array Subset.
    CEO: What exactly is stopping us from doing this?
    Expert: Geometry
    Marketing Manager: Just ignore it.

  • Creating an array without using "auto-indexing"

    Hello,
    it is terrible! I'm new in working with LV5.0 (Evaluation) and I can't
    find any examples how to write data into an array without using the
    function "auto-indexing" of the "WHILE" or "FOR"-loops..
    The values do not appear all at the same time, so I can't use the
    "create_array" function.
    So I want to "collect" all occured values and then write them e.g. in a
    file.
    Did I miss anything in the description ???
    Who can help me?
    Thanks, CHZ

    CHZ wrote in message news:[email protected]..
    > Hello,
    > it is terrible! I'm new in working with LV5.0 (Evaluation) and I can't
    > find any examples how to write data into an array without using the
    > function "auto-indexing" of the "WHILE" or "FOR"-loops..
    > The values do not appear all at the same time, so I can't use the
    > "create_array" function.
    > So I want to "collect" all occured values and then write them e.g. in a
    > file.
    The "Create array" function can be configured to take arrays as well as
    elements. You have to use a loop that iterates as often as necessary,
    checking for new data. When it receives new data, it adds the new data to
    the existing array. It's probably easier to attach a small example than to
    describe it in more
    detail.
    [Attachment Array.zip, see below]
    Attachments:
    Array.zip ‏10 KB

  • Auto index only shows partial data

    Hi everyone,
    Please see the attached file.  I've added notes where the data goes missing.  I know it has something to do with auto-indexing and I spent quite a bit of time reading about it and trying different things but I really need some help now please.
    Thank you!
    Solved!
    Go to Solution.
    Attachments:
    For forum.vi ‏47 KB
    For forum.xlsx ‏12 KB

    Think about what you're trying to do.
    You have three arrays you're indexing.  Let's say they're lengths 1, 2, and 3.
    In the first iteration, we'd index 0 and get back a value from all three.
    In the second iteration, we'd index 1 and get back two values and have a bounds conflict.
    In the third iteration, we'd index 2 and get back a single value while having two bounds conflicts.
    Anything you process in the second and third iteration is garbage.  You have bad inputs so the output isn't useful to you.  In some languages, this will throw an error at runtime for indexing out of bounds.  Some will just let you process the garbage.  In no case do you WANT to run this.
    If you want to process all the elements of the array of size 3, you need to fill in values for the first to arrays to make them all have a length of 3.  Once you do that, the loop will run as you desire.  If you have auto-indexed tunnels with fewer elements than the constant you wire, they will override the terminal, as they should.

  • Auto-index only shows 9 values instead of 91

    I'm pretty new to LabVIEW and am trying to show a cluster of 91 values pulled from a text file.  Just for a test run without using actual values passed, I created a text file with the numbers ranging from 1-91 (1 number per line up to 91).  When I let it auto index and try to unbundle it after transforming it from an array to a cluster, it only shows 9 values instead of 91.  Do you happen to know how I can overcome this issue?
    I have attached the basic files.
    Solved!
    Go to Solution.
    Attachments:
    For Loop Problem.vi ‏7 KB
    SMA.txt ‏1 KB

    STigmata08 wrote:
    Thank you very much, I had no idea that you could select a cluster size from the transformation.  I am converting it to a cluster because I thought that it would be the best form to insert the data into different parts of a word template.  I am trying to build an auto reporting tool for a test sequence.
    You need to set thee cluster size, because clusters are static structures and the size needs to be known at compile time. This also makes them useless for your problem.
    To extract all lines from a file, you could use Spreadsheed string to array with a 1D string array as type and linefeet as delimiter. No need for FOR loops and complicated code. Also your sequence structure has no purpose because execution order is fully determined by dataflow anyway. Why is it there? Don't clutter the diagram with useless constructs!
    Here's what you could do. You can get any element, array subsets, etc. using array tools. These are scalable and you don't need to know beforehand how many line are in the file.
    Here's a quick draft (LV8.6)... 
    LabVIEW Champion . Do more with less code and in less time .
    Attachments:
    For Loop ProblemMOD.vi ‏8 KB
    ArrayNoCluster.PNG ‏9 KB

  • Using auto-indexing tunnels to write data files?

    Hi,
    I am using ni-motion controller to control a servo motor and collect position and torque data. I want to write the collected data to TDMS files.
    Recently I learned about the producer/consumer design pattern and I figured that would be a good approach to ensure that writing the files didn't slow down my data collection timed loop.
    However, I also figured out that my program seems to run well if I wire the data I collect to auto-indexing tunnels. Then I use a structure that only executes after all the data collection is done to write the arrays I built to TDMS files.
    Is there any reason that the latter method would be advised against? Can the auto idexing tunnels slow down my loop enough for it cause concern? I am only collecting about 5000 data points for each channel.
    Cheers,
    Kenny
    Solved!
    Go to Solution.

    Well, autoindexing tunnels don't write data files, they just accumulate data until the loop completes. If this is a FOR loop with a known number of iterations, the size of the output data can be allocated in one swoop, which is very efficient. If you are autoindexing on a WHILE loop, the final array size is not known, so LabVIEW needs to make a guess and and requires occasional new memory allocations whenever the last guess is exceeded. This is inefficient.
    One problem with these approaches is if the program or computer crashes. In this case the data in the shift register is lost forever, while if you would stream it to disk, you would have most of the data acquired so far.
    If you use a proper producer/consumer architecture, you should be able to asynchronously write the data and it will not slow down your acquisition. No need ot wait for the competion of data gathering.
    LabVIEW Champion . Do more with less code and in less time .

  • My 6th Generation Nano Shuts down my Thinkpad, I've tried uninstalling iTunes, turning off auto sync'ing and restoring my ipod, but every time I plug in my iPod, my whole pc goes blue and then reboots in safe mode. Please Help. Thanks.

    My 6th Generation Nano Shuts down my Thinkpad, I've tried uninstalling iTunes, turning off auto sync'ing and restoring my ipod, but every time I plug in my iPod, my whole pc goes blue and then reboots in safe mode. Please Help. Thanks.

    Hello kidmango,
    I am going to have to agree with planb77. Look into other drivers in your computer causing the issue, not just the nano's drivers.
    It is possible that security software is the culprit. Use this:
    iTunes: Troubleshooting security software issues
    You may have to restore your computer to a previous point. From before the issue started. Contact computer manufacture or Windows for steps, or do a search with a search engine.
    I would test the ipod on a known good computer to see if its the ipod is the issue. My gut says no. You can set a reservation at an Apple Retail Store. Apple.com/retail .You can also test a known good ipod on your computer.
    Hope this helps.
    ~Julian

  • Unable to create auto-indexing loop tunnel

    I am modifying a VI created by someone else, and in the block diagram there is a loop tunnel that is supposed to be auto-indexing. But when I open the file the loop tunnel is non auto-indexing and will not allow me to change it to auto-indexing (when I right click it says "Disable Indexing" but it is light gray and cannot be clicked on). When the same file is opened on another computer the tunnel is auto-indexing and the VI runs without any errors. How can I fix this problem?
    Using Labview 2013

    This normally happens when you install DAQmx before installing LabVIEW.  The DAQmx installer will autodetect what programming language support needs installed.  So you do not need to do anything special other than install the drivers after installing LabVIEW.
    There are only two ways to tell somebody thanks: Kudos and Marked Solutions
    Unofficial Forum Rules and Guidelines

  • Convert "1D array of dynamic data" to "Dynamic data" after auto-indexing with loop

    Hi -
    I have a question about how exaclty auto-indexing works with the Dynamic Data type when exiting a while loop. I'd like to use the DAQ assistant to record data through an analog input (on the MyDAQ) and then replay that data through an analog output. This works fine if I use the DAQ Assistant to record data for a set amount of time:
    However, I run into trouble when I try to use a While loop with a stop button to record data for an arbitrary amount of time. I set the dynamic data tunnel out of the While loop to "Indexing", but then when it exits the loop, it becomes "1-D Array of Dynamic Data" instead of just "Dynamic Data", and get a broken wire when I try to connect it to the input of the DAQ Assistant. I've also tried converting the dynamic data to Array and Waveform data types inside the loop, but have the same issue (they become 2D Array and 2D Array of Waveform respectively when leaving the loop). Try as I might using blocks like Convert to/from Dynamic Data Type, or Array Subset, I'm unable to get them back down to just Dynamic Data or Waveform, which will be accepted by the DAQ Assistant:
    One other small note - I'm not sure if using the "Build Array" function with a shift register accomplishes exactly the same thing as just auto-indexing an array out of the loop - so I've tried both, but still have the broken wire issue.
    I'm assuming this is just a simple issue of using the right block to convert "1D Array of [Something]" to just plain [Something]. Any help appreciated.
    Attachments:
    PWM_FlatSequence.vi ‏101 KB
    PWM_FlatSequence_While.vi ‏129 KB

    I have been facing problem for all temperature values placing the Write to Measurement File outside the Loop. 
    In Error message it says" Source: 1D array of dynamic data and Sink: Dynamic data".
    Is there any means of convering 1D array of dynamic data to dynamic data?
    I would highly appreciate any help.
    Attachments:
    Temperature Logger.vi ‏110 KB

  • Array Size doesn't work correctly after "Auto-indexed Tunnel"

    Array Size returns value even if Empty Array is detected after "Auto-indexed Tunnel" tha generates 2D array.
    See example + VI with correct output as I expected.
    OR
    There is problem with generating 2D array --- It's empty. 1D array is generated in right way. 100 x 0 but not Emptu Array.
    Attachments:
    ArraySize_Bug.vi ‏9 KB
    ArraySize_Corrected.vi ‏19 KB

    Not a bug. This is correct behavior that is consistent with other parts of LabVIEW.
    The decision to handle multi-dimensional arrays like this was made long ago and is an enshrined part of the LabVIEW language spec. It will not be changed.

  • What is physical meaning of Auto indexing array input ...

    What is the physical interpretation of auto indexing.?
    Solved!
    Go to Solution.

    It is like a Pez Dispenser. Every time the loop iterates the neck pops back and you get the next piece of candy. The loop keeps going popping out yummy candy (I don't like the peppermint but I do like orange) until the dispenser is empty. If you have more than one Pez Dispenser then their heads are all tied together so that they pop back simultaniously and cannot do so independently. This has the unfortunate consequence that once one of them runs out you are done even though there are still other Pez Dispensers full of strawberry or grape. Even worse, if one of them is empty then none of their heads can pop back and you get no candy whatsoever!
    [Edit: I am trying to be funny and not sarcastic. I hope you don't take it wrong ]
    =====================
    LabVIEW 2012

  • Auto index entry generation for a range of sentences?

    Is there any way to mark a range of sentences and associate it with a particular index entry? For a lengthy book, I don't think one can really expect the text to never change, hence regenerating the index needs to continue to work even if a bit of text was added which pushes one of the range of sentences onto the next page.
    The closest thing I found was to mark the beginning of the range of sentences with an index entry for "the next 1 paragraph," but this doesn't seem to work. In my example document, http://goldfinches.org/InDesign/Failed%20Index%20Entry.indd the "Dog" entry spans two pages, but only 1 paragraph, and yet the index that is generated only has the first page in it.

    Greg,
    There is no way to say, index from here to here. But you can use any of the range designators. From what you're describing, the most likely to be useful is the one that indexes up to the next instance of a particular paragraph style.
    Dave

  • Bridge Auto-Indexing?

    RIght now I'm using bridge to upload files onto a file server with keywords, with a number of others uploading too. However, when we want to search for files using keywords, we have to check the option "Include Non-indexed Files" so that the search goes through files that others have uploaded, and it is very slow. Is there a way to make the server keep an eye on one file and automatically index it when new files are uploaded? or is there any other solution that would work better?

    This realization is leading me to try and find another third party solution,
    another challenge in itself. ideally I am looking for a solution that that
    does not restrict how assets are cataloged by the application. For example I
    do not like Extensis Portfolio, because you only have access to the assets
    through Portfolio, they are not otherwise accessible.
    As Adobes policy has been for years that it is impossible to have a right
    solution for every network (which is an understandable statement with all
    the different set ups user have in their own configuration) their is a
    growing demand from users for such a solution to have a reasonable usage for
    Bridge over a network.
    You would not hold your breath for realization of it at this moment. If you
    need this for asset management look also at Canto Cumulus.
    There is a but and I believe that is reasonable, don't think you could use
    the single user version (I have it and compared to Extensis Portfolio and
    Expression Media by far the best solution for me) and probably need a custom
    set up they will create for you.
    The but is in this part, as Bridge is still a 'free' application that comes
    with applications from the Adobe Suites you will have to pay a lot more for
    such a solution.
    Frankly I think that could also be reasonable if you have many workers that
    need this and have a giant workflow improvement

  • Blackberry Torch 9810 auto-rotat​ing not working !

    Hello guys my friend just bought a Blackberry Torch 9810 few weeks ago , only two weeks I think.
    And yesterday she found out that the auto-rotating doesn't work - that is the first time she tried to rotate the phone because she want to stream a video. 
    Hard or Soft reset has been done , reboot has been done , sliders not open , no rotation lock apps has been installed.
    Is this the sensor problem ? I mean , the phone is like brand new and just bought two weeks and the sensor got problem so fast ?
    If anyone knows that exact and working solution please help ~ 
    Thank you. 

    Hi and Welcome to the Community!
    I recommend that you attempt to boot into Safe Mode:
    KB17877 How to start a BlackBerry smartphone in Safe Mode
    It may take you multiple attempts to get the ESC key sequence (press/release/hold) correct, so be patient. When successfully into Safe Mode, see what happens.
    If the behavior ceases, then think carefully...what happened just before this behavior started? A new app? An update? A Theme? Something else? Think carefully as the smallest change could be causal...and attempt to undo whatever that was.
    But if the behavior continues in Safe Mode, then you may need to consider more drastic actions -- WIPE, OS Reload, BBSAK Wipe/Reload, and the "Bare Bones" OS Reload Process. To prepare, you should be sure that you have a full backup to your PC...please review the Backup link in my auto-sig on this post for instructions.
    Nainai wrote:
    Is this the sensor problem ? I mean , the phone is like brand new and just bought two weeks and the sensor got problem so fast ?
    It could be...any device designed, built, and operated by humans is subject to a defect rate greater than zero. But, at an internet distance, it is of course impossible to provide an actual diagnosis, especially if the problem indeed is hardware. Only in hand evaluation by a qualified technician can truly diagnose a hardware problem.
    Good luck and let us know!
    Occam's Razor nearly always applies when troubleshooting technology issues!
    If anyone has been helpful to you, please show your appreciation by clicking the button inside of their post. Please click here and read, along with the threads to which it links, for helpful information to guide you as you proceed. I always recommend that you treat your BlackBerry like any other computing device, including using a regular backup schedule...click here for an article with instructions.
    Join our BBM Channels
    BSCF General Channel
    PIN: C0001B7B4   Display/Scan Bar Code
    Knowledge Base Updates
    PIN: C0005A9AA   Display/Scan Bar Code

  • Auto indexing

    Hi all,
    I have the following issue.
    When <b>I</b> create a new document in a KMdirectory(I have content_admin_role, contentmanager, system_admin e.t.c.), <b>almost automatically</b>, this document is indexed by the available index. (I have modified the queque parameters accordingly).
    <b>BUT</b>, when <b>a user </b>(without the content_amin_role), creates a document in the same directory(PublicDocs), his document is not picked up by the Index.
    I have to run manually "incremental Update" from  the Index administrator in order to force this document to the Index.
    Could you please tell me what I have to do in order user's documents being indexed automatically?
    Many thanks in advance
    Vasso

    Achim,
    thanks for your reply.
    I forgot to mention, that when I assigned the role content_admin_role to the user, everything is working OK, but this is not a solution.
    About your reply, -I am new in portal- could you pls give some info, where to find these log files? (SP13)
    Many thanks
    Vasso

Maybe you are looking for

  • Batch number coming automatically at the time of Process order release

    Hi All, I want the system generated batch number for header material to come automatically at the time of process order release. At present ,the batch number is entered manualy dering process order creation. Can anyone pls guide abt the settings requ

  • Input/Output Error USB 2.0 External Hard Drive

    I recently started having problems with an external hard drive setup that I did not have prior to trying to setup the drive to be compatible with Time Machine. The hard drive enclosure that I have has 2 bays for two SATA drives. I have used this encl

  • Problem with Seek and RTMPPosteFrameElement

    I am having difficulties seeking a serial element, and I believe it's because we removed the Temporal trait inside the RTMPPosterFrameElement.  When I comment out that code, the posterframe does not pause but the serial element seeks fine. Otherwise,

  • How is Reqmts calculated in CM01( capacity Planning: Detailed Capacity List.

    I believe Reqmts is the difference between the 'To be confirmed' and 'confirmed hours'. If let suppose standard hours for a part to be manufacture is 100hrs and we have already work 52 hrs off 100hrs then if i go and look up this order in CM01 then t

  • How long to fix a fault?

    The fault was reported on 7th April.  Do I now begin to get a refund for line rental?